符号函数矩阵

时间:2014-02-18 18:27:33

标签: matlab symbolic-math

我想在Matlab中定义一个符号函数矩阵(而不是变量)。在工作区中,我希望它是大小为N-by-M的类symfun的元素(其中NM是正整数)。

3 个答案:

答案 0 :(得分:5)

你不能创建symfun类元素的矩阵(可能与一个can't create a matrix of function handles的原因相同),但是你可以创建一个返回符号表达式矩阵的符号函数:

syms x y z;
Afun = symfun([x+y y-z;y/x z-1],[x y z])
B = Afun(sym(pi),cos(y),z^2)

当然,在评估之前,您无法直接访问Afun的元素,但您可以使用formula来提取它们:

Amat = formula(Afun);
Amat(1)

可以将symfun连接到矩阵中,只要它们都具有相同的输入参数(不需要使用参数)。但是,连接仍然不会形成symfun s的矩阵 - 它只是连接公式本身,所以你仍然最终得到一个symfun

另一种选择是创建符号表达式矩阵,例如:

syms x y z;
A = [2*x    3*y^2   x+z;
     -y^3+1 sin(x)  sym('pi');
     3.5    exp(-z) 1/x];

可以使用subs进行评估:

B = subs(A,{x,y,z},{sym(pi),cos(y),z^2})

正常的矩阵运算起作用,例如:

B = subs(A(2,:),{x,y,z},{sym(pi),cos(y),z^2})

答案 1 :(得分:1)

我不知道如何创建矩阵,但是可以使用单元格:

c={symfun(x+y, [x y]),symfun(x+2*y, [x y]);symfun(x+3*y, [x y]),symfun(x+4*y, [x y])}

在您的情况下,这可能就足够了。

答案 2 :(得分:0)

例如,如果您想在向量中安排一些匿名符号函数,可以执行以下操作:

z = sym([]);    %declare z as an empty symbolic array

N = 6;          %array size

for i = 1:N
   syms(sprintf('z%d(t)', i)) %declare each element in the array as a single symbolic function

   zz = symfun(sym(sprintf('z%d(t)', i)), t); %declare each element to a symbolic "handle"

   z = [z;zz]; %paste the symbolic "handle" into an array 
end

请注意,matlab将z视为1x1符号函数,即使它包含更多元素。 z仍然会像向量一样运行,因此您可以在矩阵向量运算中将其用作法向量。