matlab中more_sols,薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算最新章节_薛定宇著_掌阅小说网...

2.4 联立方程组的精确求解

9179a6e1f8b91a3a8a3bb9dfa0428ae9.png

前面介绍过,利用图解方法只能求出给定方程的实数根,并不能求出方程的复数根,具体例子可以参见例2-12。另外,如果联立方程有多个实数根,则只能用图形方法绘制出根所在的位置,并不能直接得出根的具体值,需要逐个根进行局部放大求解,求解过程比较烦琐。此外,前面介绍的数值求解方法由于每次只能求出方程的一个根,使用起来有时也不方便。

MATLAB工具箱提供了代数方程的解析求解函数solve(),可以直接用于求解解析解存在的代数方程。如果方程的解析解不存在,则可以采用vpasolve()函数求取方程的高精度数值解,解的误差可能达到10

-

30

或更高精度,远大于双精度数据结构下的数值解。本书称这类解为准解析解,以区别于方程的解析解与双精度意义下的数值解。

2.4.1 低阶多项式方程的解析求解

一元一次和一元二次方程可以利用solve()函数直接求解,该函数还可以用于含有其他参数的方程求解。不过如果有其他参数的存在,则可能利用现有的solve()函数不易得出三次或四次方程的解析解,尽管这些方程是存在代数解法的,除非给出特别的控制选项,后面将通过例子演示。

solve()函数的调用格式为

6f3f6479bb419af2e85288b632a751fc.png

式中,待求解的方程由符号表达式eqn

i

表示,自变量由

x

i

表示。返回的解是一个结构体型变量,其解由

S

.

x

i

直接提取。在调用格式中eqn

i

可以是单个的方程也可以是向量、矩阵描述的一组方程,还可以将所有的方程描述成一个向量与矩阵符号表达式eqn

1

,直接求解这些方程。

当然,用下面的调用格式还可以直接获得方程的解。

[

x

1

,

x

2

,

,

x

n

]=solve(...),%输入变量表示与前面一致

从函数的调用和使用方面看,这种直接返回变量的调用格式比返回结构体变量的格式更实用,所以本书尽量使用这样的格式。

例2-22

试重新求解例2-2中的鸡兔同笼问题。

声明符号变量,并将方程用符号表达式表示出来,则可以调用solve()函数直接求解给定的方程。注意,方程中的等号应该由双等号表示。

39477b418a89de9ebc6bbae9b6c088e8.png

得出方程的解为

x

1

=23,

x

2

=12。返回变量的名字还可以选择为其他的变量,此外,如果方程右边为零,则可以省略等号。例如,上面的求解语句还可以修改成

>> syms x1 x2; [x0,y0]=solve(x1+x2-35,2*x1+4*x2-94)

例2-23

中国唐代数学家王孝通所著《缉古算经》中有一道应用题,翻译成现代数学符号可以写出下面的三次方程,试求解该方程。

b10508d91f224cd298424360d827f87d.png

利用符号运算方法可以直接求解这个三次方程。

5fded303de5e35053ba0128089b44fe8.png

得出方程的三个解如下。王孝通只得到了31这个解,由于它为整数,是原应用题的解,其他两个是负数,不是应用题的解。

你可能感兴趣的:(matlab中more_sols,薛定宇教授大讲堂(卷Ⅳ):MATLAB最优化计算最新章节_薛定宇著_掌阅小说网...)