- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告书5-1-曲线拟合与插值
东南大学《数学实验》报告
学号 姓名 邓文强 成绩
实验内容:曲线拟合与插值
一 实验目的
用最小二乘法实现多项式拟合;三种常见插值函数的求解及应用
二 预备知识
(1)熟悉一般的曲线拟合的最小二乘法原则
(2)熟悉正规方程、差分表、插商表的概念
(3)熟悉“\”、polyfit、polyval、interp1、spline、cscvn等Matlab命令
三 实验内容与要求
一.试用不同的拟合函数形式拟合下表给出的一组样本数据,并将计算值与精确值作比较,并计算拟合函数的误差:
k 1 2 3 4 5 6 7 xk 0.3 0.5 0.7 0.9 1.1 1.3 1.5 yk 0.3985 0.6598 0.9147 1.1611 1.3971 1.6212 1.8325
1.设拟合函数形式为;
指令:
x=[0.3 0.5 0.7 0.9 1.1 1.3 1.5];
y=[0.3985 0.6598 0.9147 1.1611 1.3971 1.6212 1.8325];
A=[x,sin(x)];
c=A\y;
c
%检验拟合效果
plot(x,y,g*-,x,1.0001*x+0.3332*sin(x),ro-)
%拟合效果很好
结果:
ans =
1.0001 0.3332
2.设拟合函数为多项式函数(先行确定拟合多项式最佳阶数),写出正规方程,采用解正规方程的‘\法’及polyfit两种方法分别求解拟和多项式。
指令:
x=[0.3 0.5 0.7 0.9 1.1 1.3 1.5];
y=[0.3985 0.6598 0.9147 1.1611 1.3971 1.6212 1.8325];
for i=1:6
z1(i)=y(i+1)-y(i);
end
for i=1:5
z2(i)=z1(i+1)-z1(i);
end
for i=1:4
z3(i)=z2(i+1)-z2(i);
end
for i=1:3
z4(i)=z3(i+1)-z3(i);
end
for i=1:2
z5(i)=z4(i+1)-z4(i);
end
i=1;
z6(1)=z5(2)-z5(1);z1,z2,z3,z4,z5,z6
%求拟合阶数,设为5阶。
%求待定系数的两种方法
A=[x.^5,x.^4,x.^3,x.^2,x,ones(7,1)];
c=A\y;
c
p=polyfit(x,y,5)
plot(x,y,g*-,x,polyval(p,x),ro-)
%与原曲线比较
plot(x,y,g*-,x,polyval(p,x),ro-)%拟合效果非常好 结果:
z1 =
0.2613 0.2549 0.2464 0.2360 0.2241 0.2113
z2 =
-0.0064 -0.0085 -0.0104 -0.0119 -0.0128
z3 =
-0.0021 -0.0019 -0.0015 -0.0009
z4 =
1.0e-003 *
0.2000 0.4000 0.6000
z5 =
1.0e-003 *
0.2000 0.2000
z6 =
-1.0547e-015
u =
0.0052 -0.0130 -0.0318 -0.0193 1.3403 -0.0009
p =
0.0052 -0.0130 -0.0318 -0.0193 1.3403 -0.0009
二.对以下每个函数,在n个节点上(n不要太大,如5~11),用拉格朗日插值、分段线性插值、Newton插值、三次样条插值方法,计算m个插值点的函数值(m选取要适中,如50~100)。通过数值和图形输出,将几种插值结果与精确值进行比较。适当增加n,再作比较,由此做初步分析,找出较好的插值方法:
拉格朗日插值函数: Newton插值函数: function s=Lagrange(x,y,x0)
n=length(x);
m=length(y);
if m~=n
error(x与y必须同长);
end
l=length(x0);
for i=1:l
t=0.0;
for j=1:n
u=1.0;
for k=1:n
if k~=j
u=u*(x0(i)-x(k))/(x(j)-x(k));
en
文档评论(0)