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