高手请进!!!散分散分哈

kuzip 2004-06-29 08:20:58
分段lagrange三点插值
一:功能
给出n个节点X1,X2....Xn及相应的函数值Yi=f(Xi),i=1,2...n,
对p个插值点 Xj(j=1,2...p),选取最靠近插值点相邻的三个点,用lagrange三点插值公式对一元函数进行成组插值。节点等距与不等距均可。
二:算法简介
设给出n个节点,其中X1<X2<...<Xn,相应的函数值Y1,Y2...Yn,用lagrange三点插值公式,有:
L(x)=Σ(Π(X-Xj)/(Xk-Xj))Yk 注释:求和公式k由I到I+2
求积公式j由I到I+2,j≠k
其中如果X<(Xj+Xj+1)/2 那么I=j-1;
X>(Xn-2+Xn-1)/2 那么I=n-2
三:程序使用说明
1)输入参数
n为节点个数
p为插值节点个数
X(n),Y(n),一维数组,分别存放相应的节点和函数值
C(p),一维数组,存放插值点
2)输出参数
n,p分别为节点个数和插值个数
Xi,Yi节点与节点函数值
Xj,Yj,j=1,2...p,插值点与插值

这是我用C做的,但是输入个数不够,还有没有输出,请高手看看,帮忙改一下:

main()
{
int n,p,i,j,,k,t,m,s,x[100],y[100],c[100],d[100];
printf("INPUT DATA N:");
scanf("%d",&n);
printf("INPUT DATA P:");
scanf("%d",&p);
for(i=0;i<n;i++)scanf("%d",x[i]);
for(i=0;i<n;i++)scanf("%d",y[i]);
for(i=0;i<p;i++)scanf("%d",c[i]);
for(i=0;i<p;i++)scanf("%d",d[i]);
for(t=0;t<p;t++)
{
i=0;
a: if(c[t]<(x[i+1]+x[i+2])/2) m=i+2;
if(c[t]>=(x[n-2]+x[n-1])/2) i=n-2;
i++;
goto a;
d[t]=0;
for(j=0;j<m;j++)
{
s=1;
for(k=0;k<m;k++)if(j-k!=0) s=s*(c[t]-x[k])/x[j]-x[k];
d[t]=d[t]+s*y[j];
}
}
}
...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
eshowjow 2004-07-03
  • 打赏
  • 举报
回复
我是来等楼主给点分的^_^
saskatoon 2004-06-29
  • 打赏
  • 举报
回复
查数据结构
xjp6688 2004-06-29
  • 打赏
  • 举报
回复
关注
kuzip 2004-06-29
  • 打赏
  • 举报
回复
快啊,马上要交了,江湖救急!!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧