【求解思路】设多项式方程为
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()求实数函数
刚刚用Mathematica弄了一下,
但是,求其原函数是不明智的:
PolyLog函数_百度百科 http://baike.baidu.com/link?url=lw1Xic6ZZz2tTOpWeHQFaXSG3wYtmeHI_-tWQNq-9u1NOOQ8gzSveg7sw-z9x0DDN0suuj4nZcuBGUIRRp25w38bJMXqXzaNVbp0z4pvxj887qFpJZnr3DqHYIp7SFJJ