多篇数值分析实践报告_matlab

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验报告

拉格朗日插值法

拉格朗日插值法基本原理:

通过平面上不同两点可以确定一条直线,这就是拉格朗日线性插值问题,对于不在同一条直线的三个点得到的插值多项式则为抛物线。

拉格朗日插值的基多项式(即基函数)为:

n

i x x ••

x •x x l i

j j j

i i i ,,2,1,0,)(0 =--=∏

≠=

有了基函数以后就可以直接构造如下多项式:

∑==n

i i i n x l x f p 0

)

()(

该多项式就是拉格朗日插值法所求得的插值多项式。

拉格朗日插值法算法:

1、根据所给点),(i i y x 的坐标依次写出其差值基函数(用for 循环可以轻易解决)

n

i x x ••

x •x x l i

j j j

i i i ,,2,1,0,)(0 =--=∏

≠=

2、将差值基函数与其对应的点的函数值相乘得:

n i x l x f i i ,,2,1,0),()( =

3、将2中各项累加即得差值多项式:

∑==n

i i i n x l x f p 0

)

()(

拉格朗日插值法程序:

function lagrange(A)%A 为一个只有两行的矩阵,第一行为插值点,第二行为插值点对应的函数值 [m,n]=size(A); f=1;

p=0;%两个用到的变量 syms x

for i=1:n

f=(x-A(1,i))*f;

end

for j=1:n

g(j)=f/(x-A(1,j));%求插值基函数的分母

h(j)=subs(g(j),x,A(1,j));%求插值基函数的分子

s(j)=g(j)/h(j)*A(2,j);%插值基函数

end

for k=1:n

s(j)=collect(s(j));%合并同类项

end

for i=1:n

p=p+s(i);

end

fprintf('拉格朗日插值法可得多项式:')

collect(p) % 可用lagrange([1 3 6 8;4 6 9 12])调试

例:有如下表格中有四个插值点及其对应的函数值,用lagrange插值法写出其三次插值多项式:

x 1 3 6 8

i

y 4 6 9 12

i

解:

在matlab命令窗口输入:

lagrange([1 3 6 8;4 6 9 12])

可得运行结果:

拉格朗日插值法可得多项式:

ans =

x^3/70 - x^2/7 + (97*x)/70 + 96/35

牛顿插值法

牛顿插值法基本原理:

拉格朗日插值多项式的理论在许多方面都有应用,是很不错的一种方法,但就插值问题而言,如果增加一个插值点,原先计算插值的多项式就没有用了,即拉格朗日插值法的继承性很差,牛顿插值法就很好地解决了这个问题,具有很好的继承性。

函数)(x f 的差商定义为:

)(][k k x f x f =

k

k k k k k x x x f x f x x f --=

---111][][],[

k

k k k k k k k k x x x x f x x f x x x f --=

------212112]

,[],[],,[

j

k k k j k k j k k j k j k x x x x f x x f x x x f ---+-+----=

]

,,[],,[],,,[111

在差商的基础上可得牛顿插值多项式:

)

())(](,,,[))(](,,[)](,[][)(11010102100100----++--+-+=n n n x x x x x x x x x f x x x x x x x f x x x x f x f x N

牛顿插值法算法:

1、根据差商的定义求出各阶差商。

2、依次写出:1,,1,0),())((110-=---=-n n x x x x x x n n ω。

3、n ω分别与相应的差商相乘,然后累加即可得:

)

())(](,,,[))(](,,[)](,[][)(11010102100100----++--+-+=n n n x x x x x x x x x f x x x x x x x f x x x x f x f x N

牛顿插值法程序:

function newton(A)%A 为两行矩阵,第一行为插值点,第二行为对应插值点的函数值 [m,n]=size(A);

B=zeros(n-1);

k=1;

for i=1:n-1

for j=i+1:n

Z(j)=(A(2,j)-A(2,j-1))/(A(1,j)-A(1,j-k));%求i阶差商

B(i,j)=Z(j);%记住各阶差商

end

for j=i+1:n

A(2,j)=Z(j);

end

k=k+1;

end

f=A(2,1);

g=1;

syms x

for i=1:n-1

g=g*(x-A(1,i));

f=f+B(i,i+1)*g;%求牛顿插值多项式

end

fprintf('牛顿插值法可得多项式:')

f

fprintf('牛顿插值法得到的多项式合并同类项后为:')

collect(f)% newton([1 3 6 8;4 6 9 12])

例:有如下表格中有四个插值点及其对应的函数值,用牛顿插值法写出其三次插值多项式:

x 1 3 6 8

i

y 4 6 9 12

i

解:

在matlab命令窗口输入:

newton([1 3 6 8;4 6 9 12])

相关文档
最新文档