假设我使用符号表达式生成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]
答案 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));