欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

用Matlab解决多元方程,以三元方程为例,使用solve函数

最编程 2024-08-10 22:35:49
...

Solve Multivariate Equations and Assign Outputs to Variables
解多重方程组并且赋值给输出变量

解如下系统方程:
{ 2 u 2 + v 2 = 0 u − v = 1 \left\{\begin{aligned} &2u^2 + v^2 = 0 \\ &u - v = 1 \end{aligned}\right. {2u2+v2=0uv=1

超过一个变量时,制定变量的顺序定义了求解器 solver 返回结果的顺序。

syms u v
eqns = [2*u^2 + v^2 == 0, u - v == 1];
vars = [v u];
[solv, solu] = solve(eqns,vars)

结果为:

solv =
 
 - (2^(1/2)*1i)/3 - 2/3
   (2^(1/2)*1i)/3 - 2/3
 
 
solu =
 
 1/3 - (2^(1/2)*1i)/3
 (2^(1/2)*1i)/3 + 1/3

Ref: solve-MathWorks

再求解一下我自己当时遇到的问题

求解以下三元三次微分方程组:
{ ( a t f + b ) 2 = 2 ( a t f + 2 b ) t f − 2 = 0 a t f 3 + 3 b t f 2 − 6 t f − 60 = 0 \left\{\begin{aligned} &(a t_f + b)^2 = 2 \\ &(a t_f + 2 b) t_f - 2 = 0 \\ &a t_f^3 + 3 b t_f^2 - 6 t_f - 60 = 0 \\ \end{aligned}\right. (atf+b)2=2(atf+2b)tf2=0atf3+3btf26tf60=0

syms a b tf
eqns = [(a*tf+b)^2==2, (a*tf+2*b)*tf-2==0, a*tf^3+3*b*tf^2-6*tf-60==0];
vars = [a b tf];
[a b tf] = solve(eqns, vars)

结果为:

a =
 
 root(z^4 - 2*z^2 - 120*z - 1800, z, 1)^2/900 - root(z^4 - 2*z^2 - 120*z - 1800, z, 1)/15 - 1/450
 root(z^4 - 2*z^2 - 120*z - 1800, z, 2)^2/900 - root(z^4 - 2*z^2 - 120*z - 1800, z, 2)/15 - 1/450
 root(z^4 - 2*z^2 - 120*z - 1800, z, 3)^2/900 - root(z^4 - 2*z^2 - 120*z - 1800, z, 3)/15 - 1/450
 root(z^4 - 2*z^2 - 120*z - 1800, z, 4)^2/900 - root(z^4 - 2*z^2 - 120*z - 1800, z, 4)/15 - 1/450
 
 
b =
 
 root(z^4 - 2*z^2 - 120*z - 1800, z, 1)^2/30 - 1/15
 root(z^4 - 2*z^2 - 120*z - 1800, z, 2)^2/30 - 1/15
 root(z^4 - 2*z^2 - 120*z - 1800, z, 3)^2/30 - 1/15
 root(z^4 - 2*z^2 - 120*z - 1800, z, 4)^2/30 - 1/15
 
 
tf =
 
 root(z^4 - 2*z^2 - 120*z - 1800, z, 1)
 root(z^4 - 2*z^2 - 120*z - 1800, z, 2)
 root(z^4 - 2*z^2 - 120*z - 1800, z, 3)
 root(z^4 - 2*z^2 - 120*z - 1800, z, 4)

结果出现了上述情况,可直接使用 double() 解决,参考这篇文章matlab解方程出现root,如何获得数值解:,因此有以下解决办法

>> double(a)

ans =

   0.4254 + 0.0000i
  -0.0011 + 0.4418i
  -0.0011 - 0.4418i
  -0.4276 + 0.0000i

>> double(b)

ans =

   1.0720 + 0.0000i
  -1.4475 + 0.3052i
  -1.4475 - 0.3052i
   1.6897 + 0.0000i

>> double(tf)

ans =

  -5.8447 + 0.0000i
  -0.7071 - 6.4751i
  -0.7071 + 6.4751i
   7.2589 + 0.0000i

考虑到 t f t_f tf 变量代表时间的末端时刻值,因此不能有负值和虚部,因此
t f = 7.2589 b = 1.6897 a = − 0.4276 \begin{aligned} t_f &= 7.2589 \\ b &= 1.6897 \\ a &= -0.4276 \\ \end{aligned} tfba=7.2589=1.6897=0.4276


求解含有未知变量的方程组

如系统含有三个未知量 u , v , x u, v, x u,v,x,方程组的形式为
{ u + v + x = 0 u − v = 1 \left\{\begin{aligned} &u + v + x = 0 \\ &u - v = 1 \end{aligned}\right. {u+v+x=0uv=1

求解 u u u v v v 的表达式

程序如下

syms u v x real
eqns = [u + v + x == 0, u - v == 1];
vars = [v u];
[solv, solu] = solve(eqns,vars)

结果为:

solv =
 
- x/2 - 1/2
 
 
solu =
 
1/2 - x/2

v = − x 2 − 1 2 u = 1 2 − x 2 \begin{aligned} v &= -\frac{x}{2} - \frac{1}{2} \\ u &= \frac{1}{2} - \frac{x}{2} \\ \end{aligned} vu=2x21=212x