add numerical recipes library

This commit is contained in:
2025-09-12 18:55:25 +09:00
parent d4dff245bd
commit 2c75620ec9
1344 changed files with 63869 additions and 0 deletions

View File

@@ -0,0 +1,73 @@
/* Driver for routine mnewt */
#include <stdio.h>
#include <math.h>
#define NRANSI
#include "nr.h"
#include "nrutil.h"
void usrfun(float *x,int n,float *fvec,float **fjac)
{
int i;
fjac[1][1] = -2.0*x[1];
fjac[1][2] = -2.0*x[2];
fjac[1][3] = -2.0*x[3];
fjac[1][4]=1.0;
for (i=1;i<=n;i++) fjac[2][i]=2.0*x[i];
fjac[3][1]=1.0;
fjac[3][2] = -1.0;
fjac[3][3]=0.0;
fjac[3][4]=0.0;
fjac[4][1]=0.0;
fjac[4][2]=1.0;
fjac[4][3] = -1.0;
fjac[4][4]=0.0;
fvec[1] = -SQR(x[1])-SQR(x[2])-SQR(x[3])+x[4];
fvec[2]=SQR(x[1])+SQR(x[2])+SQR(x[3])+SQR(x[4])-1.0;
fvec[3]=x[1]-x[2];
fvec[4]=x[2]-x[3];
}
#define NTRIAL 5
#define TOLX 1.0e-6
#define N 4
#define TOLF 1.0e-6
int main(void)
{
int i,j,k,kk;
float xx,*x,*fvec,**fjac;
fjac=matrix(1,N,1,N);
fvec=vector(1,N);
x=vector(1,N);
for (kk=1;kk<=2;kk++) {
for (k=1;k<=3;k++) {
xx=0.2001*k*(2*kk-3);
printf("Starting vector number %2d\n",k);
for (i=1;i<=4;i++) {
x[i]=xx+0.2*i;
printf("%7s%1d%s %5.2f\n",
"x[",i,"] = ",x[i]);
}
printf("\n");
for (j=1;j<=NTRIAL;j++) {
mnewt(1,x,N,TOLX,TOLF);
usrfun(x,N,fvec,fjac);
printf("%5s %13s %13s\n","i","x[i]","f");
for (i=1;i<=N;i++)
printf("%5d %14.6f %15.6f\n",
i,x[i],fvec[i]);
printf("\npress RETURN to continue...\n");
(void) getchar();
}
}
}
free_vector(x,1,N);
free_vector(fvec,1,N);
free_matrix(fjac,1,N,1,N);
return 0;
}
#undef NRANSI