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

📄 powell.c

📁 适合大型数值计算代码 现在网络上已经找不到了 购买需要20$
💻 C
字号:
#include <math.h>#define NRANSI#include "nrutil.h"#define ITMAX 200void powell(float p[], float **xi, int n, float ftol, int *iter, float *fret,	float (*func)(float [])){	void linmin(float p[], float xi[], int n, float *fret,		float (*func)(float []));	int i,ibig,j;	float del,fp,fptt,t,*pt,*ptt,*xit;	pt=vector(1,n);	ptt=vector(1,n);	xit=vector(1,n);	*fret=(*func)(p);	for (j=1;j<=n;j++) pt[j]=p[j];	for (*iter=1;;++(*iter)) {		fp=(*fret);		ibig=0;		del=0.0;		for (i=1;i<=n;i++) {			for (j=1;j<=n;j++) xit[j]=xi[j][i];			fptt=(*fret);			linmin(p,xit,n,fret,func);			if (fabs(fptt-(*fret)) > del) {				del=fabs(fptt-(*fret));				ibig=i;			}		}		if (2.0*fabs(fp-(*fret)) <= ftol*(fabs(fp)+fabs(*fret))) {			free_vector(xit,1,n);			free_vector(ptt,1,n);			free_vector(pt,1,n);			return;		}		if (*iter == ITMAX) nrerror("powell exceeding maximum iterations.");		for (j=1;j<=n;j++) {			ptt[j]=2.0*p[j]-pt[j];			xit[j]=p[j]-pt[j];			pt[j]=p[j];		}		fptt=(*func)(ptt);		if (fptt < fp) {			t=2.0*(fp-2.0*(*fret)+fptt)*SQR(fp-(*fret)-del)-del*SQR(fp-fptt);			if (t < 0.0) {				linmin(p,xit,n,fret,func);				for (j=1;j<=n;j++) {					xi[j][ibig]=xi[j][n];					xi[j][n]=xit[j];				}			}		}	}}#undef ITMAX#undef NRANSI

⌨️ 快捷键说明

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