2014-02-18 74 views
1

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

+0

阅读http://www.mathworks.com/help/symbolic/symfun.html和http://www.mathworks.com/help/symbolic/creating-symbolic-variables-and-expressions.html#bs_tekf- 1 – mhmsa

+0

@mhmsa:您是否阅读过文档?使用这些页面我没有设法将symfun放入矩阵中。我设法创建的所有东西都是一个返回矩阵的symfun。 – Daniel

回答

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])} 

也许这是你的情况就足够了。

+0

我需要一个矩阵,但正如你所说,我似乎无法通过阅读文档来完成它... –

4

不能创建的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

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

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}) 
+0

非常感谢,非常有用! –

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 

请注意,即使它包含更多的元素,z是一个1x1符号函数。 z仍将表现得像一个向量,因此您可以在矩阵向量操作中将其用作法向量。