问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用C语言编一个线性插值的小程序,很着急

发布网友 发布时间:2022-05-01 20:47

我来回答

1个回答

热心网友 时间:2022-06-23 03:46

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct data
{
float x;
float y;
}Data;//变量x和函数值y的结构
Data d[20];//最多二十组数据
float f(int s,int t)//牛顿插值法,用以返回插商
{
if(t==s+1)
return (d[t].y-d[s].y)/(d[t].x-d[s].x);
else
return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);
}
float Newton(float x,int count)
{
int n;
while(1)
{
cout<<"请输入n值(即n次插值):";//获得插值次数
cin>>n;
if(n<=count-1)// 插值次数不得大于count-1次
break;
else
system("cls");
}
//初始化t,y,yt。
float t=1.0;
float y=d[0].y;
float yt=0.0;
//计算y值
for(int j=1;j<=n;j++)
{
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
//cout<<f(0,j)<<endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=0.0;
for(int k=0;k<count;k++)//这儿默认为count-1次插值
{
float p=1.0;//初始化p
for(int j=0;j<count;j++)
{//计算p的值
if(k==j)continue;//判断是否为同一个数
p=p*(x-d[j].x)/(d[k].x-d[j].x);
}
y=y+p*d[k].y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数
cin>>count;
if(count<=20)
break;//检查输入的是否合法
system("cls");
}
//获得各组数据
for(int i=0;i<count;i++)
{
cout<<"请输入第"<<i+1<<"组x的值:";
cin>>d[i].x;
cout<<"请输入第"<<i+1<<"组y的值:";
cin>>d[i].y;
system("cls");
}
cout<<"请输入x的值:";//获得变量x的值
cin>>x;
while(1)
{
int choice=3;
cout<<"请您选择使用哪种插值法计算:"<<endl;
cout<<" (0):退出"<<endl;
cout<<" (1):Lagrange"<<endl;
cout<<" (2):Newton"<<endl;
cout<<"输入你的选择:";
cin>>choice;//取得用户的选择项
if(choice==2)
{
cout<<"你选择了牛顿插值计算方法,其结果为:";
y=Newton(x,count);break;//调用相应的处理函数
}
if(choice==1)
{
cout<<"你选择了拉格朗日插值计算方法,其结果为:";
y=lagrange(x,count);break;//调用相应的处理函数
}
if(choice==0)
break;
system("cls");
cout<<"输入错误!!!!"<<endl;
}
cout<<x<<" , "<<y<<endl;//输出最终结果

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
送你离开千里之外歌词完整版 枇杷怎么做才有营养? 枇杷怎么吃最有营养啊? 用护肤品脸上刺痛怎么办 洗脸脸上刺痛 肠粉有什么家常做法? 肠粉的家常做法 教你自制广东肠粉 小度voice是什么意思? 小度智能屏x10是否支持粤语_小度智能屏x10支持粤语吗 小度支持粤语吗 牛顿的插值法用C语言怎么编写怎么编啊? 长沙自由简风文化传播有限责任公司怎么样? 为人民服务作为单位宣传栏怎样设计方案 张家界盛举文化传媒有限公司怎么样? 湖南中乔广告传媒有限公司怎么样? 行政单位宣传栏费用应列入什么会计科目 宣传栏广告制作是属于劳务还服务类? 杭州乘公交车刷卡乘第2辆90分内是免费的吗 用杭州市民卡乘公交车有换乘优惠吗? 杭州市坐公交车坐地铁用退伍证能免费吗?退伍军人可以免费座公交车和地铁吗? 六十周岁持有身份证老年证 ,在杭州坐公交车坐地铁听说免费了。这是真的吗? 杭州公交432路改532路后70岁以上爱心卡还能免费乘车吗? 残疾证在杭州坐车免费吗 杭州公交车刷卡90分钟内乘第2辆是免费的吗? 小西红柿可以做什么菜? 被限制登录,一般要多久才能自动解除? 微信转账到另外一个显示对方限制登录要怎么解 怎样给摄像机配置镜头 给对方转账显示对方已被*登录,给对方发信息却能收到,这是怎么回事? 对方被限制登录是什么意思? c语言中插值排序法怎么打程序 求用c语言编写牛顿插值法 用C语言编写一个线性插值程序 求双线性插值法的C语言程序!帮帮忙!拜托各位了! 数值分析计算实习题关于插值法,用C语言编程 C语言的拉格朗日插值法 用C语言实现拉格朗日插值、牛顿插值、等距结点插值算法 求c语言写的双三次插值函数 高分悬赏 求三维数据点C语言插值计算程序 工程常用算法作业 插值方法 C语言 C语言实现拉格朗日插值法的问题 拉格朗日插值法用C语言表示 牛顿算法和拉格朗日插值算法的C语言实现 C 语言编程 分段抛物线插值 拉格朗日插值公式 C语言 runge 你好!小赢网金银行卡号写错了。人家让我写委托书他给整改银行卡号这样安全吗? 高分悬赏——数值*近的c语言编程题。题目有关插值知识,数学系高材生请进。 已知函数值C语言中用三次样条插值求某个点值程序 win10傲腾内存的安装, 一起向未来是什么口号?