我试图创建一个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
答案 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)
。