コード例 #1
0
void zrhqr(float a[], int m, float rtr[], float rti[])
{
	void balanc(float **a, int n);
	void hqr(float **a, int n, float wr[], float wi[]);
	int j,k;
	float **hess,xr,xi;

	hess=matrix(1,MAXM,1,MAXM);
	if (m > MAXM || a[m] == 0.0) nrerror("bad args in zrhqr");
	for (k=1;k<=m;k++) {
		hess[1][k] = -a[m-k]/a[m];
		for (j=2;j<=m;j++) hess[j][k]=0.0;
		if (k != m) hess[k+1][k]=1.0;
	}
	balanc(hess,m);
	hqr(hess,m,rtr,rti);
	for (j=2;j<=m;j++) {
		xr=rtr[j];
		xi=rti[j];
		for (k=j-1;k>=1;k--) {
			if (rtr[k] <= xr) break;
			rtr[k+1]=rtr[k];
			rti[k+1]=rti[k];
		}
		rtr[k+1]=xr;
		rti[k+1]=xi;
	}
	free_matrix(hess,1,MAXM,1,MAXM);
}
コード例 #2
0
ファイル: xhqr.c プロジェクト: contentsciences/githubapitest
int main(void)
{
	int i,j;
	static float c[NP][NP]=
		{1.0,2.0,0.0,0.0,0.0,
		-2.0,3.0,0.0,0.0,0.0,
		3.0,4.0,50.0,0.0,0.0,
		-4.0,5.0,-60.0,7.0,0.0,
		-5.0,6.0,-70.0,8.0,-9.0};
	float *wr,*wi,**a;

	wr=vector(1,NP);
	wi=vector(1,NP);
	a=convert_matrix(&c[0][0],1,NP,1,NP);
	printf("matrix:\n");
	for (i=1;i<=NP;i++) {
		for (j=1;j<=NP;j++) printf("%12.2f",a[i][j]);
		printf("\n");
	}
	balanc(a,NP);
	elmhes(a,NP);
	hqr(a,NP,wr,wi);
	printf("eigenvalues:\n");
	printf("%11s %16s \n","real","imag.");
	for (i=1;i<=NP;i++) printf("%15f %14f\n",wr[i],wi[i]);
	free_convert_matrix(a,1,NP,1,NP);
	free_vector(wi,1,NP);
	free_vector(wr,1,NP);
	return 0;
}
コード例 #3
0
int main(void)
{
	int i,j;
	float *c,*r,**a;

	c=vector(1,NP);
	r=vector(1,NP);
	a=matrix(1,NP,1,NP);
	for (i=1;i<=NP;i++)
		for (j=1;j<=NP;j++)
			a[i][j] = (((i & 1) && !(j & 1)) ? 100.0 : 1.0);
	/* Write norms */
	for (i=1;i<=NP;i++) {
		r[i]=c[i]=0.0;
		for (j=1;j<=NP;j++) {
			r[i] += fabs(a[i][j]);
			c[i] += fabs(a[j][i]);
		}
	}
	printf("rows:\n");
	for (i=1;i<=NP;i++) printf("%12.2f",r[i]);
	printf("\ncolumns:\n");
	for (i=1;i<=NP;i++) printf("%12.2f",c[i]);
	printf("\n\n***** Balancing matrix *****\n\n");
	balanc(a,NP);
	/* Write norms */
	for (i=1;i<=NP;i++) {
		r[i]=c[i]=0.0;
		for (j=1;j<=NP;j++) {
			r[i] += fabs(a[i][j]);
			c[i] += fabs(a[j][i]);
		}
	}
	printf("rows:\n");
	for (i=1;i<=NP;i++) printf("%12.2f",r[i]);
	printf("\ncolumns:\n");
	for (i=1;i<=NP;i++) printf("%12.2f",c[i]);
	printf("\n");
	free_matrix(a,1,NP,1,NP);
	free_vector(r,1,NP);
	free_vector(c,1,NP);
	return 0;
}