Matlab:创建一个 symfun 数组

Matlab: creating an array of symfun

我试图创建一个 symfun 的数组,以便我以后可以访问这些函数并对特定变量执行 diff 操作 w.r.t,我已经搜索并发现代码为:

syms x
f = symfun([x1^2+x2-x3; x2+x3^2; x1*x2], x);

但这不是我要找的东西,这个片段正在从数组中创建一个 symfun,但我需要创建一个 symfun 的数组。因此,如果我将 n symfun 存储在一个数组中,并将 n 个变量存储在一个数组中,那么我想创建一个具有以下规则的矩阵:

[[diff(func_1, x1)    diff(func_1, x2) ...... diff(func_1, xn)]
 [diff(func_2, x1)    diff(func_2, x2) ...... diff(func_2, xn)]
  .
  .
  .
  .
 [diff(func_n, x1) .......................... diff(func_n, xn)]]

这是我的代码:

function[K] = bigPopaPump()
x1 = sym('x1')
x2 = sym('x2')
f1 = symfun(3*x1+2, x1)
f2 = symfun(8*x2+5, x2)
funcs = [f1, f2]
xess = [x1, x2]
dummy_array = zeros(2, 2)
for i = 1:size(funcs)
    for j = 1:size(funcs)
        dummy_array(i, j) = diff(funcs(i), xess(j));
    end
end
display dummy_array
end

我假设你的意思是

syms x1 x2 x3
f = symfun([x1^2+x2-x3; x2+x3^2; x1*x2], [x1 x2 x3])

哪个returns

f(x1, x2, x3) =

 x1^2 + x2 - x3
      x3^2 + x2
          x1*x2

同样,这个 returns 相同的输出:

syms x1 x2 x3
f = [symfun(x1^2+x2-x3, [x1 x2 x3]);
     symfun(x2+x3^2, [x1 x2 x3]);
     symfun(x1*x2, [x1 x2 x3])]

如果你也想要一个 symfun's then you'll need to use cell array. The reason for this is that a symfun is effectively a function handle. One must use cell arrays rather than arrays to group function handles 的数组。

以你的例子为例:

syms x1 x2 x3
f = {symfun(x1^2+x2-x3, [x1 x2 x3]);
     symfun(x2+x3^2, [x1 x2 x3]);
     symfun(x1*x2, [x1 x2 x3])}

syms x1 x2 x3
f = arrayfun(@(fx)symfun(fx,[x1 x2 x3]),[x1^2+x2-x3; x2+x3^2; x1*x2],'UniformOutput',false)

returns

f =

    [1x1 symfun]
    [1x1 symfun]
    [1x1 symfun]

然后您可以计算第一个函数,例如,通过 f{1}(2,3,4)

另见 this related question