




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
插值與多項式逼近的數(shù)組計算方法實驗鄭發(fā)進2012042020022【摘要】計算機軟件中經常要用到庫函數(shù),如sin(x),cos(x),ex,它們是用多項式逼近來計算的。雖然目前最先進的逼近方法是有理函數(shù)(即多項式的商),但多項式逼近理論更適于作為數(shù)值分析的入門課程。在已知數(shù)據(jù)具有高精度的情況下,通常用組合多項式來構造過給定數(shù)據(jù)點的多項式。構造組合多項式的方法有許多種,如線性方程求解、拉格朗日系數(shù)多項式以及構造牛頓多項式的方分和系數(shù)表。關鍵字泰勒級數(shù)、拉格朗日插值法、牛頓插值法、帕德逼近一、實驗目的通過具體實驗,掌握泰勒級數(shù)、拉格朗日插值法、牛頓插值法、帕德逼近的編程技巧。比較各插值方法的優(yōu)劣并掌握。二、實驗原理泰勒級數(shù)在數(shù)學中,泰勒級數(shù)(英語:Taylorseries)用無限項連加式級數(shù)來表示一個函數(shù),這些相加的項由函數(shù)在某一點的導數(shù)求得。如果g在點x=x0具有任意階導數(shù),則幕級數(shù)"(竿-"二六*)+,(司昭—如)+七學^(式—知}2+??+四4^(工—如尸+?“a=g■''稱為f(工)在點x0處的泰勒級數(shù)。在泰勒公式中,取x0=0,得到的級數(shù)°£丁,。小H=0"稱為麥克勞林級數(shù)。函數(shù)的麥克勞林級數(shù)是x的幕級數(shù),那么這種展開是唯一的,且必然與匚上"的麥克勞林級數(shù)一致。拉格朗日插值法如對實踐中的某個物理量進行觀測,在若干個不同的地方得到相應的觀測值,拉格朗日插值法可以找到一個多項式,其恰好在各個觀測的點取到觀測到的值。這樣的多項式稱為拉格朗日(插值)多項式。數(shù)學上來說,拉格朗日插值法可以給出一個恰好穿過二維平面上若干個已知點的多項式函數(shù)。在平面上有(x,y)(x,y)...(x,y)共n個點,現(xiàn)作一條函數(shù)f(x)使其圖1122nn像經過這n個點。作n個多項式Pj(x),i=1,2,3...,n,使得fl應一為_(盂手1)任一對(丈-為),,心-為)i_1[3丑—J―瑚_閏—電)國一趨)屆一普—勤’—rr'''''KLjlJ最后可得f(對二F.Pj(工)J二只】二i牛頓插值法插值法利用函數(shù)f(x)在某區(qū)間中若干點的函數(shù)值,作出適當?shù)奶囟ê瘮?shù),在這些點上取已知值,在區(qū)間的其他點上用這特定函數(shù)的值作為函數(shù)f(x)的近似值。如果這特定函數(shù)是多項式,就稱它為插值多項式。利用插值基函數(shù)很容易得到拉格朗日插值多項式,公式結構緊湊,在理論分析中甚為方便,但當插值節(jié)點增減時全部插值基函數(shù)均要隨之變化,整個公式也將發(fā)生變化,這在實際計算中是很不方便的,為了克服這一缺點,提出了牛頓插值。牛頓插值通過求各階差商,遞推得到的一個公式:P(x)=P(x)+a(x一x)(x一x)(x一x)???(x—x)NN-1N012N-1牛頓插值與拉格朗日插值具有唯一性。帕德逼近它不僅與逼近論中其他許多方法有著密切的關系,而且在實際問題特別是許多物理問題中有著廣泛的應用。設是在原點某鄰域內收斂的、具有復系數(shù)的麥克勞林級數(shù)。欲確定一個有理函數(shù),式中,使得前次方的系數(shù)為0,即使得此處約定qk=0(k>n)。雖然所求得的Pm(z)和Qn(z)不惟一,但是比式卻總是惟一的。有理函數(shù)稱為F(z)的(m,n)級帕德逼近,記為(m/n)。由(m/n)所形成的陣列稱為帕德表。
三、實驗內容P154.1:用plot命令,在同一幅圖中繪制區(qū)間TWxWl上的sin(x),以及P5(x),P7(x)和P(x)。其中9:TOC\o"1-5"\h\zP⑴=x-三+至式(1)53!5!XP178.1:用牛頓插值多項式計算實驗P171.2的內容。P194.1:P178.1:用牛頓插值多項式計算實驗P171.2的內容。P194.1:式(2)式(3)P(x)=x-—+—--式(2)式(3)73!5!7!%3X比較對于函數(shù)f(比較對于函數(shù)f(x)=ex的逼近:P(x)=x-—+—-+—93!5!7!9!P171.2:下表(表一)給出了11月8號美國洛杉磯的一個郊區(qū)在5小時內的測量溫度。(a)對表一中的數(shù)據(jù)構造一個拉格朗日插值多項式。(b)估計這5小時內的平均溫度。(c)在同一坐標系中畫出表中的數(shù)據(jù)和由(a)得到的多項式。討論用(a)中的多項式計算平均溫度可能產生的誤差。時間(下午)華氏度166266365464563663表1《數(shù)值方法》實驗報告泰勒多項式逼近:%2X3X4T(%)=1+x+++式(4)帕德逼近:12+6x+x2氣2(x)=12-6X+X2式(5)在同一坐標系中畫出f(x),T(x),R(x)的曲線。分別求出在區(qū)間[-1,1]上用T4(x)和2R22(x)逼近f(x)的最大誤差。5.P194.3:比較對于函數(shù)f(x)=tan(x)的逼近:
泰勒多項式逼近:E/、X32X517X762X99⑴=x+y+方+^1y+2835式(6)帕德逼近:r_945x-105x3+X5
5,4(x)=945-420X2+15x4式(7)在同一坐標系中畫出f(x),T(x),R(x)的曲線。分別求出在區(qū)間[-1,1]上用T9(x)和5R54(x)逼近f(x)的最大誤差。四、實驗結果及分析1.P154.1:實驗描述:plot繪圖的原理為連續(xù)點繪圖,只需輸入一組等間距的坐標點即可完成;坐標點的計算使用C++完成,計算完成后輸入文件中;繪圖使用matlab的plot函數(shù)完成,具體方法為從文件中讀取出坐標點,之后使用plot函數(shù)繪圖。實驗結果:表2x及sin(x)及5,7,9階泰勒展開公式計算結果xy=sin(x)y=P5(x)y=P7(x)y=P9(x)-100000000-0.84147098-0.84166667-0.84146825-0.84147101-0.90000000-0.78332691-0.78342075-0.78332585-0.78332692-0.80000000-0.71735609-0.71739733-0.71735572-0.71735609-0.70000000-0.64421769-0.64423392-0.64421758-0.64421769-0.60000000-0.56464247-0.56464800-0.56464245-0.56464247-0.50000000-0.47942554-0.47942708-0.47942553-0.47942554-0.40000000-0.38941834-0.38941867-0.38941834-0.38941834-0.30000000-0.29552021-0.29552025-0.29552021-0.29552021-0.20000000-0.19866933-0.19866933-0.19866933-0.19866933-0.10000000-0.09983342-0.09983342-0.09983342-0.099833420.000000000.000000000.000000000.000000000.000000000.100000000.099833420.099833420.099833420.099833420.200000000.198669330.198669330.198669330.198669330.300000000.295520210.295520250.295520210.295520210.400000000.389418340.389418670.389418340.389418340.500000000.479425540.479427080.479425530.479425540.600000000.564642470.564648000.564642450.564642470.700000000.644217690.644233920.644217580.644217690.800000000.717356090.717397330.717355720.717356090.900000000.783326910.783420750.783325850.783326921.000000000.841470980.841666670.841468250.84147101圖1y=sin(x)及其5,7,9階泰勒展開函數(shù)實驗結論:由表二可知,隨著泰勒展開階數(shù)的增加,P(x)越來越接近于原函數(shù),當展開階數(shù)n=9時,在誤差delta=1e-7的精度要求下可以認為P(x)與sin(x)完全擬合;9當y=sin(x)的泰勒展開函數(shù)P(x)的展開階數(shù)為5,7,9時,其函數(shù)圖像與原函數(shù)圖像基本相符;n綜上,當y=sin(x)泰勒展開到達5階時,其五階泰勒展開函數(shù)P5(x)便近似于原函數(shù),可在工日七-1,七+1]范圍內用于替代計算。P171.2:實驗描述:拉格朗日插值多項式的公式為:P(x)=咒yL(x)式(8)k=0以及(x-x)???(x-x)(x-x)???(x-x)L(x)=0k-ik^in式(9)N,k(x—x)???(x—x)(x—x)??,(x—x)k0kk-1kk+1kN進行計算時,因為現(xiàn)有坐標點關于(3.5,y(3.5))點呈中心對稱,故取y(3.5)的值近似替代五小時溫度的平均值;拉格朗日插值多項式及已知點的繪圖使用matlab的plot函數(shù)完成,為完成繪圖需將拉格朗日插值多項式及已知坐標點的坐標輸入到文件中,以便于使用matlab讀取。實驗結果:擬合后的6次拉格朗日插值多項式為:P(x)=-0.55H(x-k)+2.75(x-1)H(x-k)-5.41667H(x-k)H(x-k)TOC\o"1-5"\h\z6k=2k=3k=1k=4+5.33333H(x-k)H(x-k)-2.625H(x-k)(x-6)+0.525H(x-k)式(10)k=1k=5k=1k=1這五小時的平均溫度為:64.5(華氏度)
(3)圖2溫度的拉格朗日插值多項式擬合曲線圖P178.1:實驗描述:拉格朗日插值多項式的公式為:P(x)=a+a(x—x)+.—Fa(x—x)(x—x).…(x—x)..........?..?式((11)N010N01N—1其中a0為給出坐標點的各階差商。進行計算時,因為現(xiàn)有坐標點關于(3.5,y(3.5))點呈中心對稱,故取y(3.5)的值近似替代五小時溫度的平均值;牛頓插值多項式及已知點的繪圖使用matlab的plot函數(shù)完成,為完成繪圖需將牛頓插值多項式及已知坐標點的坐標輸入到文件中,以便于使用matlab讀取。實驗結果:(1)擬合后的6次牛頓插值多項式為:P(x)=66-0.5H(x-k)+0.1667H(x-k)-0.0417H(x-k)+0.0167H(x-k)6k=1k=1k=1k=1式(12)⑵這5小時的平均溫度為:64.5華氏度⑶圖三溫度的牛頓插值多項式擬合曲線圖實驗結論:(1)當日下午1至6時的平均溫度估計為64.5華氏度。(2)由于采樣點的數(shù)據(jù)容量較小,平均溫度可能存在誤差。(3)對比拉格朗日插值與牛頓插值,牛頓插值的計算量更小,且當取5次點的時候,兩者擬合精度都比較高。P194.1:實驗描述:實驗畫圖使用matlab中的plot函數(shù)完成誤差的最大值使用matlab中的max函數(shù)完成實驗結果:(1)圖4f(x)及其泰勒逼近T4(x)及帕德逼近R2,2(x)曲線圖圖5泰勒逼近及帕德逼近誤差曲線圖泰勒逼近f(x)的最大誤差:E4(x)=0.0099帕德逼近f(x)的最大誤差:E;2(x)=0.004實驗結論:在xe[-1,1]區(qū)間內,T4(x)與R2,2(x)與原函數(shù)y=ex大致完全擬合;相較與T4(x),R2,2(x)的誤差在區(qū)間xe[-1,1]內更小,且隨lxI的增大,誤差也逐漸增大。P194.3:實驗描述:實驗畫圖使用matlab中的plot函數(shù)完成誤差的最大值使用matlab中的max函數(shù)完成實驗結果:用T9(x)逼近用T9(x)逼近f(x)的誤差曲線y=E9(x)0.020.010-1-0.8-0.6-0.4-0.2-1-0.8-0.6-0.4-0.200.20.40.60.81££-0.02圖7泰勒逼近及帕德逼近誤差曲線圖泰勒逼近f(x)的最大誤差:E4(x)=-0.0149帕德逼近f(x)的最大誤差:E42(x)=-3.1725e-07實驗結論:在xe[-1,1]區(qū)間內,T4(x)與R22(x)與原函數(shù)y=tan(x)大致完全擬合;相較與T9(x),R54(x)的誤差在區(qū)間xe[-1,1]內更小,且隨|x|的增大,差也逐漸增大;與實驗四相對比可得出,隨著逼近次數(shù)的增加,計算精度也隨之增加附件(代碼):P154.1:#include<stdlib.h>#include<iostream>
#include<fstream>#include<iomanip>#include<cmath>usingnamespacestd;structX_FX〃定義一個用于存放x,sin(x),P5(x),P7(x),P9(x)的數(shù)據(jù)類型{doublex;doubley1;doubley2;doubley3;doubley4;};intmain(){intintmain(){inti;X_FXFx[21];x,f(x),P5(x),P7(x),P9(x)doublex=-1;i=0;doubleFsinx(double);doublePsinx(double,int);ofstreamoutfile;while(x<=1)值,x=-1+0.1k,k=0,1,2...20{Fx[i].x=x;x=x+0.1;i++;}for(i=0;i<=20;i++){Fx[i].y1=sin(Fx[i].x);Fx[i].y2=Psinx(Fx[i].x,5);Fx[i].y3=Psinx(Fx[i].x,7);Fx[i].y4=Psinx(Fx[i].x,9);}outfile.open("154_1.txt”);〃定義一個一維數(shù)組,此數(shù)組用于儲存〃依次產生各x〃依次計算各x對應的sin(x)的值〃依次計算各x對應的P5(x)的值〃依次計算各x對應的P7(x)的值〃依次計算各x對于的P9(x)的值〃輸出計算結果,并將結果保存到文件“154_1.tx中”cout<<std::left<<setw(15)<<"x"<<std::left<<setw(15)<<"sin(x)”<<std::left<<setw(15)<<"P5(x)"<<std::left<<setw(15)<<"P7(x)"<<std::left<<setw(15)<<"P9(x)"<<endl;for(i=0;i<=20;i++){cout<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].x;cout<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y1;cout<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y2;cout<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y3;cout<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y4<<endl;outfile<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].x;outfile<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y1;outfile<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y2;outfile<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y3;outfile<<std::left<<setw(15)<<setiosflags(ios::fixed)<<setprecision(10)<<Fx[i].y4<<endl;}outfile.close();system("pause");return0;}〃此函數(shù)為用于計算y=sin(x)的解泰勒展開y=Pn(x)的函數(shù),n為展開階數(shù)〃輸x^y=Pn(x)的自變量x〃輸入n^y=Pn(x)的展開階數(shù)n〃輸入y^y=Pn(x)的因變量ydoublePsinx(doublex,intn){doubley=0;inti,j=1;intinf(int);
for(i=1;i<=n;i=i+2){y=y+j*pow(x,i)/inf(i);j=-j;}returny;}〃此函數(shù)用于計算x的階乘〃輸入乂為要求階乘x!的數(shù)x〃輸出y為對x做階乘運算的結果intinf(intx){inti,y=1;for(i=1;i<=x;i++)y=y*i;returny;}Matlab繪制曲線函數(shù)Val=load('154_1.txt');X=(Val(:,1))';SinX=(Val(:,2))';P5X=(Val(:,3))';P7X=(Val(:,4))';Matlab繪制曲線函數(shù)Val=load('154_1.txt');X=(Val(:,1))';SinX=(Val(:,2))';P5X=(Val(:,3))';P7X=(Val(:,4))';P9X=(Val(:,5))';figure(1)subplot(2,2,1)plot(X,SinX,'g')legend('y=sin(x)')subplot(2,2,2);plot(X,P5X,'r')legend('y=P5(x)')subplot(2,2,3);plot(X,P7X,'y')legend('y=P7(x)')subplot(2,2,4);plot(X,P9X,'b')legend('y=P9(x)')%從文件中取出計算結果%將乂值保存到矩陣X中%將y=sin(x)保存到矩陣SinX中
%將y=P5(x)保存到矩陣P5X中
%將y=P7(x)保存到矩陣P7X中
%將y=P9(x)保存到矩陣P9X中%繪制y=sin(x)曲線%繪制y=P5(x)曲線%繪制y=P7(x)曲線%繪制y=P9(x)曲線#include<iostream>#include<stdlib.h>#include<cmath>#include<iomanip>#include<fstream>usingnamespacestd;〃構建一個用于保存坐標點的數(shù)據(jù)類型structCoordinate{〃構建一個用于保存坐標點的數(shù)據(jù)類型doublex;doubley;};intmain(){ofstreamoutfile;intN,i;doubleadv;double*lagran_build(Coordinate*,int);voidlagran_output(double*,Coordinate*,int);doublelagran(double*,Coordinate*,int,double);cout<<"請輸入坐標點的個數(shù):";cin>>N;Coordinate*Data;〃構建變量Data,用于保存坐標點double*lagran_coefficient;〃構建變量lagran_coefficient,用于保存拉格朗日插值多項式的系數(shù)Data=newCoordinate[N-1];cout<<"請依次輸入各點坐標:"<<endl;for(i=0;i<N;i++)〃輸入已知坐標點坐標cin>>Data[i].x>>Data[i].y;〃構建拉格朗日插值多項式〃輸出N〃構建拉格朗日插值多項式〃輸出N階的拉格朗日插值〃計算5小時的平均溫度lagran_output(lagran_coefficient,Data,N);多項式函數(shù)adv=lagran(lagran_coefficient,Data,N,3.5);cout<<"這五小時的平均溫度估計為:"<<adv<<"華氏度"<<endl;outfile.open("171_2.txt”);〃將坐標點及拉格朗日for(i=0;i<N;i++)插值多項式系數(shù)輸出到文件"171_2.txt"〃將坐標點及拉格朗日outfile<<std::left<<setw(10)<<setiosflags(ios::fixed)<<setprecision(5)<<Data[i].x;outfile<<std::left<<setw(10)<<setiosflags(ios::fixed)<<setprecision(5)<<Data[i].y;outfile<<std::left<<setw(10)<<setiosflags(ios::fixed)<<setprecision(5)<<lagran_coefficient[i]<<endl;}outfile.close();system("pause");return0;}〃此函數(shù)為用于計算N次拉格朗日插值多項是系數(shù)的函數(shù)〃輸入Data為已知坐標點的指針〃輸AN為要求的拉格朗日插值多項式的次數(shù)〃輸出拉lagran為N次拉格朗日插值多項式的系數(shù)矩陣的地址double*lagran_build(Coordinate*Data,intN){inti,j;double*lagran;lagran=newdouble[N-1];//生成一個一維矩陣,用于保存N次拉格朗日插值多項式的系數(shù)for(i=0;i<N;i++)〃計算N次拉格朗日插值多項式的系數(shù){lagran[i]=1;for(j=0;j<i;j++)lagran[i]=lagran[i]*(Data[i].x-Data[j].x);for(j=i+1;j<N;j++)lagran[i]=lagran[i]*(Data[i].x-Data[j].x);lagran[i]=1/lagran[i];}returnlagran;}〃此函數(shù)用于輸出一個N次拉格朗日插值多項式〃輸入lagran_coefficient為保存N次拉格朗日插值多項式的一維矩陣的地址〃輸入Data為保存已知坐標點的地址〃輸入N為N次拉格朗日插值多項式的次數(shù)voidlagran_output(double*lagran_coefficient,Coordinate*Data,intN){inti,j;cout<<"擬合后的"<<N<<"次拉格朗日插值函數(shù)為:"<<endl;
cout<<"P"<<N<<”(x)=”;for(i=0;i<N;i++){cout<<Data[i].y*lagran_coefficient[i];for(j=0;j<i;j++)cout<<"(x-"<<Data[j].x<<")";for(j=i+1;j<N;j++)cout<<"(x-"<<Data[j].x<<")";if(i<N+1)cout<<"+";}cout<<endl;return;}〃此函數(shù)為計算N次拉格朗日插值多項式在某一點的值的函數(shù)〃輸入lagran_coefficient為保存N次拉格朗日插值多項式系數(shù)的一維矩陣的地址〃輸入Data為用于保存已知坐標點的地址〃輸入N為N此拉格朗日插值多項式的次數(shù)〃輸入乂為要求N次拉格朗日插值的擬合點的x坐標〃輸出y為要求N次拉格朗日插值的擬合點的y坐標doublelagran(double*lagran_coefficient,Coordinate*Data,intN,doublex){doubley=0,yk;inti,j;for(i=0;i<N;i++){yk=Data[i].y*lagran_coefficient[i];for(j=0;j<i;j++)yk=yk*(x-Data[j].x);for(j=i+1;j<N;j++)yk=yk*(x-Data[j].x);y=y+yk;}returny;}Matlab繪圖函數(shù)主函數(shù)%從文件’172_2.txt’中取出已知點的坐標及%將已知坐標點x值保存到矩陣X中%將拉格朗日插值多項式系數(shù)保存到矩陣Val=load('171_2.txt');拉格朗日插值多項式系數(shù)X=(Val(:,1))';Y=(Val(:,2))';Lagran中
Lagran=(Val(:,3))';%將拉格朗日插值多項式系數(shù)保存到矩陣Lagran中corf=Y.*Lagran;x=linspace(1,6);y=lagran(X,corf,x);%計算繪圖點坐標plot(X,Y,'o')%繪制已知點及拉格朗日插值多項式函數(shù)holdall;plot(x,y);legend('采樣點','溫度擬合曲線')被調用的函數(shù)lagran%此函數(shù)用于計算拉格朗日插值多項式的擬合值%乂為已知點的x坐標%coef為拉格朗日插值多項式系數(shù)%乂為被求點x坐標%)為被求點y%從文件’172_2.txt’中取出已知點的坐標及%將已知坐標點x值保存到矩陣X中%將拉格朗日插值多項式系數(shù)保存到矩陣yk=coef(i);forj=1:i-1yk=yk.*(x-X(j));endforj=i+1:nyk=yk.*(x-X(j));endy=y+yk;endendP178.1:#include<iostream>#include<stdlib.h>#include<cmath>#include<iomanip>#include<fstream>usingnamespacestd;structCoordinate{〃構建一個用于保存坐標點的數(shù)據(jù)類型
doublex;doubley;structCoordinate{〃構建一個用于保存坐標點的數(shù)據(jù)類型doublex;doubley;ofstreamoutfile;intN,i;doubleadv;double*newton_build(Coordinate*,int);voidnewton_output(double*,Coordinate*,int);doublenewton(double*,Coordinate*,int,double);coutvv"請輸入坐標點的個數(shù):";cin>>N;Coordinate*Data;〃構建數(shù)組Data,用于保存坐標點double*newton_coefficient;〃構建數(shù)組new_coefficient,用于保存牛頓插值多項式的系數(shù)Data=newCoordinate[N-1];Data=newCoordinate[N-1];coutvv"請依次輸入各點坐標:"vvendl;for(i=0;ivN;i++)〃輸入已知點坐標cin>>Data[i].x>>Data[i].y;〃構建次牛頓插值多newton_coefficient=newton_build(Data,N);項式〃構建次牛頓插值多〃輸出N次牛頓插值〃輸出N次牛頓插值〃計算5〃計算5小數(shù)平均溫度coutvv"這五小時的平均溫度估計為:"vvadvv”華氏度"vvendl;outfile.open("178_1.txt");〃將坐標點及牛頓插值多項式系數(shù)輸出到文件"178_1.txt"for(i=0;ivN;i++){outfilevvstd::leftvvsetw(10)vvsetiosflags(ios::fixed)vvsetprecision(5)vvData[i].x;outfilevvstd::leftvvsetw(10)vvsetiosflags(ios::fixed)vvsetprecision(5)vvData[i].y;outfilevvstd::leftvvsetw(10)vvsetiosflags(ios::fixed)vvsetprecision(5)vvnewton_coefficient[i]vvendl;}outfile.close();system("pause");return0;〃此函數(shù)為用于計算N次牛頓插值多項式系數(shù)的函數(shù)〃輸入Data為已知坐標點的指針〃輸AN為要求的牛頓插值多項式的次數(shù)〃輸出newton_coefficient為N次牛頓插值多項式的系數(shù)矩陣的地址double*newton_build(Coordinate*Data,intN){inti,j;doubledeltax;double*newton_coefficient;newton_coefficient=newdouble[N-1];〃生成一個一維數(shù)組,用于保存N次牛頓插值多項式的系數(shù)for(i=0;i<N;i++)〃計算N次牛頓插值多項式的系數(shù){newton_coefficient[i]=Data[i].y;}for(i=0;i<N;i++){deltax=Data[i+1].x-Data[0].x;for(j=N-1;j>i;j--)newton_coefficient[j]=(newton_coefficient[j]-newton_coefficient[j-1])/deltax;}returnnewton_coefficient;}〃此函數(shù)用于輸出一個N次牛頓插值多項式〃輸入newton_coefficient為保存N次牛頓插值多項式的一維矩陣的地址〃輸入Data*保存已知坐標點的數(shù)組的地址〃輸入N為N次牛頓插值多項式的次數(shù)voidnewton_output(double*newton_coefficient,Coordinate*Data,intN){inti,j;cout<<"擬合后的"<<N<<"次牛頓插值函數(shù)為:"<<endl;cout<<"P"<<N<<”(x)=”;for(i=0;i<N;i++){cout<<newton_coefficient[i];for(j=0;j<i;j++)cout<<"(x-"<<Data[j].x<<")";if(i<N-1)
cout<<"+";}cout<<endl;return;}〃此函數(shù)為計算N次牛頓插值多項式在某一點的值的函數(shù)〃輸入newton_coefficient為保存N次牛頓插值多項式系數(shù)的一維矩陣的地址〃輸入Data為用于保存已知坐標點的數(shù)組的地址〃輸入N為N次牛頓插值多項式的次數(shù)〃輸入乂為要求N次牛頓插值的擬合點的x坐標〃輸出y為要求N次牛頓插值的擬合點的y坐標doublenewton(double*newton_coefficient,Coordinate*Data,intN,doublex){doubley=0,yk;inti,j;for(i=0;i<N;i++){yk=newton_coefficient[i];for(j=0;j<i;j++)yk=yk*(x-Data[j].x);y=y+yk;}returny;}Matlab繪圖函數(shù)Val=load('178_1.txt');頓插值多項式系數(shù)X=(Val(:,1))';Y=(Val(:,2))';Newton=(Val(:,3))';x=linspace(1,6);y=newton(X,Newton,x);plot(X,Y,'o')holdall;plot(x,y);Matlab繪圖函數(shù)Val=load('178_1.txt');頓插值多項式系數(shù)X=(Val(:,1))';Y=(Val(:,2))';Newton=(Val(:,3))';x=linspace(1,6);y=newton(X,Newton,x);plot(X,Y,'o')holdall;plot(x,y);legend('采樣點','溫度擬合曲線')%從文件’178_1.txt’中取出已知點坐標及牛%將已知點坐標的x值保存到矩陣X中%將已知點坐標的y值保存到矩陣Y中%繪制已知點及牛頓插值多項式函數(shù)%計算繪圖點坐標%繪制已知點及牛頓插值多項式函數(shù)%)為被求點y坐標functiony=newton(X,coef,x)n=length(X);y=0;fori=1:nyk=coef(i);forj=1:i-1yk=yk.*(x-X(j));endy=y+yk;endend4.P194.1:x=linspace(-1,1);y1=exp(x);y2=1;fori=1:4y2=y2+(x.Ai)/factorial(i);endy3=(12+6*x+x.A2)./(12-6*x+x.A2);figure(1)subplot(2,2,1)p
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園幼小銜接教學計劃
- 多元化班級評價體系建設計劃
- 輪訓模式下的藝術教師發(fā)展計劃
- 共享服務模式下的會計管理計劃
- 高效會議管理的總結與方法計劃
- 打造水務行業(yè)的智能未來計劃
- 彩鈴呼叫流程
- 《長方體正方體的認識》(教學設計)-2023-2024學年五年級上冊數(shù)學西師大版
- 殘疾人托養(yǎng)服務投標方案(技術方案)
- 《猴子的煩惱》教學設計-2024-2025學年三年級下冊數(shù)學北師大版
- 2025年遼寧省盤錦市大洼區(qū)招聘招商人員30人高頻重點模擬試卷提升(共500題附帶答案詳解)
- 2025年安徽糧食工程職業(yè)學院單招綜合素質考試題庫完整
- 常見意外傷害的處理課件
- 第八章運動和力單元試卷 (含答案) 2024-2025學年人教版物理八年級下
- 2025年中央一號文件高頻重點考試題庫150題(含答案解析)
- 風電項目電網(wǎng)接入系統(tǒng)可行性研究報告編制服務方案投標文件(技術方案)
- 2024人教版新教材初中地理七年級下冊內容解讀課件(深度)
- 2025年遼寧醫(yī)藥職業(yè)學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2023-2028年中國油畫行業(yè)市場發(fā)展現(xiàn)狀及投資規(guī)劃建議報告
- 100以內加減法練習100題(50套)-可直接打印
- 2024年09月2024興業(yè)銀行總行崗測評筆試歷年參考題庫附帶答案詳解
評論
0/150
提交評論