拉格朗日插值方法C语言编程

更新时间:2023-05-12 09:33:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数值逼近课程的内容,用C语言实现的拉格朗日插值方法,可以随时增加一个点,也可以随时算出某个点的值,还可以算出插值多项式,功能很全

#include<stdio.h>

#include <stdlib.h>

#define M 20;

int n=0;

int p=1;

int num=0;

double *x;

double *y;

double Calculate(double tt) ;

void Insert(int m);

void Print( );

void NewTon(int m)

{

double tt;

Insert(m);

Print( );

printf("是否继续进行插值、计算还是结束?继续插值请输入1,结束请输入0,求值计算请输入2;p=");

scanf("%d",&p);

printf("\n");

while(p!=0)

{

if(p==1)

{

printf("请输入再次插值点个数num=");

scanf("%d",&num);

NewTon(num);

}

else if(p==2)

{

printf("请输入x=");

scanf("%lf",&tt);

tt=Calculate(tt);

printf("Q(x)=%lf",tt);

printf("\n");

printf("是否继续进行插值、计算还是结束?继续插值请输入1,结束请输入0,求值计算请输入2;p=");

scanf("%d",&p);

printf("\n");

}

else break;

}

}

void Print( )

{

int k,j;

printf("插值多项式为:Q(x)=%lf",y[0]);

for(j=1;j<n;j++)

{

if(y[j]>=0) printf("+");

printf("%lf",y[j]);

for(k=0;k<j;k++)printf("*(x-%lf)",x[k]);

}

printf("\n");

}

void Insert(int m)

{

int j,k,t,N;N=n;

n+=m;

double *x1;

数值逼近课程的内容,用C语言实现的拉格朗日插值方法,可以随时增加一个点,也可以随时算出某个点的值,还可以算出插值多项式,功能很全

double *y1;

x1=(double*)malloc(n*sizeof(double));

y1=(double*)malloc(n*sizeof(double));

for(j=0;j<N;j++)

{

x1[j]=x[j];

y1[j]=y[j];

}

for(j=0;j<m;j++)

{

printf("请输入第%d个插值点x[%d]=",j+1,N+j); scanf("%lf",&x1[N+j]);

printf("请输入第%d个插值点y[%d]=",j+1,N+j); scanf("%lf",&y1[N+j]);

}

x=x1;

y=y1;

printf("\n");

if(N>1)

for(j=0;j<m;j++)

{

double ss=1;

for(k=0;k<N+j;k++)

ss*=x[N+j]-x[k];

for(k=0;k<N+j;k++)

{

double rr=y[k];

for(t=0;t<k;t++)

rr*=x[N+j]-x[t];

y[N+j]-=rr;

}

y[N+j]/=ss;

}

else

for(j=1;j<m;j++)

{

double ss=1;

for(k=0;k<N+j;k++)

ss*=x[N+j]-x[k];

for(k=0;k<N+j;k++)

{

double rr=y[k];

for(t=0;t<k;t++)

rr*=x[N+j]-x[t];

y[N+j]-=rr;

}

y[N+j]/=ss;

}

}

double Calculate(double tt)

{

int i,j;

double yy=0;

double xx;for(i=0;i<n;i++)

{

xx=y[i];

for(j=0;j<i;j++)

{

xx=xx*(tt-x[j]);

}

yy+=xx;

}

数值逼近课程的内容,用C语言实现的拉格朗日插值方法,可以随时增加一个点,也可以随时算出某个点的值,还可以算出插值多项式,功能很全

return yy;

}

void main()

{

printf("请输入插值点个数num="); scanf("%d",&num);

NewTon(num);

printf("结束");

}

本文来源:https://www.bwwdw.com/article/mo8e.html

Top