⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xlinbcg.c

📁 Numerical Recipes in C的源代码
💻 C
字号:
/* Driver for routine linbcg */

#include <stdio.h>
#include <math.h>
#define NRANSI
#include "nr.h"
#include "nrutil.h"

#define NSIZE 59
#define NP 20
#define ITOL 1
#define TOL 1e-9
#define ITMAX 75

unsigned long ija[NSIZE+1] ={
	0,22,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,
	59,60,2,1,3,2,4,3,5,4,6,5,7,6,8,7,9,8,10,9,11,10,12,11,13,12,
	14,13,15,14,16,15,17,16,18,17,19,18,20,19};

double sa[NSIZE+1] ={
	0.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,
	3.0,3.0,3.0,3.0,0.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,
	2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,
	-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0,2.0,-2.0};

int main(void)
{
	int i,ii,iter;
	double *b,*bcmp,*x,err;

	b=dvector(1,NP);
	bcmp=dvector(1,NP);
	x=dvector(1,NP);
	for (i=1;i<=NP;i++) {
		x[i]=0.0;
		b[i]=1.0;
	}
	b[1]=3.0;
	b[NP] = -1.0;
	linbcg(NP,b,x,ITOL,TOL,ITMAX,&iter,&err);
	printf("%s %15e\n","Estimated error:",err);
	printf("%s %6d\n","Iterations needed:",iter);
	printf("\nSolution vector:\n");
	for (ii=1;ii<=NP/5;ii++) {
		for (i=5*(ii-1)+1;i<=5*ii;i++) printf("%12.6f",x[i]);
		printf("\n");
	}
	for (i=1;i<=(NP % 5);i++)
		printf("%12.6f",x[5*(NP/5)+i]);
	printf("\n");
	dsprsax(sa,ija,x,bcmp,NP);
	/* this is a double precision version of sprsax */
	printf("\npress RETURN to continue...\n");
	(void) getchar();
	printf("test of solution vector:\n");
	printf("%9s %12s\n","a*x","b");
	for (i=1;i<=NP;i++)
		printf("%12.6f %12.6f\n",bcmp[i],b[i]);
	free_dvector(x,1,NP);
	free_dvector(bcmp,1,NP);
	free_dvector(b,1,NP);
	return 0;
}
#undef NRANSI

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -