欢迎来到天天文库
浏览记录
ID:19735851
大小:81.00 KB
页数:20页
时间:2018-10-05
《常用插值算法程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1拉格朗日插值的Matlab实践Matlab中没有现成的拉格朗日插值函数,必须编写一M文件实现拉格朗日插值。设n个节点数据以数组x0, y0输入(注意Matlab的数组下标从1开始),m 个插值点以数组x输入,输出数组y 为m 个插值。编写一个名为lagrange.m的M文件:function y=lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(
2、j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end作者:lq梦里不知是客2008-4-2808:28回复此发言 2回复:拉格朗日插值的Matlab实践#include#include#includetypedef struct data{ float x; float y;}Data;//变量x和函数值y的结构Data d[20];//最多二十组数据float f(int s,int t)//牛顿插
3、值法,用以返回插商{ if(t==s+1) return (d[t].y-d[s].y)/(d[t].x-d[s].x); else return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x); }float Newton(float x,int count){ int n; while(1) { cout<<"请输入n值(即n次插值):";//获得插值次数 cin>>n; if(n<=count-1)// 插值次数不得大于count-1次 break; else system("
4、cls"); }//初始化t,y,yt。 float t=1.0; float y=d[0].y; float yt=0.0;//计算y值 for(int j=1;j<=n;j++) { t=(x-d[j-1].x)*t; yt=f(0,j)*t; //cout<5、 { float p=1.0;//初始化p for(int j=0;j>cou6、nt; if(count<=20) break;//检查输入的是否合法 system("cls"); }//获得各组数据 for(int i=0;i>d[i].x; cout<<"请输入第"<>d[i].y; system("cls"); } cout<<"请输入x的值:";//获得变量x的值 cin>>x; while(1) { int choice=3; cout<<"请您选7、择使用哪种插值法计算:"<>choice;//取得用户的选择项 if(choice==2) { cout<<"你选择了牛顿插值计算方法,其结果为:"; y=Newton(x,count);break;//调用相应的处理函数 } if(choice==1) { cout<<"你选择了拉格朗日插值计算8、方法,其结果为:"; y=lagrange(x,count);break;//调用相应的处理函数 } if(choice==0) break; system("cls"); cout<<"输入错误!!!!"<
5、 { float p=1.0;//初始化p for(int j=0;j>cou
6、nt; if(count<=20) break;//检查输入的是否合法 system("cls"); }//获得各组数据 for(int i=0;i>d[i].x; cout<<"请输入第"<>d[i].y; system("cls"); } cout<<"请输入x的值:";//获得变量x的值 cin>>x; while(1) { int choice=3; cout<<"请您选
7、择使用哪种插值法计算:"<>choice;//取得用户的选择项 if(choice==2) { cout<<"你选择了牛顿插值计算方法,其结果为:"; y=Newton(x,count);break;//调用相应的处理函数 } if(choice==1) { cout<<"你选择了拉格朗日插值计算
8、方法,其结果为:"; y=lagrange(x,count);break;//调用相应的处理函数 } if(choice==0) break; system("cls"); cout<<"输入错误!!!!"<
此文档下载收益归作者所有