我正在尝试求解 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?
我正在尝试求解 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?
Matlab 不(自然地)进行符号计算——这是您的代码试图做的。Matlab的变量需要是具体的数字,或者数组,或者结构等。它们不能只是任意数字的占位符。
(除非:您使用 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);
我使用反斜杠运算符进行线性反转的地方。
你现在应该有
(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))
使用符号运算符执行计算的代码是:
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 在另一个答案中所展示的方法。但有时情况需要一个象征性的解决方案。