好久没写过 C 程序了,今天写了一个,也是迫不得已,是计算方法的作业,呵呵~~
这个程序用来计算 Lagrange 插值,老师要求要用数组,偶就用数组了,有点浪费内存的说,不过现在的机器内存太大了,偶的那点内存算什么,呵呵~~
由于很久没写了,还真有点手生,在那个循环那里还卡了一段时间,最后终于搞清楚是那几个变量没有初始化,唉,这么低级的错误,汗~~~[neutral]

/*lagrange.c*/
/*计算Lagrange插值*/
/*2005年4月21日*/
/*作者:Fdream*/

#include<stdio.h>

/*定义初始数组的大小*/
#define M 100

/*主函数*/
void main(void){
	/*定义数组,用来存放点的信息*/
	float point[M][2];
	/*定义变量*/
	float fdx,fdy,fdxx,fdm,fdn,fdyy=0;
	int n,i,j,k;
	/*输入点的个数*/
	printf("How many points do you want to input:\n");
	scanf("%d",&n);
	/*判断输入的点的个数是否大于2*/
	for(;n<2;){
		printf("The number of points cannot be less than 2 !\n");
		printf("How many points do you want to input:\n");
		scanf("%d",&n);
	}
	/*输入点的信息;x和f(x)*/
	for(i=0;i<n;i++){
		printf("point %d:\n",i+1);
		scanf("%f%f",&fdx,&fdy);
		point[i][0]=fdx;
		point[i][1]=fdy;
	}
	/*输入要插值的点的x值*/
	printf("Please input x:\n");
	scanf("%f",&fdxx);
	/*计算过程*/
	for(j=0;j<n;j++){
		/*初始化各变量的值*/
		k=0;
		fdn=1;
		fdm=1;
		/*计算∏(x-xi)与∏(xi-xj),下标从0到j-1*/
		for(k=0;k<j;k++){
			fdn*=(fdxx-point[k][0]);
			fdm*=(point[j][0]-point[k][0]);
		}
		k++;
		/*计算∏(x-xi)与∏(xi-xj),下标从j+1到n-1*/
		for(;k<n;k++){
			fdn*=(fdxx-point[k][0]);
			fdm*=(point[j][0]-point[k][0]);
		}
		/*计算∑yi(∏(x-xi)/∏(xi-xj)),下标从0到n-1*/
		fdyy+=(fdn/fdm)*point[j][1];
	}
	/*输出结果*/
	printf("The result is: %f\n",fdyy);
}

Tags:

4 Comments

  1. 呵呵~~
    是 CS 的,这个程序里还一个问题也是弄了好长一断时间的才弄好的,貌似是 C编译器的bug,浮点数组里不能直接输入浮点数,要通过变量中转~~

  2. 呵呵,这个是 Turbo C 2.0 的 BUG 噢.
    同样的,结构体中的 float 和 double 也是如此.

  3. 以前课程设计的时候也遇到过,呵呵
    不过Visual C++里好像也有这个问题~

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.