Redian新闻
>
求助:downhill simplex minimization
avatar
求助:downhill simplex minimization# Computation - 科学计算
L*g
1
我在用numerical recipe的simplex方法找最小值,程序片段如下:
int ntmp;
float p[3][2], y[3];
float getfunc(float x[])
{...}
void amoeba(float **p, float y[], int ndim, float ftol,
float (*funk)(float []), int *nfunk);
p[0][0]=p[0][1]=0.5;
p[1][0]=p[0][0]-0.2;
p[1][1]=p[0][1]-0.2;
p[2][0]=p[0][0]+0.2;
p[2][1]=p[0][1]-0.2;
amoeba(p, y, 2, 1.0e-5, getfunc, &ntmp);
现在问题是amoeba子程序里不能读入p的初值。是不是p的类型有问题?多谢指教!
avatar
y*d
2
我没有看这个具体函数的情况;不过 numerical recipe 中似乎数组指标是从 1 开始
的,[0] 总是浪费着的

【在 L*******g 的大作中提到】
: 我在用numerical recipe的simplex方法找最小值,程序片段如下:
: int ntmp;
: float p[3][2], y[3];
: float getfunc(float x[])
: {...}
: void amoeba(float **p, float y[], int ndim, float ftol,
: float (*funk)(float []), int *nfunk);
: p[0][0]=p[0][1]=0.5;
: p[1][0]=p[0][0]-0.2;
: p[1][1]=p[0][1]-0.2;

avatar
L*g
3
我现在的问题是,amoeba子程序里面从一开始就根本读不出p的初始值。我想是不是我
的p的类型有问题。在一开始定义的是p[3][2],在amoeba里面是虚参是**p,然后内部
用到p[i][j]。指针的指针是什么意思我已经忘了,这种用法不知道对不对?

【在 y***d 的大作中提到】
: 我没有看这个具体函数的情况;不过 numerical recipe 中似乎数组指标是从 1 开始
: 的,[0] 总是浪费着的

avatar
y*d
4
O, 没有留意,p 的类型确实不对,amoeba 不是要一个 [][] 类型,而是要一个 ** 类
型;
比如你要一个 5x2 的数组,按照 nr in c 的参数习惯,你可以这样,
float a[5][3]; //第二个指标要多一个
float *(p[6]); //p 要多一个
p[1] = a[0];
p[2] = a[1];
...
p[5] = a[4];
要么你可以用 malloc 动态分配所有东西
y 也类似地要多一个
你试试管用不

【在 L*******g 的大作中提到】
: 我现在的问题是,amoeba子程序里面从一开始就根本读不出p的初始值。我想是不是我
: 的p的类型有问题。在一开始定义的是p[3][2],在amoeba里面是虚参是**p,然后内部
: 用到p[i][j]。指针的指针是什么意思我已经忘了,这种用法不知道对不对?

avatar
L*g
5
刚才编了一个小程序试了一下,发现不是nr的问题,而是这个p[][]和**p的问题。
如果子程序的虚参是p[3][2]而不是**p的话,就没有问题了。
那要是按照nr的子程序用**p的话,我前面的p应该怎么声明?谢谢。

【在 y***d 的大作中提到】
: O, 没有留意,p 的类型确实不对,amoeba 不是要一个 [][] 类型,而是要一个 ** 类
: 型;
: 比如你要一个 5x2 的数组,按照 nr in c 的参数习惯,你可以这样,
: float a[5][3]; //第二个指标要多一个
: float *(p[6]); //p 要多一个
: p[1] = a[0];
: p[2] = a[1];
: ...
: p[5] = a[4];
: 要么你可以用 malloc 动态分配所有东西

avatar
y*d
6
上文我详细说了

【在 L*******g 的大作中提到】
: 刚才编了一个小程序试了一下,发现不是nr的问题,而是这个p[][]和**p的问题。
: 如果子程序的虚参是p[3][2]而不是**p的话,就没有问题了。
: 那要是按照nr的子程序用**p的话,我前面的p应该怎么声明?谢谢。

avatar
L*g
7
oh. 现在看懂了,多谢!

【在 y***d 的大作中提到】
: 上文我详细说了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。