这是我求解方程系统的代码。
我的代码有问题,但我无法修复。
D=1
E=2
F=3
syms a b c;
S= solve('a+b-c=D','2*+b-3*c=E','a-2*b=F')
S = [S.a S.b S.c]
用符号求解
解决问题查看solve
的文档,您可以看到一个示例,以输入solve
函数。它们不应该是字符串(就像您完成的一样),而是应该是使用==
代替=
的方程。
文档示例:
syms x solx = solve(sin(x) == 1,x)
将此应用于您的系统:
D=1; E=2; F=3;
syms a b c;
S = solve(a+b-c==D, 2*b-3*c==E, a-2*b==F);
S = [S.a S.b S.c];
% Ouput:
% S = [5/7, -8/7, -10/7]
注意,在上面的示例中,我用*
在您的第二个方程式中替换了*+
。使用*
或+
,但不是两者!我假设这是错字,这不是您问题的根源。
另一个不使用符号数学的选项
您也可以在没有符号数学工具箱的情况下解决此问题。您的方程式可以写为
1a + 1b - 1c = D
0a + 2b - 3c = E
1a - 2b + 0c = F
以矩阵形式与
相同 1 1 -1 a D
0 2 -3 * b = E
1 -2 0 c F
使用矩阵操作,可以通过通过3x3矩阵的倒数对两侧进行预言来求解。在MATLAB中,获得此结果很容易:
% Set up 3x3 matrix of coefficients
coeffs = [1 1 -1; 0 2 -3; 1 -2 0];
% Set up left hand side vector
DEF = [1; 2; 3];
% Solve
S = coeffsDEF;
% Ouput
% S = [0.7143, -1.1429, -1.4286]
此输出与以前相同,尽管显然不是以确切的分数形式,因为它是从a
,b
和c
继承的。
编辑:如Dev-il的评论所提示,有关求解MATLAB中矩阵方程的一些事情...
- Backslash
运算符我上面使用的是Matlab的
mldivide
功能的速记 - 正如上面链接的文档中指出的,它们是可以互换的:
x = mldivide(A,B)
是执行x = AB
- 文档中也是
如何工作的注释:
如果A是方形矩阵,则
AB
大致等于inv(A)*B
,但MATLAB处理AB
的方式不同。 - 特别是,MATLAB自动选择用于解决系统的最有效算法。示例决策流可以在文档中看到,我不会在这里复制,因为它超出了问题的范围。
mldivide在求解线性系统中的多功能性源于其通过派遣到适当的求解器来利用问题对称性的能力。
摘要:
虽然是数学上的"按coeffs
矩阵倒数"的倒数。使用Backslash操作员(又称mldivide
)为系统提供解决方案。
此扩展与您的原始问题有何关系?希望您能更好地了解到哪种方法可用于此问题。特别是知道(除非在特定情况下需要)您可以轻松执行此任务(更少的行,更快)而不依赖Matlab的符号数学工具箱。