資源描述:
《常用插值算法程序》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、1拉格朗日插值的Matlab實(shí)踐Matlab中沒(méi)有現(xiàn)成的拉格朗日插值函數(shù),必須編寫一M文件實(shí)現(xiàn)拉格朗日插值。設(shè)n個(gè)節(jié)點(diǎn)數(shù)據(jù)以數(shù)組x0,?y0輸入(注意Matlab的數(shù)組下標(biāo)從1開(kāi)始),m?個(gè)插值點(diǎn)以數(shù)組x輸入,輸出數(shù)組y?為m?個(gè)插值。編寫一個(gè)名為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夢(mèng)里不知是客2008-4-2808:28回復(fù)此發(fā)言?2回復(fù):拉格朗日插值的Matlab實(shí)踐#include#include#includetypedef?struct?data{?float?x;?float?y;}Data;//變量x和函數(shù)值y的結(jié)構(gòu)Data?d[20];//最多二十組數(shù)據(jù)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<<"請(qǐng)輸入n值(即n次插值):";//獲得插值次數(shù)?cin>>n;?if(n<=count-1)//?插值次數(shù)不得大于count-1次?break;?else?system("
4、cls");?}//初始化t,y,yt。?float?t=1.0;?float?y=d[0].y;?float?yt=0.0;//計(jì)算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>cou
6、nt;?if(count<=20)?break;//檢查輸入的是否合法?system("cls");?}//獲得各組數(shù)據(jù)?for(int?i=0;i>d[i].x;?cout<<"請(qǐng)輸入第"<>d[i].y;?system("cls");?}?cout<<"請(qǐng)輸入x的值:";//獲得變量x的值?cin>>x;?while(1)?{?int?choice=3;?cout<<"請(qǐng)您選
7、擇使用哪種插值法計(jì)算:"<>choice;//取得用戶的選擇項(xiàng)?if(choice==2)?{?cout<<"你選擇了牛頓插值計(jì)算方法,其結(jié)果為:";?y=Newton(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)?}?if(choice==1)?{?cout<<"你選擇了拉格朗日插值計(jì)算
8、方法,其結(jié)果為:";?y=lagrange(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)?}?if(choice==0)?break;?system("cls");?cout<<"輸入錯(cuò)誤!!!!"<