拉格朗日插值法用C语言表示

编制求拉格朗日插值多项式的通用程序测试数据xi0.30.40.50.60.7yi0.29850.396460.493110.588130.68122用拉格朗日插值求x=0... 编制求拉格朗日插值多项式的通用程序
测试数据
xi 0.3 0.4 0.5 0.6 0.7
yi 0.2985 0.39646 0.49311 0.58813 0.68122
用拉格朗日插值求x=0.462处的y值
答案 y=0.456558
展开
 我来答
替罪小山羊
2010-05-21 · TA获得超过1050个赞
知道答主
回答量:71
采纳率:0%
帮助的人:0
展开全部
我的程序是牛顿插值和拉格朗日插值合起来,你自己看下,用的是C++
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
#define N 100
void lagrange()
{
int n,k,m,q=1;
float x[N],y[N],xx,yyy1,yyy2,yy1,yy2,yy3;
cout<<"请输入X的个数:";
cin>>n;
for(k=0;k<=n-1;k++)
{
cout<<"请输入X"<<k<<"的值:";
cin>>x[k];
cout<<"请输入Y"<<k<<"的值:";
cin>>y[k];
}
system("cls");
cout<<"则Xi与Yi表格如下:"<<endl;
cout<<"Xi"<<" ";for(k=0;k<=n-1;k++)cout<<setiosflags(ios::left)<<setw(10)<<x[k];
cout<<endl;
cout<<"Yi"<<" ";for(k=0;k<=n-1;k++)cout<<setiosflags(ios::left)<<setw(10)<<y[k];
cout<<endl;
while(q)
{
cout<<"请输入所求x的值:";
cin>>xx;
while(xx>x[k-1]||xx<x[0])
{
cout<<"输入错误,请重新输入:";
cin>>xx;
}
for(k=0;k<=n-1;k++)
{
if(xx<x[k])
{
m=k-1;
k=n-1;
}
}
yyy1=y[m]*((xx-x[m+1])/(x[m]-x[m+1]))+y[m+1]*((xx-x[m])/(x[m+1]-x[m]));
cout<<"则拉格朗日分段线性插值为:"<<yyy1<<endl;
for(k=0;k<=n-1;k++)
{
if(xx<x[k])
{
m=k-1;
k=n-1;
}
}
if((xx-x[m])>(x[m+1]-xx))m=m+1;
else m=m;
yy1=y[m-1]*((xx-x[m])*(xx-x[m+1]))/((x[m-1]-x[m])*(x[m-1]-x[m+1]));
yy2=y[m]*((xx-x[m-1])*(xx-x[m+1]))/((x[m]-x[m-1])*(x[m]-x[m+1]));
yy3=y[m+1]*((xx-x[m-1])*(xx-x[m]))/((x[m+1]-x[m-1])*(x[m+1]-x[m]));
yyy2=yy1+yy2+yy3;
cout<<"则拉格朗日分段二次插值为:"<<yyy2<<endl;
cout<<"是否输入其余要求x的值[是(1),否(0)]:";
cin>>q;
}
system("cls");
}
void main()
{
lagrange();
}
小马斗世
2010-05-06 · TA获得超过653个赞
知道小有建树答主
回答量:1257
采纳率:0%
帮助的人:481万
展开全部
#include<stdio.h>
double L(int s)
{
double x[13]={0.0,10.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,90.0,100.0,110.0,120.0};
double y[13]={5.0,1.0,7.5,3.0,4.5,8.8,15.5,6.5,-5.0,-10.0,-2.0,4.5,7.0};
int i=0;
int j=0;
int k=0;
double l[13]={1,1,1,1,1,1,1,1,1,1,1,1,1};
double result=0.0;

for(k=0;k<13;k++)
{
for(i=0;i<13;i++)
{
if(k!=i)
l[k]*=((s-x[i])/(x[k]-x[i]));
}
}
for(j=0;j<13;j++)
result+=(l[j]*y[j]);
return result;
}
void main()
{
printf("%lf\n",L(65));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式