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

Apply constant-value MATLAB function to array

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

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

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

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

我尝试以下操作:

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

但出现错误:

Error using vertcat

Dimensions of matrices being concatenated are not consistent.

Error in symengine>makeFhandle/@(x,y)[x.*2.0;-4.0]


我也尝试过使用 ARRAYFUN:

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

但也失败了:

The right hand side of this assignment has too few values to satisfy the left hand side.

Error in symengine>makeFhandle/@(x,y)[x.*2.0;-4.0]

数组函数的操作方法如下

 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));