【Matlab】解多元方程 以三元方程为例 使用 solve 函数

分类: 足球365官网正规吗 发布时间: 2025-09-15 19:15:10 作者: admin 阅读: 4607

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=0u−v=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)tf​−2=0atf3​+3btf2​−6tf​−60=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}

tf​ba​=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=0u−v=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​=−2x​−21​=21​−2x​​