#includestdio.h
站在用戶的角度思考問題,與客戶深入溝通,找到臨西網(wǎng)站設(shè)計(jì)與臨西網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋臨西地區(qū)。
#includestdlib.h
#includeiostream.h
typedef struct data
{
float x;
float y;
}Data;//變量x和函數(shù)值y的結(jié)構(gòu)
Data d[20];//最多二十組數(shù)據(jù)
float f(int s,int t)//牛頓插值法,用以返回插商
{
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次插值):";//獲得插值次數(shù)
cinn;
if(n=count-1)// 插值次數(shù)不得大于count-1次
break;
else
system("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;
//coutf(0,j)endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=0.0;
for(int k=0;kcount;k++)//這兒默認(rèn)為count-1次插值
{
float p=1.0;//初始化p
for(int j=0;jcount;j++)
{//計(jì)算p的值
if(k==j)continue;//判斷是否為同一個數(shù)
p=p*(x-d[j].x)/(d[k].x-d[j].x);
}
y=y+p*d[k].y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout"請輸入x[i],y[i]的組數(shù),不得超過20組:";//要求用戶輸入數(shù)據(jù)組數(shù)
cincount;
if(count=20)
break;//檢查輸入的是否合法
system("cls");
}
//獲得各組數(shù)據(jù)
for(int i=0;icount;i++)
{
cout"請輸入第"i+1"組x的值:";
cind[i].x;
cout"請輸入第"i+1"組y的值:";
cind[i].y;
system("cls");
}
cout"請輸入x的值:";//獲得變量x的值
cinx;
while(1)
{
int choice=3;
cout"請您選擇使用哪種插值法計(jì)算:"endl;
cout" (0):退出"endl;
cout" (1):Lagrange"endl;
cout" (2):Newton"endl;
cout"輸入你的選擇:";
cinchoice;//取得用戶的選擇項(xiàng)
if(choice==2)
{
cout"你選擇了牛頓插值計(jì)算方法,其結(jié)果為:";
y=Newton(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)
}
if(choice==1)
{
cout"你選擇了拉格朗日插值計(jì)算方法,其結(jié)果為:";
y=lagrange(x,count);break;//調(diào)用相應(yīng)的處理函數(shù)
}
if(choice==0)
break;
system("cls");
cout"輸入錯誤!!!!"endl;
}
coutx" , "yendl;//輸出最終結(jié)果
}
#includestdio.h
#includestring.h
#define N 100
typedef struct tag{
double x;
double y;
}POINT;
void main()
{
int i,j,n;
double x,temp,Ln=0;
POINT pt[N];
printf("請輸入你要輸入點(diǎn)的個數(shù),,1=n=%d:\n",N);
printf("n=");
scanf("%d",n);
printf("\n");
printf("\n請輸入對應(yīng)的點(diǎn)數(shù)\n");
for(i=0;in;i++)
scanf("%lf,%lf",pt[i].x,pt[i].y);
printf("\n");
printf("輸入插值點(diǎn)x的值:\n");
scanf("%lf",x);
printf("\n");
for(i=0;in;i++)
{
for(j=0,temp=1;jn;j++)
{
if(j!=i)
temp=temp*(x-pt[j].x)/(pt[i].x-pt[j].x);
}
Ln=Ln+temp*pt[i].y;
}
printf("輸出:\nLn(%lf)=%lf\n",x,Ln);
}
拉格朗日插值多項(xiàng)式 ,用于離散數(shù)據(jù)的擬合 C/C++ code
#include stdio.h
#include conio.h
#include alloc.h
float lagrange(float *x,float *y,float xx,int n) /*拉格朗日插值算法*/
{ int i,j;
float *a,yy=0.0; /*a作為臨時變量,記錄拉格朗日插值多項(xiàng)式*/
a=(float *)malloc(n*sizeof(float));
for(i=0;i=n-1;i++)
{ a[i]=y[i];
for(j=0;j=n-1;j++)
if(j!=i) a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
return yy;
}
main()
{ int i,n;
float x[20],y[20],xx,yy;
printf("Input n:");
scanf("%d",n);
if(n=20) {printf("Error!The value of n must in (0,20)."); getch();return 1;}
if(n=0) {printf("Error! The value of n must in (0,20)."); getch(); return 1;}
for(i=0;i=n-1;i++)
{ printf("x[%d]:",i);
scanf("%f",x[i]);
}
printf("\n");
for(i=0;i=n-1;i++)
{ printf("y[%d]:",i);scanf("%f",y[i]);}
printf("\n");
printf("Input xx:");
scanf("%f",xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}
function =lagrange(x1,y1,xx)
%本程序?yàn)長agrange1插值,其中x1,y1
%為插值節(jié)點(diǎn)和節(jié)點(diǎn)上的函數(shù)值,輸出為插值點(diǎn)xx的函數(shù)值,
%xx可以是向量。
syms x
n=length(x1);
for i=1:n
t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用來存放插值基函數(shù)
end
u=sum(L.*y1);
p=simplify(u) % p是簡化后的Lagrange插值函數(shù)(字符串)
=subs(p,x,xx);
clf
plot(x1,y1,'ro',xx,,'*')
網(wǎng)頁名稱:拉格朗日函數(shù)圖像C語言,拉格朗日函數(shù)構(gòu)造
瀏覽地址:http://aaarwkj.com/article12/dsspsgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站內(nèi)鏈、服務(wù)器托管、靜態(tài)網(wǎng)站、品牌網(wǎng)站制作、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)