数值计算实验牛顿前插和后插插值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值计算实验二
姓名:方小开学号:20060810202 班级:计科0602
一. 实验目的:
1、差分的matlab实现;
2、Newton插值的matlab实现;
二. 实验原理:
MATLAB在线性代数,矩阵分析,数值及优化,数理统计和随机信号分析,电路系统,系统动力学,信号与图像处理,控制理论分析和系统设计,过程控制,建模和仿真,通信系统,等有广泛的应用。
它具有功能强大,界面友好,语言自然即开放性等特点。
三.试验环境
MATLAB7.0
四. 试验过程及现象:
1、牛顿插值公式:
把下面的matlab程序在matlab中建立M-file文件并保存;
function [d,v1]=newtonjz(x,y,v) %d 插商表 v是要插入x v1是插入的y值
n=length(x);
d=zeros(n,n);
d(:,1)=y';
for j=2:n
for i=j:n
d(i,j)=(d(i,j-1)-d(i-1,j-1))/(x(i)-x(i-j+1));
end
end
w=1;
v1=d(1,1);
for i=2:n
w=w*(v-x(i-1));
v1=v1+d(i,i)*w;
end
分别给x,y赋初值,并调用Newton插值函数得到结果如下:
x=[0.40,0.55,0.65,0.80,0.90,1.05];
y=[0.41075,0.57815,0.69675,0.88811,1.02652,1.25382];
[z,xy]=newtonjz(x,y,0.596);
z =
0.4108 0 0 0 0 0
0.5782 1.1160 0 0 0 0
0.6967 1.1860 0.2800 0 0 0
0.8881 1.2757 0.3589 0.1973 0 0
1.0265 1.3841 0.4335 0.2130 0.0312 0
1.2538 1.5153 0.5249 0.2287 0.0314 0.0003
xy =
0.63192
Newton前插公式:
把Newton前插公式的matlab程序写在matlab中建立M-file文件并保存;function [d,v1]=newtonBefore(x,y,t)
n=length(x);
d=zeros(n,n);
d(:,1)=y';
for j=2:n
for i=1:n-j+1
d(i,j)=(d(i+1,j-1)-d(i,j-1));
end
end
w=1;
m=1;
v1=d(1,1);
for i=2:n
w=w*(t-i+2);
m=m*(i-1);
v1=v1+d(1,i)*(w/m);
end
分别给x,y赋初值,并调用Newton前插函数得到结果如下;
x=[1 1.05 1.10 1.15 1.20 1.25 1.30];
y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];
>> [z,qc]=newtonBefore(x,y,0.2);
qc =1.00499226380800
3、Newton后插公式:
把Newton后插公式的matlab程序写在matlab中建立M-file文件并保存;
function [d,v1]=newtonAfter(x,y,t)
n=length(x);
d=zeros(n,n);
d(:,1)=y';
for j=2:n
for i=j:n
d(i,j)=(d(i,j-1)-d(i-1,j-1));
end
end
w=1;
m=1;
v1=d(1,1);
for i=2:n
w=w*(t+i-2);
m=m*(i-1);
v1=v1+d(n,i)*(w/m);
end
分别给x,y赋初值,并调用Newton后插函数得到结果如下;
x=[1 1.05 1.10 1.15 1.20 1.25 1.30];
y=[1 1.0247 1.04881 1.07238 1.09544 1.11803 1.14017];
>> [z,hc]=newtonAfter(x,y,-0.4);
hc=1.13136982835200
五.遇到的问题
在调试的过程中也遇到了一些小小的问题,如输出的结果只显示4位有效数字,结果的精度太低了,不能满足要求,因此在matlab中把数据的格式从short型改成了long型,这样就大大的提高了结果的精确度,减少了误差。