拉格朗日插值程序C语言,拉格朗日插值法 C语言实现

/*

*作者:KDF5000

*功能:利用拉格朗日插值法求解近似值

*时间:2013.4.15

*/

#include

#include

#include

//存放插值节点

struct Data{

double x;

double y;

struct Data *next;

};

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

*LagrangeInsert()

*功能:拉格朗日插值法

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

double LagrangeInsert(struct Data *header,double x)

{

Data *pi,*pj,*p;

pi=pj=header->next;

double temp1,temp2;

temp1=0; //记录内循环的积

temp2=1;//记录外循环的和

while(pi!=NULL)

{

while(pj!=NULL)

{

if(pi!=pj)

temp2 *=(x-pj->x)/(pi->x-pj->x);

pj = pj->next;

}

temp1 +=temp2*pi->y;

temp2=1;

pj = header->next;

pi = pi->next;

}

return temp1; //返回计算结果

}

void main()

{

Data *header = (Data *)malloc(sizeof(Data));

char str[20];

Data *p,*newData;

char strx[20],stry[20];

double x;

p=header;

p->x=0;

p->y=0;

p->next=NULL;

//输出提示信息

printf("*******************************************\n");

printf("使用说明:\n1.用户输入插值点,每一行输入一组:x y;\n2.输入换行表示输入结束。\n");

printf("*******************************************\n");

printf("x y\n");

//接收用户输入知道第一次输入非换行为止

memset(str,0,sizeof(str));

while(strlen(str)==0)

gets(str);

//数据输入完毕,输入换行结束输入

while(strlen(str)!=0)

{

newData = (Data *)malloc(sizeof(Data));

sscanf(str,"%s%s",strx,stry); //获取输入的前两个字符串 第一个为x,第二个为y

newData->x = strtod(strx,NULL); //将输入转换成浮点数

newData->y = strtod(stry,NULL);

newData->next=NULL;

p->next=newData;

p = p->next;

gets(str);

}

printf("请输入要计算的x值:");

scanf("%lf",&x);

printf("L(%f) = %f\n",x,LagrangeInsert(header,0.20));

return ;

}

1366087041_3918.PNG

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值