将常量值MATLAB函数应用于数组

时间:2015-07-12 23:31:52

标签: arrays matlab function symbolic-math

假设我使用符号表达式生成MATLAB函数,有时可以是常量。例如,如果我计算不同曲线的梯度,则其中一个矢量分量可以是数字:

syms x y;
expr = x^2 - 4*y;
grad = gradient(expr, [x, y]);

grad_func = matlabFunction(grad, 'Vars', [x, y]);

假设我想将它应用于一系列点。是否有一种方法可以使生成的MATLAB函数足够强大,以便始终返回与输入大小相同的数组,即使原始分析表达式(或其某个组成部分)是常量?

我尝试以下方法:

X = [-1:0.2:1]; 
Y = [-1:0.2:1];
[Gx, Gy] = grad_func(X,Y);

但得到错误:

  

使用vertcat时出错

     

连接的矩阵的尺寸不一致。

     

symengine中的错误> makeFhandle / @(x,y)[x。* 2.0; -4.0]

我也试过使用ARRAYFUN:

[Gx, Gy] = arrayfun(grad_func,X,Y);

但也失败了:

  

此作业的右侧值太少,无法满足左侧。

     

symengine中的错误> makeFhandle / @(x,y)[x。* 2.0; -4.0]

1 个答案:

答案 0 :(得分:2)

以下是执行数组函数的方法

 g = cell2mat(arrayfun(@(x,y) grad_func(x,y), X(:)',Y(:)', 'uni', 0));
 Gx = reshape(g(1, :), size(X));
 Gy = reshape(g(2, :), size(Y));