numerical recipes(C语言*fp = *dp如何理解)

2026-03-11 18:30:01 0

numerical recipes(C语言*fp = *dp如何理解)

大家好,numerical recipes相信很多的网友都不是很明白,包括C语言*fp = *dp如何理解也是一样,不过没有关系,接下来就来为大家分享关于numerical recipes和C语言*fp = *dp如何理解的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

本文目录

C语言*fp = *dp如何理解

Numerical Recipes in C
一书及所附程序,有完整程序。不过我封装了它的C++版本,可以对但参数或多参数求极值,完整的头文件为:
#ifndef __OPTIMIZATION_H__
#define __OPTIMIZATION_H__
//////////////////////////////////////////////////////////////////////////
// class TOptimization
//
// $ 求函数一个或多个参数的最小值
//
// 该类默认对一个参数优化,一般只要输入优化参数数目
// 优化目标函数就可以使用。
//
// ...主要代码来自:
// Numerical Recipes in C++
// The Art of Scientific Computing
// Second Edition
// William H. Press Saul A. Teukolsky
// William T. Vetterling Brian P. Flannery
//
// 中译本:
// C++ 数值算法(第二版) 胡健伟 赵志勇 薛运华 等译
// 电子工业出版社 北京 (2005)
//
// Author: Jian Feng
// Email: fengj@tom.com
// Dec. 9, 2006
//
//////////////////////////////////////////////////////////////////////////
//
// 输入函数:
//
// @MaxIterationStep: 最大迭代次数, 默认 1000
// @ParameterNumbers: 优化参数数目, 默认 1
// @InitMatrix: 初始化矩阵参数(N*N), 默认
// @Tolerance: 容许公差, 默认 1E-7
//
// 执行函数:
//
// @ExecutePowell: 利用powell方法进行多参数优化
// @ExecuteBrent: 利用brent方法进行单参数优化
//
// 输出函数:
//
// @OptimizatedParameters: 优化结果数据
// @ObjectiveFunctionValue: 目标函数在优化值处的值
//
// 使用示例:
//
// 1. 单参数
// double objfun(double a){
// double sum = 0;
// for(int i = 0; i 《 DataPoints; ++i)
// sum += SQR(Exps - Theo(a));
// }
// double value
// TOptimization opt;
// if(opt.ExecuteBrent(objfun, -10, -1)) opt.OptimizatedParameters(&value);
//
// 2. 多参数
// double objfun(double *a){
// double sum = 0;
// for(int i = 0; i 《 DataPoints; ++i)
// sum += SQR(Exps - Theo(a));
// }
// double value
// TOptimization opt(3);
// double ival = ;
// if(opt.ExecutePowell(objfun, ival)) opt.OptimizatedParameters(value);
//
namespace{
static int ncom; //公用变量
static double *pcom_p; //公用变量
static double *xicom_p; //公用变量
static double (*nrfunc)(double*); //公用函数指针
}
class TOptimization
{
private:
typedef double (*Reff)(double *);
typedef double (*Ptrf)(double );
public:
TOptimization(int n = 1);
~TOptimization()
//主要方法
void ParameterNumbers(int n)
//利用powell方法对一个或多个参数优化
bool ExecutePowell(Reff obj, double *a = 0);
//利用brent方法对一个参数优化,需给出参数所在的区间
bool ExecuteBrent(Ptrf obj, double vFrom = 0, double vTo = 1);
void OptimizatedParameters(double *a)
void OptimizatedParameters(double &a)
//void OptimizatedParameters(double *a){
// if(method) for(int i=0; i《num; ++i) a;
// else *a = vmin;
//}
//其它方法
void InitMatrix(double **m)
{
for(int i=0; i《num; ++i)
for(int j = 0; j《num; ++j)
matx;
setm = true;
}
void MaxIterationStep(int s)
void Tolerance(double eps)
double ObjectiveFunctionValue()const
private:
double brent(double ax, double bx, double cx, Ptrf f, double tol, double &xmin, int &flag);
void mnbrak(double &ax, double &bx, double &cx, double &fa, double &fb, double &fc, Ptrf func);
void linmin(double *p, double *xi, double &fret, Reff func);
bool powell(double *p, double **xi, double ftol, int &iter, double &fret, Reff func);

void shft2(double &a, double &b, const double c)
void shft3(double &a, double &b, double &c, const double d)

double SQR(double x)
void SWAP(double &a, double &b)

double SIGN(const double &a, const double &b)
double MAX(const double &a, const double &b)
void AllocateMemory();
void FreeMemory();
static double f1dim(double x)
{
int j;
double *xt = new double ;
//Vec_Dp &pcom=*pcom_p,&xicom=*xicom_p;
double *pcom = pcom_p, *xicom = xicom_p;
for (j=0;j《ncom;j++)
xt;
//delete xt;
double val = nrfunc(xt);
delete xt;
return val;
}
bool setm; //是否设置优化方向初始矩阵
int num; //优化参数
int ITMAX; //最大迭代数
int iter; //实际迭代步数
int method; //优化方法 0: 1-D brent, 2: M-D Powell
double vmin; //一维优化参数
double ftol; //容许差
double fret; //目标函数值
double *coef; //多维优化参数值
double **matx; //多维优化参数方向的初始值
};
//////////////////////////////////////////////////////////////////////////
inline TOptimization::TOptimization(int n )
{
num = n;
ftol = 1e-7;
ITMAX = 1000;
iter = 0;
fret = 0.;
vmin = 0.;
method = 0;
setm = false;
AllocateMemory();
}
inline void TOptimization::AllocateMemory()
{
pcom_p = new double ;
xicom_p = new double ;
coef = new double ;
matx = new double *;
for(int i = 0; i 《 num; ++i)
{
coef = 0.;
matx;
for(int j = 0; j 《 num; ++j)
matx=(i == j ? 1.0 : 0.0);
}
}
inline void TOptimization::FreeMemory()
{
for(int i = 0; i 《 num; ++i)
{
delete ;
}
delete matx;
delete pcom_p;
delete xicom_p;
delete coef;
}
inline bool TOptimization::ExecutePowell(Reff obj, double *a)
{
method = 1;
if(a)
for(int i = 0; i 《 num; ++i) coef;
return powell(coef, matx, ftol, iter, fret, obj);
}
inline bool TOptimization::ExecuteBrent(Ptrf obj, double vFrom, double vTo)
{
method = 0;
int flag;
double cx, fa, fb, fc;
mnbrak(vFrom,vTo,cx,fa,fb,fc,obj);
fret = brent(vFrom,vTo,cx,obj, ftol,vmin, flag);
return flag ? true : false;
}
inline void TOptimization::mnbrak(double &ax, double &bx, double &cx, double &fa,
double &fb, double &fc, Ptrf func)
{
const double GOLD=1.618034,GLIMIT=100.0,TINY=1.0e-20;
double ulim,u,r,q,fu;
fa=func(ax);
fb=func(bx);
if (fb 》 fa) {
SWAP(ax,bx);
SWAP(fb,fa);
}
cx=bx+GOLD*(bx-ax);
fc=func(cx);
while (fb 》 fc) {
r=(bx-ax)*(fb-fc);
q=(bx-cx)*(fb-fa);
u=bx-((bx-cx)*q-(bx-ax)*r)/
(2.0*SIGN(MAX(fabs(q-r),TINY),q-r));
ulim=bx+GLIMIT*(cx-bx);
if ((bx-u)*(u-cx) 》 0.0) {
fu=func(u);
if (fu 《 fc) {
ax=bx;
bx=u;
fa=fb;
fb=fu;
return;
} else if (fu 》 fb) {
cx=u;
fc=fu;
return;
}
u=cx+GOLD*(cx-bx);
fu=func(u);
} else if ((cx-u)*(u-ulim) 》 0.0) {
fu=func(u);
if (fu 《 fc) {
shft3(bx,cx,u,cx+GOLD*(cx-bx));
shft3(fb,fc,fu,func(u));
}
} else if ((u-ulim)*(ulim-cx) 》= 0.0) {
u=ulim;
fu=func(u);
} else {
u=cx+GOLD*(cx-bx);
fu=func(u);
}
shft3(ax,bx,cx,u);
shft3(fa,fb,fc,fu);
}
}
inline double TOptimization::brent(double ax, double bx, double cx,
Ptrf f, double tol, double &xmin, int &flag)
{
flag = 1;
const double CGOLD=0.3819660;
const double ZEPS=1.0e-20;
int iter;
double a,b,d=0.0,etemp,fu,fv,fw,fx;
double p,q,r,tol1,tol2,u,v,w,x,xm;
double e=0.0;
a=(ax 《 cx ? ax : cx);
b=(ax 》 cx ? ax : cx);
x=w=v=bx;
fw=fv=fx=f(x);
for (iter=0;iter《ITMAX;iter++) {
xm=0.5*(a+b);
tol2=2.0*(tol1=tol*fabs(x)+ZEPS);
if (fabs(x-xm) 《= (tol2-0.5*(b-a))) {
xmin=x;
return fx;
}
if (fabs(e) 》 tol1) {
r=(x-w)*(fx-fv);
q=(x-v)*(fx-fw);
p=(x-v)*q-(x-w)*r;
q=2.0*(q-r);
if (q 》 0.0) p = -p;
q=fabs(q);
etemp=e;
e=d;
if (fabs(p) 》= fabs(0.5*q*etemp) || p 《= q*(a-x) || p 》= q*(b-x))
d=CGOLD*(e=(x 》= xm ? a-x : b-x));
else {
d=p/q;
u=x+d;
if (u-a 《 tol2 || b-u 《 tol2)
d=SIGN(tol1,xm-x);
}
} else {
d=CGOLD*(e=(x 》= xm ? a-x : b-x));
}
u=(fabs(d) 》= tol1 ? x+d : x+SIGN(tol1,d));
fu=f(u);
if (fu 《= fx) {
if (u 》= x) a=x; else b=x;
shft3(v,w,x,u);
shft3(fv,fw,fx,fu);
} else {
if (u 《 x) a=u; else b=u;
if (fu 《= fw || w == x) {
v=w;
w=u;
fv=fw;
fw=fu;
} else if (fu 《= fv || v == x || v == w) {
v=u;
fv=fu;
}
}
}
flag = 0;
xmin=x;
return fx;
}
inline void TOptimization::linmin(double *p, double *xi, double &fret, Reff func)
{
int j, flag;
const double TOL=1.0e-8;
double xx,xmin,fx,fb,fa,bx,ax;
int n=num;
ncom=n;
//pcom_p=new Vec_Dp(n);
//xicom_p=new Vec_Dp(n);
nrfunc=func;
//Vec_Dp &pcom=*pcom_p,&xicom=*xicom_p;
double *pcom = pcom_p, *xicom = xicom_p;
for (j=0;j《n;j++) {
pcom;
xicom;
}
ax=0.0;
xx=1.0;
mnbrak(ax,xx,bx,fa,fx,fb,f1dim);
fret=brent(ax,xx,bx,f1dim,TOL,xmin, flag);
for (j=0;j《n;j++) {
xi *= xmin;
p;
}
//delete xicom_p;
//delete pcom_p;
}
inline bool TOptimization::powell(double *p, double **xi, double ftol, int &iter,
double &fret, Reff func)
{
const int ITMAX=500;
const double TINY=1.0e-20;
int i,j,ibig;
double del,fp,fptt,t;
int n=num;
//Vec_Dp pt(n),ptt(n),xit(n);
double *pt, *ptt, *xit;
for(i = 0; i 《 n; ++i)
{
pt = new double ;
ptt = new double ;
xit = new double ;
}
fret=func(p);
for (j=0;j《n;j++) pt;
for (iter=0;;++iter) {
fp=fret;
ibig=0;
del=0.0;
for (i=0;i《n;i++) {
for (j=0;j《n;j++) xit;
fptt=fret;
linmin(p,xit,fret,func);
if (fptt-fret 》 del) {
del=fptt-fret;
ibig=i+1;
}
}
if (2.0*(fp-fret) 《= ftol*(fabs(fp)+fabs(fret))+TINY) {
delete pt;
delete ptt;
delete xit;
return true;
}
if (iter == ITMAX)
{
delete pt;
delete ptt;
delete xit;
return false;
//cerr《《"powell exceeding maximum iterations.";
}
for (j=0;j《n;j++) {
ptt;
xit;
pt;
}
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,fret,func);
for (j=0;j《n;j++) {
xi;
xi;
}
}
}
}
}
#endif

用matlab能求spearman秩相关系数吗

老外的例子,不需要看懂英文,有算例。
Statistics Toolbox
***隐藏网址***
Example:
》》 x = ’;
》》 y = ’;
》》 = spear(x,y)
》》 =spear(x,y)
r =
0.8250 -0.6000
t =
2.5285 -1.2990
p =
0.0855 0.2848

有谁用C语言实现过correl函数

很经典的 Numerical Recipes in C  里有。网上可以查到。

网页链接

例子:

void correl(data1,data2,n,ans)
float data1;
int n;
{
int no2,i;
float dum,*fft,*vector();
void twofft(),realft(),free_vector();

fft=vector(1,2*n);
twofft(data1,data2,fft,ans,n);
no2=n/2;
for (i=2;i《=n+2;i+=2) {
ans)/no2;
ans)/no2;
}
ans;
realft(ans,no2,-1);
free_vector(fft,1,2*n);
}

问题在于还要其他函数代码。你需要有统计数学的基本知识,才能运用和改进满足自己的项目需要。

关于本次numerical recipes和C语言*fp = *dp如何理解的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

numerical recipes(C语言*fp = *dp如何理解)

本文编辑:admin

更多文章:


1970年时间戳转换(时间格式如何转换十六进制的算法——这个的运行方法)

1970年时间戳转换(时间格式如何转换十六进制的算法——这个的运行方法)

大家好,关于1970年时间戳转换很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于时间格式如何转换十六进制的算法——这个的运行方法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望

2025年7月27日 04:45

c语言考试题搜题软件(计算机二级考试C语言用的什么软件)

c语言考试题搜题软件(计算机二级考试C语言用的什么软件)

“c语言考试题搜题软件”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看c语言考试题搜题软件(计算机二级考试C语言用的什么软件)!本文目录计算机二级考试C语言用的什么软件c语言题目不会在哪能搜到题库软件哪种最好用——好用的题库

2025年9月23日 13:00

杭州java培训哪家教育机构比较好(杭州学编程最好的机构)

杭州java培训哪家教育机构比较好(杭州学编程最好的机构)

各位老铁们,大家好,今天由我来为大家分享杭州java培训哪家教育机构比较好,以及杭州学编程最好的机构的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录

2025年8月8日 23:30

编辑器不支持粘贴本地图片(为什么我在淘宝中使用编辑器里,没法粘贴图片)

编辑器不支持粘贴本地图片(为什么我在淘宝中使用编辑器里,没法粘贴图片)

本篇文章给大家谈谈编辑器不支持粘贴本地图片,以及为什么我在淘宝中使用编辑器里,没法粘贴图片对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录为

2025年6月28日 14:30

vertex(vertex和point有什么区别)

vertex(vertex和point有什么区别)

各位老铁们,大家好,今天由我来为大家分享vertex,以及vertex和point有什么区别的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录vert

2025年6月29日 17:15

onclick可以执行两个方法吗(onclick事件重复执行(一次点击执行了两次))

onclick可以执行两个方法吗(onclick事件重复执行(一次点击执行了两次))

这篇文章给大家聊聊关于onclick可以执行两个方法吗,以及onclick事件重复执行(一次点击执行了两次)对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录onclick事件重复执行(一次点击执行了两次)asp中,按钮的onc

2026年2月13日 17:00

丰田荣放normal是什么意思(汽车上的normal是啥意思)

丰田荣放normal是什么意思(汽车上的normal是啥意思)

大家好,如果您还对丰田荣放normal是什么意思不太了解,没有关系,今天就由本站为大家分享丰田荣放normal是什么意思的知识,包括汽车上的normal是啥意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录汽车上

2026年8月14日 13:45

tensorflow怎么安装到python(安装tensorflow,安装python问题)

tensorflow怎么安装到python(安装tensorflow,安装python问题)

本篇文章给大家谈谈tensorflow怎么安装到python,以及安装tensorflow,安装python问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录安装tensorflow,安装python问题在Python3.6

2025年8月25日 16:00

postman请求webservice接口(用postman批量调用接口)

postman请求webservice接口(用postman批量调用接口)

各位老铁们,大家好,今天由我来为大家分享postman请求webservice接口,以及用postman批量调用接口的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们

2025年12月23日 17:00

js访问对象的方法(Js中什么是对象,什么是方法)

js访问对象的方法(Js中什么是对象,什么是方法)

大家好,关于js访问对象的方法很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Js中什么是对象,什么是方法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目

2025年9月22日 18:15

旅游类网页设计作品合集(户外网站设计风格有哪些)

旅游类网页设计作品合集(户外网站设计风格有哪些)

大家好,关于旅游类网页设计作品合集很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于户外网站设计风格有哪些的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录

2026年3月7日 11:00

序列有效性怎么做(excel 序列有效性)

序列有效性怎么做(excel 序列有效性)

大家好,今天小编来为大家解答以下的问题,关于序列有效性怎么做,excel 序列有效性这个很多人还不知道,现在让我们一起来看看吧!本文目录excel 序列有效性EXCEL中这样的数据有效性序列如何做excel进行数据有效性该怎样设置excel

2025年11月30日 05:15

expensive的词性变化(expensive、cheap、inexpensive的中文意思并在句中的用法,2、best与better中文意思并在句中的用法)

expensive的词性变化(expensive、cheap、inexpensive的中文意思并在句中的用法,2、best与better中文意思并在句中的用法)

本篇文章给大家谈谈expensive的词性变化,以及expensive、cheap、inexpensive的中文意思并在句中的用法,2、best与better中文意思并在句中的用法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目

2026年2月14日 06:45

网站建设时有哪些注意事项?创建网站的步骤

网站建设时有哪些注意事项?创建网站的步骤

今天给各位分享网站建设时有哪些注意事项的知识,其中也会对网站建设时有哪些注意事项进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录网站建设时有哪些注意事项创建网站的步骤制作网页常用的数据库与网站相关的数据库常用种

2026年4月23日 02:30

微信小程序怎么画类图?新手java类图怎么画

微信小程序怎么画类图?新手java类图怎么画

大家好,关于类图怎么画很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于微信小程序怎么画类图的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录微信小程序怎么

2025年6月23日 05:45

displaylink 芯片(displaylink需要显卡吗)

displaylink 芯片(displaylink需要显卡吗)

大家好,如果您还对displaylink 芯片不太了解,没有关系,今天就由本站为大家分享displaylink 芯片的知识,包括displaylink需要显卡吗的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录dis

2026年3月9日 11:30

对象数组的定义(什么是对象数组 什么是数组对象)

对象数组的定义(什么是对象数组 什么是数组对象)

大家好,关于对象数组的定义很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于什么是对象数组 什么是数组对象的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录

2025年12月25日 22:30

unity3d基础入门教程(unity3d需要什么基础)

unity3d基础入门教程(unity3d需要什么基础)

本篇文章给大家谈谈unity3d基础入门教程,以及unity3d需要什么基础对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录unity3d需要什么基础unity3D怎么入门unity3d需要什么基础学习Unity3D之前需要理

2026年3月21日 03:30

墨迹天气插件(vivo手机的桌面插件在哪里能找到,我安装墨迹天气,设置桌面时钟,都不知道装在哪)

墨迹天气插件(vivo手机的桌面插件在哪里能找到,我安装墨迹天气,设置桌面时钟,都不知道装在哪)

大家好,关于墨迹天气插件很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于vivo手机的桌面插件在哪里能找到,我安装墨迹天气,设置桌面时钟,都不知道装在哪的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题

2026年6月5日 02:15

itss资质证书(ITSS运维资质认证证书在招投标中有多大用处)

itss资质证书(ITSS运维资质认证证书在招投标中有多大用处)

本篇文章给大家谈谈itss资质证书,以及ITSS运维资质认证证书在招投标中有多大用处对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录ITSS运维资质认证证书在招投标中有多大用处申请各等级ITSS认证分别都需要哪些条件ITSS证

2025年9月18日 06:00

近期文章

本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索