计算方法实验报告习题1(浙大版)_第1页
计算方法实验报告习题1(浙大版)_第2页
计算方法实验报告习题1(浙大版)_第3页
计算方法实验报告习题1(浙大版)_第4页
计算方法实验报告习题1(浙大版)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专业:电气工程及其自动化姓名: 李X 计算方法实验报告实验名称: 实验1 从函数表出发进行插值 1 引言某个实际问题中,函数f(x)在区间a,b上存在且连续,但难以找到其表达式,只能通过实验和观测得到有限点上的函数表。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以希望构造简单函数P(x)作为f(x)的近似值。插值法是解决此类问题的一种方法。设函数y=在插值区间a,b上连续,且在n+1个不同的插值节点ax0,x1,xnb上分别取值y0,y1,yn。目的是要在一个性质优良、便于计算的插值函数类中,求一简单函数P(x),满足插值条件P(xi)=yi(i=0,1,n),而在其他点xxi上,作为f(x)近似值。求插值函数P(x)的方法称为插值法1。2 实验目的和要求运用Matlab编写m文件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f(0.15),f(0.31),f(0.47)的近似值。3 算法原理与流程图(1)原理1. 线性插值当给定了n+1个点x0x1xn上的函数值y0,y1,yn后,若要计算xxi处函数值f(x)的近似值,可先选取两个节点xi-1与xi使xxi-1,xi,然后在小区间xi-1,xi上作线性插值,即得这种分段低次插值叫分段线性插值。2. 分段二次插值当给定了n+1个点x0x1xn上的函数值y0,y1,yn后,若要计算xxi处函数值f(x)的近似值,可先选取距离x最近的三个节点xi-1,xi与xi+1,然后进行二次插值,即得这种分段低次插值叫分段二次插值。3. 全区间上拉格朗日插对节点xi(i=0,1,n)中任一点xk(0kn),作一n次多项式lk(x),使它在该点上的取值为1,在其余点xi(i=0,1,k-1,k+1,n)上取值为零。对应于每一节点xk(k=0,1,n),都能写出一个满足此条件的多项式,这样写出n+1个多项式l0(x),l1(x),ln(x)。拉格朗日n次插值多项式(对于全区间上的插值,n取函数表的长度)(2) 流程图4 程序代码及注释1. 分段线性插值法%分段线性插值function y=fdxx(x0,y0,x) %定义函数p=length(y0);n=length(x0);m=length(x); %计算函数表和x的长度if p=n error(数据输入有误,请重新输入);%若函数表的x与y长度不一致则输入有误else fprintf(分段线性插值nn); for t=1:m %利用循环计算每个x的插值结果 z=x(t); if zx0(n) fprintf(x(%d)超出范围;n,t); break; %若x不在函数表范围内,则插值结果将不准确 end for i=1:n-1 if zx0(i+1) break; %选取合适的两点使x(i)xx(i+1) end end %注:若x不在函数表范围内,则i=n-1 y(t)=y0(i)*(z-x0(i+1)/(x0(i)-x0(i+1)+y0(i+1)*(z-x0(i)/(x0(i+1)-x0(i); %按照分段线性插值公式求解y fprintf(y(%d)=%fnx1=%.3f y1=%.3f,x2=%.3f y2=%.3fnn,t,y(t),x0(i),y0(i),x0(i+1),y0(i+1); %输出插值结果和所需的节点 endend注:若要在Matlab中直接调用插值函数,需要事先将习题1函数表输入2. 分段二次插值法%分段二次插值function y=fd2(x0,y0,x) %定义函数分段二次插值p=length(y0);n=length(x0);m=length(x); %计算函数表和x的长度if p=n error(数据输入有误,请重新输入);%若函数表的x与y长度不一致则输入有误else fprintf(分段二次差值nn); for t=1:m %运用循环求解所有点的插值 z=x(t); if zx0(n) fprinf(x(%d)超出范围;n,t); break; %如果x不在函数表范围内无法插值 end i=n-1; %若下列循环i不变,则i=n-1, for j=1:n-2 if z x0=0.0 0.1 0.195 0.3 0.401 0.5; y0=0.39894 0.39695 0.39142 0.38138 0.36812 0.35206; x=0.15 0.31 0.47;%首先在Matlab中输入函数表和待插值变量x%确保Current Directory 中存放分别含有上述代码的三个m文件(1) 分段线性插值 y1=fdxx(x0,y0,x) %调用分段线性插值函数得到下列结果分段线性插值y(1)=0.x1=0.100 y1=0.397,x2=0.195 y2=0.391y(2)=0.x1=0.300 y1=0.381,x2=0.401 y2=0.368y(3)=0.x1=0.401 y1=0.368,x2=0.500 y2=0.352y1 = 0.39404 0.38107 0.35693(2) 分段二次插值 y=fd2(x0,y0,x) %调用分段二次插值函数得到下列结果分段二次差值y(1)=0.x1=0.195 y1=0.391x2=0.300 y2=0.381x3=0.401 y3=0.368y(2)=0.x1=0.195 y1=0.391x2=0.300 y2=0.381x3=0.401 y3=0.368y(3)=0.x1=0.300 y1=0.381x2=0.401 y2=0.368x3=0.500 y3=0.352y = 0.39455 0.38122 0.35725(3) 全区间上拉格朗日插值 y=lagrange(x0,y0,x) %调用拉格朗日性插值函数得到下列结果拉格朗日插值y(1)=0.y(2)=0.y(3)=0.y = 0.39447 0.38122 0.35722(4) 测试示例 x=0.15 0.31 0.51; y=fdxx(x0,y0,x)分段线性插值y(1)=0.x1=0.100 y1=0.397,x2=0.195 y2=0.391y(2)=0.x1=0.300 y1=0.381,x2=0.401 y2=0.368x(3)超出范围; y1= 0.39894 0.39695 0.39142 0.38138 0.36812 ; y=fdxx(x0,y1,x)? Error using = fdxx数据输入有误,请重新输入6 讨论与结论1. 对程序运行的时间加以比较使用tic,toc函数计算下列四种方法计算上述问题所运行的时间函数interp1(x0,y0,x)fdxx(x0,y0,x)fd2(x0,y0,x)lagrange(x0,y0,x)运行时间(s)0.296990.0.0.0.255580.0.0.0.242970.0.0.从三次实验结果可知,interp1函数所用时间比编写的fdxx函数长(interp1函数为matlab求分段线性插值的函数);而fdxx和另外两个函数时间比较接近2. 程序优化由分段线性插值和分段二次插值的原理,x取值在函数表范围内时,插值结果有意义,而当x取值在函数表范围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;若输入的函数表x与y的长度不相等,则无法插值。所以加入判断p=length(y0);n=length(x0);if p=n error(数据输入有误,请重新输入);if zx0(n) fprintf(x(%d)超出范围;n,t); break;end从而避免了因输入错误导致的结果错误。由上述(4)测试示例可看到效果。3.结果比较(下方的图为放大图)图中data1为原函数表的数据,data2-d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论