| 查看: 1850 | 回复: 3 | ||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | ||
poko宝贝木虫 (正式写手)
|
[求助]
求助!!!使用 Numerical recipes in C++求解非线性方程组 已有1人参与
|
|
|
Golbally Convergent for Nonlinear Equation 调用的newt函数。没有学过指针函数什么的,照葫芦画瓢写的很烂。编译提示错误是: newt.cpp(22): warning #159: declaration is incompatible with previous "fmin" (declared at line 342 of "/usr/include/bits/mathcalls.h" float fmin(float x[]); newt.cpp(38): internal error: assertion failed at: "shared/edgcpfe/lower_c99.c", line 2870 f=fmin(x); ^ code如下,其中void *vecfunc(int n,float x[],float fvec[])是很复杂的非线性方程组,这里为了简洁易见,简单列了几个方程,可能解不出来。 Numerical recipes in C++书里格式是 void (*vecfunc)(int n,float x[],float fvec[]),但是调用的时候老出错,就把括号去了。 整个调用的函数包已经打包在附件,急用,请大神帮忙。 ////////////////////////////////////////////////// #include <math.h> #define NRANSI #include "nrutil.h" #include "nrutil.cpp" #include "newt.cpp" #include "fdjac.cpp" #include "fmin.cpp" #include "lnsrch.cpp" #include "lubksb.cpp" #include "ludcmp.cpp" void *vecfunc(int n, float x[], float fvec[]); int main() { int n; n=5; float x[n]; float *fvec; int *check; check=ivector(1,n); fvec=vector(1,n); newt(x, n, check, vecfunc); free_ivector(check,1,n); free_vector(fvec,1,n); return 1; } void *vecfunc(int n,float x[],float fvec[]) { //float x[5]; //float fvec[5]; fvec[1]=x[1]*x[2]+x[5]-1.0; fvec[2]=x[1]+x[2]-x[3]; fvec[3]=x[1]*x[4]+x[2]+x[3]-10.0; fvec[4]=x[1]+x[2]+x[3]-1.0; fvec[5]=x[4]+x[5]-1.0; } |
» 本帖附件资源列表
-
欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com - 附件 1 : Golbally_Convergent__for_Nonlinear_Equation.zip
2017-02-09 13:21:52, 12.55 K
» 猜你喜欢
职称评审没过,求安慰
已经有41人回复
回收溶剂求助
已经有7人回复
硝基苯如何除去
已经有3人回复
A期刊撤稿
已经有4人回复
垃圾破二本职称评审标准
已经有17人回复
投稿Elsevier的Neoplasia杂志,到最后选publishing options时页面空白,不能完成投稿
已经有22人回复
EST投稿状态问题
已经有7人回复
毕业后当辅导员了,天天各种学生超烦
已经有4人回复
求助文献
已经有3人回复
三无产品还有机会吗
已经有6人回复
cob
木虫 (正式写手)
- 应助: 29 (小学生)
- 金币: 1926.1
- 散金: 666
- 红花: 4
- 帖子: 443
- 在线: 320.8小时
- 虫号: 348545
- 注册: 2007-04-18
- 性别: GG
- 专业: 机械动力学
3楼2017-02-10 08:50:12
lijf517
木虫 (小有名气)
- 应助: 39 (小学生)
- 金币: 3391.9
- 红花: 14
- 帖子: 293
- 在线: 390.9小时
- 虫号: 2249203
- 注册: 2013-01-18
- 性别: GG
- 专业: 力学
| 这些代码虽然文件后缀是cpp, 但是和C++一毛钱关系都没有,是彻头彻尾的C语言写的,连C++里最基本的STL模板库都不用。如果你是新手刚开始学习数值计算,还是建议使用C++语言,无论是前期编程还是后期维护都比C语言方便的多。关于你的代码, 看起来像是用牛顿迭代法求解非线性方程组的。x应该是位置向量,在迭代前应该赋予初值的。你的代码定义了数组x后没初始化就直接用了。可能有的编译器会自动把x初始化为0, 但这不是个好的变成习惯。还有,在C/C++语言里,数组的索引是从0开始的,你定义的数组大小为5,所以在fvec里只能使用0~4的下标,所以x[5]这种写法是错误的,内存越界了。 |
2楼2017-02-09 22:04:55
poko宝贝
木虫 (正式写手)
- 应助: 0 (幼儿园)
- 金币: 1624.1
- 散金: 100
- 帖子: 455
- 在线: 29.6小时
- 虫号: 485268
- 注册: 2007-12-27
- 性别: MM
- 专业: 高分子物理与高分子物理化
4楼2017-02-13 10:28:02













回复此楼