如何用matlab求解多项式方程?

如题所述

【求解思路】设多项式方程为

1、用多项式系数,来创建一个数组,即

2、构造一个矩阵

3、求解特征方程,|A-λE|=0,得到特征根λ(n个),λ即为多项式方程的根。

【例题】:使用matlab软件,解多项式方程4x⁴- 18x³ + 28x² - 18x + 4=0。

【matlab计算代码】

clc,clear all

%步骤1:

p=[4,-18,28,-18,4];  ← 多项式方程系数

p = p(:).';  ← 矩阵转置

%步骤2:

n = size(p,2); ← 求p的个数

inz = find(p); ← 查找各系数p的位置

fullPrototype = full(zeros('like',p));  ← 将稀疏矩阵 p 转换为满存储结构

nnz = length(inz); ←求inz矩阵的长度

p = p(inz(1):inz(nnz)); ←系数排序

r = zeros(n-inz(nnz),1,'like',fullPrototype); ← 除n次系数外,补零

d = p(2:end)./p(1) ;←整除最高阶数的系数

while any(isinf(d)) ←当d数组元素为为无限值,执行下列命令

p = p(2:end);← 把p(2:end)赋值给p 

d = p(2:end)./p(1)←整除最高阶数的系数

end

%步骤3:

n = length(p);←求p的长度

if  n > 1 ←当n > 1 时,执行下列命令

a = zeros(n-1,n-1,'like',fullPrototype); ← 除n-1次系数外,补零

a(1,:) = -d;← 把-d赋值给a(1,:) 

a(2:n:end) = 1;←把1赋值给a(2:n:end) 

r = [r;eig(a)];  ← 求特征值

end

%得到结果

if abs(imag(r))<1e-6  ← 如果虚数部分的绝对值小于1e-6时,执行下列命令

x= real(r)  ← 得到方程的解

end

【matlab运行结果】

【解的验证】

当x=2时,4×(2)⁴-18×(2)³ + 28×(2)² -18×(2)+4=64-144+112-36+4=0

当x=1时,4×(1)⁴-18×(1)³ + 28×(1)² -18×(1)+4=4-18+28-18+4=0

当x=0.5时,4×(0.5)⁴-18×(0.5)³ + 28×(0.5)² -18×(0.5)+4=0.25-2.25+7-9+4=0

验证结果表明,所求的解是原方程的根。

【本题代码所需的命令、函数及语句的含义】

1、size()求数组的的大小

2、find()查找函数

3、full() 将稀疏矩阵 S 转换为满存储结构

4、zeros()创建零矩阵

5、length()求数组的长度

6、while 表达式,语句,end  条件为 true 时重复执行的 while 循环

7、 isinf()确定数组元素为是否为无限值

8、if 条件表达式,语句,end  条件为 true 时执行语句

9、eig()求特征值和特征向量函数

10、abs()求绝对值函数

11、imag()求复数函数

12、real()求实数函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-08-16
  

  刚刚用Mathematica弄了一下,

  但是,求其原函数是不明智的:

PolyLog函数_百度百科  http://baike.baidu.com/link?url=lw1Xic6ZZz2tTOpWeHQFaXSG3wYtmeHI_-tWQNq-9u1NOOQ8gzSveg7sw-z9x0DDN0suuj4nZcuBGUIRRp25w38bJMXqXzaNVbp0z4pvxj887qFpJZnr3DqHYIp7SFJJ


相似回答
大家正在搜