Files
2025-02-Numerical/lib/nr/ansi/recipes/zrhqr.c
2025-09-12 18:55:25 +09:00

37 lines
718 B
C

#define NRANSI
#include "nrutil.h"
#define MAXM 50
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);
}
#undef MAXM
#undef NRANSI