一个简单的数值运算程序

                 对拉格朗日插值公式做的简单程序
功能:
用拉格朗日插值公式,对给定的n对离散数据进行差值计算。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

算法简介:
对给定的n个插值结点x1x2,……,xn,及其对应的函数值y1=fx1),y2=fx2),……,yn=fxn);使用拉格朗日插值公式,计算在x点处的对应的函数值fx);
                       
程序:

 

 double lagrange( double x0[],double y0[],double n,double x,double *y)

{
 

 int i, j;
 double p;
 *y=0;
 if ( n>1)
 {
  for ( i=0; i<n; i++)
  {
   p=1;
   for ( j=0; j<n; j++)
   {
    if ( i!= j )
     p= p*(x-x0[j]) / ( x0[i]-x0[j]);
   }
   *y = *y + p*y0[i];
   return (0);
  }
 }
 else
  return (-1);
 
}

 

使用说明:
1 参数说明
输入参数: x0[ ]  ——  n个元素的一维实数组,存放给定的插值结点x1x2,……,xn
           y0[ ] —— n个元素的一维实数组,存放与插值结点相对应的函数值y1y2,……,yn
            n —— 整型量,给定插值结点的个数;
            x —— 实型量,插值点。
输出参数: *y —— 实型指针,接受调用程序传送的一个实型量的地址,在程序结束时,在该实型量返回计算结果。
注意: 该实型量中原有内容将被破坏。
2)调用说明
调用的格式为:
             rtn = lagrange ( x0, y0, n, x, y)
其中rtn应为一个整型量。
本子程序是一个整型函数,因此在返回主程序一个整型代码于变量rtn中。代码的意义如下:
0 —— 程序正常结束,在y中有计算结果。
-1 —— 程序异常返回,在y中没有结果。异常的原因是n不大于1,使运算无法继续进行。

 

 

例题:
已知函数如下表所示,求X = 0.472处的函数值:
X
0.46
0.47
0.48
0.49
Y
0.484655
0.4903745
0.502750
0.511668

 

计算这个问题的程序如下:
#include "stdio.h"
#include <math.h>

 
void main()
{
 double x0[4]={0.46,0.47,0.48,0.49};
 double y0[4]={0.484655,0.493745,0.502750,0.511668};
 double x,y;
 double n,rtn;
 
 n=4;
 x=0.472;
 
 rtn=lagrange(x0,y0,n,x,&y);
 
 if (rtn==0)
 {
  printf("Y(0.472)=:%f\n",y);
 }
 else
 {
  printf("N must be larger than 1.\n");
 }
}

 

计算结果:Y0.472= -0.023263
 
本光盘是《计算机常用数值计算算法与程序 C++版》一书的配套光盘,盘中包括了书中所有的C++程序源代码文件,每个源程序文件的文件扩展名都使用.cpp形式。这些C++程序已经在微软公司Windows平台下的Virsual C++ 6.0环境下通过。盘中还包括由这些源程序在VC++6.0下生成的可执行文件(文件扩展名为.exe),以及由这些程序运行后产生的结果文件(文件扩展名为.dat)。另外,还包括若干类书中所介绍算法的头文件,由文件扩展名为.h和.inl所组成。 为了方便读者实际应用书中所介绍的算法程序,本光盘专门预创建了VC++6.0的工程,以每一章建立一个工程,一共有16个工程,对应着书中的16章。全部工程包含在一个目录(文件夹)——NumComp下,该目录下一共有17个子目录(文件夹),第一个到第十六个为每章所对应的工程文件夹,命名为ChapXX,XX表示01至16,如Chap05,表示为第五章的程序所建立了工程目录(文件夹),第17个目录(文件夹)名为include,其中存放了本书中算法程序需要的诸头文件。在前十六个目录(文件夹)中除存放了各章所介绍的算法示例C++源程序文件,还包括几个VC++6.0工程所需要的文件,读者可以不用去动它们。在每一个ChapXX目录(文件夹)下,还有一个目录(文件夹):debug,该目录(文件夹)中存放了ChapXX所对应的章中所有算法C++源程序生成的可执行文件和这些程序运行后生成的结果数据文件。除止之外,还有几个是VC++6.0工程所生成的文件,读者可以不用去动它们。 在每一个ChapXX目录(文件夹)下,包括一个这样的文件:ChapX.dsw,X表示1至16这16个阿拉伯数字之一,对应于这X章的工程。当进入到某一这样的目录(文件夹)中,用鼠标双击该文件名,就可以启动VC++6.0程序,并调用了该工程,这是最方便的一种启动VC++6.0的方法之一,下面就可以进行对C++程序的编辑、编译、连接、运行等工作了。具体的操作步骤,可以参阅有关VC++6.0的使用操作手册,或技术手册。 如果读者要自己另外建立VC++6.0的工程及相应的目录(文件夹),可以参阅VC++6.0的使用操作手册,也可阅读《计算机常用数值计算算法与程序 C++版》一书的第一章“概论”中的1.8节“Visual C++ 6.0的编译运行环境”,其中有详细说明。 最后注意,在VC++ 6.0中设置好路径,特别是include目录(文件夹)的路径,否则在编译时会出现找不到头文件的错误,使编译无法正常进行。具体的设置方法请参看本书第1章的相关内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值