将常量值 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));
假设我使用符号表达式生成 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));