【发布时间】:2015-07-12 23:31:52
【问题描述】:
假设我使用符号表达式生成 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]
【问题讨论】:
标签: arrays matlab function symbolic-math