MATLAB之多项式插值

MATLAB之多项式插值

一、算法原理

函数解析式未知,但已知一些列点的函数值。如下表所示,对于n+1个点,我们可以找到一个次数不超过n的插值多项式。

f=an*X^n+a(n-1)*X^(n-1)+....+a1*X+a0,称f为x的n次插值多项式。

x0 x1 x2 x3 ...... xn
f(x0) f(x1) f(x2) f(x3) ...... f(xn)

将表中的n+1个点带入,即可得到n+1个插值多项式,

an*X0^n+a(n-1)*X0^(n-1)+....+a1*X0+a0=f(x1);   
an*X1^n+a(n-1)*X1^(n-1)+....+a1*X1+a0=f(x1);   
......

an*Xn^n+a(n-1)*Xn^(n-1)+....+a1*Xn+a0=f(x1);   

在该插值多项式中x,f(x)已知,未知系数为a0 a1 a2...an;

将其写成矩阵形式:

x0^n x0^(n-1)......x0^1 1                      [an             [f(x0)
x1^n x1^(n-1)......x1^1 1                       a(n-1)        f(x1)
......                                                 *     ...          =   ...
x(n-1)^n x(n-1)^(n-1)......x(n-1)^1 1       a1             f(x(n-1))
xn^n xn^(n-1)......xn^1 1                        a0]            f(xn)]

x组成的行列式为范德蒙德行列式 =可写成vander(x0 x1 ... x(n-1)  xn) ,系数an...a1 a0 为列矩阵  ,f(x) 为列矩阵   

二、matlab代码

clc
clear
close
x=[1 2 3 4 5 6];   %一系列插值点
y=[2 5 6 9 14 26]; 
plot(x,y,'o');  %绘制出散点图
hold on 
A=vander(x); %利用范德蒙矩阵生成插值多项式系数矩阵
%[x1^n x1^(n-1)......x1 1     [an
%  x2^n x2^(n-1)......x2 1     a(n-1)  
%   ......                  *  ......    =y
%   ......                     ......
%  xk^n xk^(n-1)......xk 1]    a0]
y=y'; 
B=[A,y]; %生成增广矩阵
C=rref(B);%  化最简型,解方程组
D=C(:,end);
fprintf('\n  这是一个%d阶的多项式,从高阶到低阶排列!\n',length(y)-1);
x=x(1):0.01:x(end); %绘制拟合曲线
y=polyval(D,x)% 写出拟合曲线方程
plot(x,y) %绘图
发布了10 篇原创文章 · 获赞 8 · 访问量 69

猜你喜欢

转载自blog.csdn.net/STM89C56/article/details/105464353