我正在尝试在MATLAB中自动执行一个过程。我有一个符号函数,必须将其转换为匿名函数。
基本上,我有这样的东西:
syms x y z t
var = [x y z t];
f = x.^2+y;
gf = gradient(f, var);
gf_fun = matlabFunction(gf, 'vars', {var});
提供输出
gf_fun =
function_handle with value:
@(in1)[in1(:,1).*2.0;1.0;0.0;0.0]
现在,我想一次评估几个 gf_fun ,但是,由于 gf_fun 的编写方式,我当然得到了奇怪的结果。例如,如果我想同时在6个(不同)点中评估 gf_fun ,那么我得到的是
rng('deafult')
vv = ones(6,4);
gf_fun(vv)
ans =
1.3575
1.5155
1.4863
0.7845
1.3110
0.3424
1.0000
0
0
而不是尺寸为4x6的矩阵,每个列都是对单个点的求值。
我知道一种解决方法是使用for循环,即
results = zeros(4,6);
for i = 1:6
results(:,i) = gf_fun(vv(i,:));
end
但是出于代码性能的原因,我必须避免使用它。
有没有一种方法可以自动完成所有过程,同时将矩阵作为 gf_fun 的输出,同时评估不同的点?因此,基本上,有一种简单的方法可以自动将 gf_fun 中的0.0
和1.0
替换为更通用的zeros(size(in1))
和ones(size(in1))
? / p>
谢谢您的帮助!