在matlab中使用未指定的常量

时间:2012-02-14 17:27:23

标签: matlab linear-algebra symbolic-math

我正在尝试解决s域中的方程组。因此,以矩阵形式建立这个方程组:

a=[.4*s+s+5 -5; -5 .5*s+5]  
c=[3/s; 3/(2*s)]  
(1/s)*a*b=c

我只是得到s未定义的错误。 我怎样才能用s来解决b?

2 个答案:

答案 0 :(得分:5)

Matlab没有(自然地)进行符号计算 - 这是你的代码试图做的事情。 Matlab的变量需要是具体的数字,数组或结构等。它们不能只是任意数字的占位符。

(除非:你使用symbolic computing toolbox用于Matlab。我没有真正使用过这个,因为我更喜欢在Maple或Mathematica等环境中进行符号计算。你甚至可以在Wolfram Alpha网站上解决你的问题)

但是如果你选择一个特定的s值,计算你想要的东西很简单:

s = 5;
a=[.4*s+s+5 -5; -5 .5*s+5];
c=[3/s; 3/(2*s)];
b = s*(a\c);

我使用backslash operator进行线性反演。

你现在应该有那个

(1/s)*a*b-c

是零向量。

编辑:我查看了符号工具箱。看起来这就是你想要的(但你需要获得许可和安装的符号工具箱才能工作):

syms s;
a=[.4*s+s+5 -5; -5 .5*s+5];
c=[3/s; 3/(2*s)];
b = simple(s*(a\c))

答案 1 :(得分:1)

使用符号运算符执行计算的代码是:

syms s;                           %This defines 's' as a symbolic token
a=[.4*s+s+5 -5; -5 .5*s+5];       %a and c inherit the symbolic properties from s
c=[3/s; 3/(2*s)];                 
result = solve('(1/s)*a*b=c','b') %Solve is the general symbolic toolbox algebraic solver.

这会产生

result =
(c*s)/a

一般来说,Matlab作为数值工具箱表现最佳。因此,根据您的应用程序,我会采用另一种方法,例如Ian Hincks在另一个答案中演示的方法。但有时情况需要一种象征性的解决方案。