向量化函数作为matlabFunction

时间:2019-07-11 09:56:01

标签: matlab symbolic-math

我正在尝试在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.01.0替换为更通用的zeros(size(in1))ones(size(in1))? / p>

谢谢您的帮助!

0 个答案:

没有答案