當前位置:商標查詢大全網 - 商標查詢 - 牛頓算法和拉格朗日插值算法的c語言實現

牛頓算法和拉格朗日插值算法的c語言實現

編譯運行確認:

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltiostream.h & gt

typedef結構數據

{

浮動x;

浮動y;

}數據;//變量x和函數值y的結構

數據d[20];//最多20組數據

Float f(int s,int t)//牛頓插值法,用於返回商。

{

如果(t==s+1)

return (d[t]。y-d[s]。y)/(d[t]。x-d[s]。x);

其他

return (f(s+1,t)-f(s,t-1))/(d[t]。x-d[s]。x);

}

浮點牛頓(浮點x,整數)

{

int n;

while(1)

{

cout & lt& lt"請輸入n個值(即n次插值):";//獲取插值次數

CIN & gt;& gtn;

如果(n & lt=count-1)//插值次數不得大於count-1次。

打破;

其他

系統(“cls”);

}

//初始化t,y,yt。

float t = 1.0;

浮點y=d[0]。y;

float yt = 0.0

//計算y值

for(int j = 1;j & lt= n;j++)

{

t=(x-d[j-1]。x)* t;

yt=f(0,j)* t;

//cout & lt;& ltf(0,j)& lt;& ltendl

y = y+yt;

}

返回y;

}

浮點拉格朗日(浮點x,整數計數)

{

float y = 0.0

for(int k = 0;k & lt數數;K++)//這裏的默認值是count-1插值。

{

浮點p = 1.0;//初始化p

for(int j = 0;j & lt數數;j++)

{//計算p的值。

if(k==j)繼續;//判斷是否是同壹個號碼。

p=p*(x-d[j])。x)/(d[k]。x-d[j]。x);

}

y=y+p*d[k]。y;//總和

}

返回y;//返回y的值。

}

void main()

{

浮點x,y;

int計數;

while(1)

{

cout & lt& lt請輸入x [i]和y [i]的個數,不超過20組:“;//要求用戶輸入數據組的數量。

CIN & gt;& gt數數;

if(count & lt;=20)

打破;//檢查輸入是否合法。

系統(“cls”);

}

//獲取每組數據

for(int I = 0;我& lt數數;i++)

{

cout & lt& lt"請輸入第壹個"

CIN & gt;& gtd[i]。x;

cout & lt& lt"請輸入第壹個"

CIN & gt;& gtd[i]。y;

系統(“cls”);

}

cout & lt& lt請輸入x的值:“;//獲取變量x的值

CIN & gt;& gtx;

while(1)

{

int choice = 3;

cout & lt& lt"請選擇要使用的插值方法:"

cout & lt& lt"(0):退出"

cout & lt& lt"(1):拉格朗日" & lt& ltendl

cout & lt& lt“(2):牛頓”& lt& ltendl

cout & lt& lt"輸入您的選擇:";

CIN & gt;& gt選擇;//得到用戶的選擇。

if(選擇==2)

{

cout & lt& lt“妳選擇了牛頓插值計算方法,結果是:“;

y =牛頓(x,計數);打破;//調用相應的處理程序。

}

if(choice==1)

{

cout & lt& lt“妳選擇了拉格朗日插值計算方法,結果是:“;

y =拉格朗日(x,計數);打破;//調用相應的處理程序。

}

if(選擇==0)

打破;

系統(“cls”);

cout & lt& lt“輸入錯誤!!!!"& lt& ltendl

}

cout & lt& ltx & lt& lt“,”& lt& lty & lt& ltendl//輸出最終結果

}