Matlab:创建一个symfun数组

时间:2015-06-07 07:59:31

标签: arrays matlab symbolic-math

我试图创建一个symfun数组,这样我以后可以访问这些函数并对特定变量执行diff操作,我搜索并找到代码为:< / p>

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

1 个答案:

答案 0 :(得分:1)

我认为你的意思是

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

返回

f(x1, x2, x3) =

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

同样,这会返回相同的输出:

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数组,那么您需要使用cell array。原因是symfun实际上是一个函数句柄。一个人也必须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)

返回

f =

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

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

另见this related question