c语言二维插值函数图像 c画函数图像

写出二维问题的二次拉格朗日插值函数表达?

要清楚点Lagrange插值基函数与插值节点关,明白点问题解决,ΣyiLi(x)=L(x),我令y=1,则ΣLi(x)=L(x),由余项定理知余项零,则ΣLi(x)=L(x)=Y=1,更般我证明Σxi^k*Li(x)=x^k

创新互联公司欢迎联系:18982081108,为您提供成都网站建设网页设计及定制高端网站建设服务,创新互联公司网页制作领域十多年,包括会所设计等多个行业拥有多年的网站推广经验,选择创新互联公司,为网站保驾护航!

线性插值

图6-3 线性插值示意图

已知x-y平面上的三点按逆时针顺序,记为i,j,m,其坐标为(xi,yi),(xj,yj)和(xm,ym)。这三点组成三角形单元Δijm,其面积用Δ表示。三角形中的点p(x,y)与i,j,m三点的连线,将Δijm分割成三个小三角形Δpjm,Δpmi,Δpij,其面积分别为Δi,Δj,Δm(图6-3)。

地球物理数据处理基础

其中:Li,Lj,Lm是面积的比值,是无量纲数,称为二维自然坐标,或面积坐标。

设u是三角单元Δijm中的线性函数,可表示为

地球物理数据处理基础

式中:a,b,c是常数,将三顶点的坐标(xi,yi),(xj,yj),(xm,ym)和函数值ui,uj,um分别代入式(6-56)中,解出a,b,c:

地球物理数据处理基础

其中:

地球物理数据处理基础

将a,b,c代入式(6-56),整理后,得

地球物理数据处理基础

其中:

地球物理数据处理基础

写成矩阵形式

地球物理数据处理基础

称为二维线性插值基函数。与(6-55)式对比,基函数就等于面积坐标:

地球物理数据处理基础

c语言 二维函数图形

# include "graphics.h"

# include "math.h"

# define N 100

void init_graphic( )

main()

{

int i;

float x0,y0,x,y;

float x[100],y[100];

init_graphic();

for(i=0;i100;i++)

{

x[i]=-20+(40/100)*i;

y[i]=x[i]*x[i];

}

x0=x[0]+320;

y0=440-y[0];

for(i=1;i100;i++)

{

x1=x[i]+320;

y1=440-y[i];

line(x0,y0,x1,y1);

x0=x1;

y0=y1;

}

}

void init_graphic( )

{

int graphicdriver,graphicmode;

graphicdriver=DETECT;

graphicmode=1;

initgraph(graphicdriver,graphicmode,"E:\\turboc2\\")/*该路径是你TurboC的路径*/

}

急求二维矩阵三次样条插值的程序,要C或C++语言。望有注释!谢谢! 邮箱lsmann9@hotmail.com

/*********************下面程序是C语言程序(标准C)******************/

/* 计算给定M0,Mn值的三次样条插值多项式 */

/*给定离散点(1.1,0.4),(1.2,0.8),(1.4,1.65),(1.5,1.8),M0=Mn=0,*/

/*用M关系式构造三次样条插值多项式S(x),计算S(1.25)。 */

/*************************************************************/

#include stdio.h

#define Max_N 20

main()

{int i,k,n;

double h[Max_N+1],b[Max_N+1],c[Max_N+1],d[Max_N+1],M[Max_N+1];

double u[Max_N+1],v[Max_N+1],yy[Max_N+1],x[Max_N+1],y[Max_N+1];

double xx,p,q,S;

printf("\nPlease input n value:"); /*输入插值点数n*/

do

{ scanf("%d",n);

if(nMax_N)

printf("\nplease re-input n value:");

}

while(nMax_N||n=0);

printf("Input x[i],i=0,...%d:\n",n-1);

for(i=0;in;i++) scanf("%lf",x[i]);

printf("Input y[i],i=0,...%d:\n",n-1);

for(i=0;in;i++) scanf("%lf",y[i]);

printf("\nInput the M0,Mn value:");

scanf("%lf%lf",M[0],M[n]);

printf("\nInput the x value:"); /*输入计算三次样条插值函数的x值*/

scanf("%lf",xx);

if((xxx[n-1])||(xxx[0]))

{printf("Please input a number between %f and %f.\n",x[0],x[n-1]);

return;

}

/*计算M关系式中各参数的值*/

h[0]=x[1]-x[0];

for(i=1;in;i++)

{h[i]=x[i+1]-x[i];

b[i]=h[i]/(h[i]+h[i-1]);

c[i]=1-b[i];

d[i]=6*((y[i+1]-y[i])/h[i]-(y[i]-y[i-1])/h[i-1])/(h[i]+h[i-1]);

}

/*用追赶法计算Mi,i=1,...,n-1*/

d[1]-=c[1]*M[0];

d[n-1]-=b[n-1]*M[n];

b[n-1]=0; c[1]=0; v[0]=0;

for(i=1;in;i++)

{u[i]=2-c[i]*v[i-1];

v[i]=b[i]/u[i];

yy[i]=(d[i]-c[i]*y[i-1])/u[i];

}

for(i=1;in;i++)

{M[n-i]=yy[n-i]-v[n-i]*M[n-i+1];

}

/*计算三次样条插值函数在x处的值*/

k=0;

while(xx=x[k]) k++;

k=k-1;

p=x[k+1]-xx;

q=xx-x[k];

S=(p*p*p*M[k]+q*q*q*M[k+1])/(6*h[k])+(p*y[k]+q*y[k+1])/h[k]-h[k]*(p*M[k]+q*M[k+1])/6;

printf("S(%f)=%f\n",xx,S); /*输出*/

getch();

}

/*----------------------------------- End of file ------------------------------------*/

/*程序输入输出:

Please input n value:4

Input x[i],i=0,...3:

1.1 1.2 1.4 1.5

Input y[i],i=0,...3:

0.4 0.8 1.65 1.8

Input the M0,Mn value: 0 0

Input the x value:1.25

S(1.250000)=1.033171

*/

如何用c语言画函数图像

用GDI绘图吧,比较简单。绘图的思想是让x以固定的值在区间内持续增长,比如x=0.1,0.2,0.3.....,以计算出的y值来确定y坐标。用线连接所有的点就行了。MoveTo(),LineTo()函数你用得着,具体情况请自行查看MSDN。


网页标题:c语言二维插值函数图像 c画函数图像
链接地址:http://cdiso.cn/article/hhdjhg.html

其他资讯