lagrange插值代码Lagrange插值代码.docx
- 文档编号:3326673
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:9
- 大小:15.96KB
lagrange插值代码Lagrange插值代码.docx
《lagrange插值代码Lagrange插值代码.docx》由会员分享,可在线阅读,更多相关《lagrange插值代码Lagrange插值代码.docx(9页珍藏版)》请在冰豆网上搜索。
lagrange插值代码Lagrange插值代码
lagrange插值代码(Lagrange插值代码)
插值方法/2.
////////程序2.1-lagrange插值
instdlib.h#<>
instdio.h#<>
inconio.h#<>
instring.h#<>
ingraphics.h#<>
inmath.h#<>
typedefstruct{
floatx,
float.
};
floatlagrange(table[],intn,floatx)
initgraph(void)
{
ingdriver=detect,gmode.
initgraph(&gdriver&gmode,"");
}
for(intx1,y1,x2(int,inty2,intcolor)
{
setcolor(color).
a(x1,y1,x2,y2).
}
for(intx,intyouttextxy)[],char,intcolor)
{
setcolor(color).
outtextxy(x,y)));
}
for(intx,intyouttextxyrealnumber,float,intlength,intcolor)
{
charstring[20];
setcolor(color).
gcvt(realnumber,length,string).
outtextxy(x,y,g).
}
voidshowtable(table[],intn)
{
inti;
charstring_x'sstring_[20],[20];
line(0,20639,20,7).
line(30,0,30,40).
outtextxy(10.8),"x"(14).
outtextxy(10.28)","(14).
for(i=0;i { outtextxy(36+i*80.8,[i]graph.x,6.14). outtextxy(36+i*80,28,[i]),6.14). } } floatgetmaximum(table_x[],intn) { inti; intmax_x; max_(x=0.0. for(i=0;i if(max_fabs(x) -(max_(x). } wheretheregetmaximum_(table[],intn) { inti; intmax_. max_y=0. for(i=0;i if(max_ -(max_). } voiddrawcoordinate(intx1,y1andy2,intx2). floatfloatfloat,x1,x2,y1,y2)float { charstring[20]; a(x1,y1+y2)/2,x2,y1+y2)(2.7). line(x2,y1+y2)/2x10(y1+y2)/2); line(x2,y1+y2)/2x10(y1+y2)/2+2). line(x1+x2)/2(x1+x2,y1,y2)/2); line(x1+x2)/2(x1+x2,andy1,y1)/2-2,+10). line(x1+x2)/2(x1+x2,y1,y1)/2+2,+10). line(x1+x2)/2+(x2-x1)/4(y1+y2),2(4). (x1+x2)/2+(x2-x1)/4(y1+y2)/2); gcvt(x1+x2)/2+(x2-x1)/4.6,string). outtextxy(x1+x2)/2+(x2-x1)/4-3(y1+y2),2+4string). line(x1+x2)/2-(x2-x1)/4(y1+y2),2(4). (x1+x2)/2-(x2-x1)/4(y1+y2)/2); gcvt(((x1+x2)/2+(x2-x1)/4),(6),string). outtextxy(x1+x2)/2-(x2-x1)/4-3(y1+y2),2+4string). line(x1+x2)/2+4(y1+y2)and(y2)-y1)/4. (x1+x2)/2,(y1+y2)/2(y2-y1)/4); gcvt(((y1+y2)/2+(y2-y1)/4),(6),string). outtextxy(x1+x2)/2+8(y1+y2)and(y2)-y1)/4,string). line(x1+x2)/2+4(y1+y2),and2+(y2-y1)/4. (x1+x2)/2,(y1+y2)/2+(y2-y1)/4); gcvt(y1+y2)/2+(y2-y1)/4),(6),string). outtextxy(x1+x2)/2+8(y1+y2)/2+(y2-y1)/4,string). } int(intx1,x2xtoxint,floatfloatfloatx,x1,x2,. { return(int)(x1+(x2-x1)*(x-x1)/(x2-x1))); } ytoy(intintintfloaty1,y2,y1,y2,float,floaty) { return(int)(y1+(y2-y1)*(y-y1)/(y2-y1))); } voiddrawfunctioncurve(intintintx1,y1,x2,y2,int, floatfloatfloatx1,y1,x2,y2,float. pointtable[],intn) { inti; floatreal_x_step; if(x2= ");return;} real_x_step=(x2-x1)/(x2-x1); for(i=0;i line(xtox(x1,x2,x1,x2,x1+*real_x_step). ytoy(y1,y2,y1,y2,lagrange(table,n,x1+*real_x_step)), xtox(x1,x2,x1,x2,x1+(i+1)*real_x_step). ytoy(y1,y2,y1,y2,lagrange(table,n,x1+(i+1)*real_x_step)), 3); } voidputbigdot(intx,inty,intcolor) { setcolor(color); circle(x,y,2); } voiddrawpointsintable(intintintx1,y1,x2,y2,int, floatfloatfloatx1,y1,x2,y2,float. pointtable[],intn) { inti; for(i=0;i putbigdot(xtox(x1,x2,x1,x2,table[in].x),ytoy(y1,y2,y1,y2,table[in].y),14); } voiddrawpoint_xy(intintintx1,y1,x2,y2,int, floatfloatfloatx1,y1,x2,y2,float. floatx,floaty) { chardigits[60]; intx,y;tmp; xtoxx=(x1,x2,x1,x2,x); ytoyy=(y1,y2,y1,y2,y); putbigdot(x,y,13); digits[0]="("; gcvt(x,8,&digits[1]); tmp=strlen(digits); digitstmp[]=","; digits[tmp+1]=0; gcvt(y,8,&digits[strlen(digits)]); tmp=strlen(digits); digitstmp[]=")'; digits[tmp+1]=0; outtextxy(x+3,y3,digits,13); } voiddrawcurve_and_showresult(pointtable[],intn,floatx,floaty) { floatmax_x,max_y; floatx1,y1,x2,y2. intx1,y1,x2,y2. table[n].x=x; table[n].y=y; max_x=getmaximum_x(table,n+1); max_y=getmaximum_y(table,n+1); x1=max_x*2; y1=max_y*2; x2=max_x*2; y2=max_y*2; x1=10; y1=60; x2=630; y2=450; drawcoordinate(x1,y1,x2,y2,x1,y1,x2,y2); drawfunctioncurve(x1,y1,x2,y2,x1,y1,x2,y2,table,n); drawpointsintable(x1,y1,x2,y2,x1,y1,x2,y2,table,n); drawpoint_xy(x1,y1,x2,y2,x1,y1,x2,y2,x,y); } intcheck_x_ice_and_as_forms(pointtable[],inti) { intk; for(k=0;k if(fabs(table[c].x-table[in].x)<0.000001)return1; return0; } voidinputtable(pointtable[],int*n) { inti; printf("\nnumberofpointsn='); scanf("%d",n); for(i=0;i<*n;++i) { printf("input%dthpoint(x%d,y%d)",in,in,in); scanf("%f,%f",&table[in].x,&table[in].y); if(check_x_ice_and_as_forms(table,in)) { printf("\nthisxisthesameastheforms,reinput! \n",in); --in; } } } 浮动拉格朗日(点表[],int,浮点x) { 浮点数结果; int,j; 结果=0; 对于(i=0;i<;+i) { TMP=1; 对于(j=0;j;n;+j) { 如果(j=i)继续; TMP*=((x-table[J]。 x)/(表[我]。 x-table[J]。 x)); } 结果(=*); } 返回(结果); } 无效main() { intn; 浮点数; 点表[1000]; inputtable(表,和N); printf(“ninputx=“); scanf(“%”,和X); y=拉格朗日(表,n,x); printf(“NL(%f)=%F”,x,y); printf(“\n\n单击任意键显示表,得出L(x)和点(x,y)\n”); getch(); initgraph(); showtable(表,n); drawcurve_and_showresult(表,N,X,Y); outtextxy(1468,“按任意键退出! ”); getch(); closegraph(); } /* 运行实例: (注意: 当前目录下必须有EGAVGA.BGI文件) 点数n=3 输入零点(x0,y0): 100 输入第一点(x1,y1): 121,11 输入第二点(x2,y2): 144,12 输入x=115 l(115000000)=10.722755 按任意键显示表格,绘制L(x)和点(x,y) */ 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1