随笔-48  评论-259  文章-1  trackbacks-0

#include"iostream.h"
#include"fstream.h"

#define N 100
float X[N],Y[N],M[N],a,b;
double f(int i,int j)
{
  double sum1=0;
  if(j-i==1) return (Y[j]-Y[i])/(X[j]-X[i]);
  else return (f(i+1,j)-f(i,j-1))/(X[j]-X[i]);
}


void main()
{

  ifstream istrm("E:\\data.txt");//这里是文件的输入,请相应改成普通键盘输入
  int n=3;
  for(int i=0;i<=n;i++)
   istrm>>X[i]>>Y[i];
  istrm>>a>>b;
  float h[N],u[N],q[N],d[N];
  for(i=0;i<n;i++)
   h[i]=X[i+1]-X[i];
  q[0]=1;q[n]=0;
  for(i=1;i<n;i++)
      q[i]=h[i]/(h[i-1]+h[i]);
  for(i=0;i<=n;i++)
   u[i]=1-q[i];
  d[0]=(6*(f(0,1)-a))/h[0];
  d[n]=(6*(b-f(n-1,n)))/h[n-1];
  for(i=1;i<n;i++)
     d[i]=6*f(i-1,i+1);
  float m[N];
  for(i=0;i<=n;i++) m[i]=2;
  for(i=1;i<=n;i++)
  {
    m[i]=m[i]-(u[i]/m[i-1])*q[i-1];
 d[i]=d[i]-(u[i]/m[i-1])*d[i-1];
  }
  M[n]=d[n]/m[n];
  cout<<M[n]<<endl;
  for(i=n-1;i>=0;i--)
  {
    M[i]=(d[i]-q[i]*M[i+1])/m[i];
 cout<<M[i]<<endl;
  }
}

posted on 2007-06-09 12:16 星梦情缘 阅读(6054) 评论(4)  编辑 收藏 引用 所属分类: 数据结构的所有实现程序

评论:
# re: 数值分析--三次样条插值公式 2007-06-09 19:54 | 随便
写这个差点让我崩溃了!我快放弃写这了!  回复  更多评论
  
# re: 数值分析--三次样条插值公式 2007-06-09 22:17 | 星梦情缘
嘿嘿,你是谁啊?我认识吗  回复  更多评论
  
# re: 数值分析--三次样条插值公式 2008-03-23 22:44 | 路过
恩,怎么没有一点注释呢。
代码好乱的。  回复  更多评论
  
# re: 数值分析--三次样条插值公式 2009-02-05 17:39 | sdfabc027
不介意做个广告的吧
数值分析--三次样条插值函数http://hi.baidu.com/sdfabc027/blog/item/769d09836d4cbfa50df4d2ca.html  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理