楼主: lingfei2mm
6662 18

[高手进]求助!用MATLAB计算非线性方程组,编程后输出结果显示有错,请各位高手帮帮忙 [推广有奖]

11
epoh 发表于 2010-3-14 19:56:06
x(1),x(2)差异很大.
global a
a=[851169606 1059209620 0.514241];
x0=[0.01;100000000];
options=optimset('Display','iter','MaxFunEvals',15000,'MaxIter',5000);
[x,fval]=fsolve(@myfun,x0,options);
format long e
x
fval
format
%%%
%%%
5000      14951          41.344        133.887      1.55e+004             134
Maximum number of iterations reached:
increase options.MaxIter.
x =
    8.516556446669145e+008
    6.942190255968392e+000
fval =
    1.714000699575990e-002
    6.429904095747514e+000

12
lingfei2mm 发表于 2010-3-14 20:14:45
太谢谢你了!!!你太厉害了,真的非常感谢了,帮我解决了一个大难题!!这个结果就是我想要的,以后多多指教哦!!!

13
lingfei2mm 发表于 2010-3-14 20:37:34
你好!!再一次的打扰你了,好像上面程序中x(2)的值不是很正确呢,算出来应该得到的是个小数才对,好像大了点,(*^__^*) 嘻嘻……,请指点一下

14
dingd 发表于 2010-3-14 22:32:32
用1stOpt,不需初值,代码:

Constant a=[851169606,1059209620,0.514241];
Function a1-x1*normalcdf((ln(x1/a2)+(0.025+x2*x2)/2)/x2)+a2*exp(-0.025)*normalcdf((ln(x1/a2)+(0.025-x2*x2)/2)/x2);
         normalcdf((ln(x1/a2)+(0.025+x2*x2)/2)/x2)*x1*x2/a1-a3;

结果:
x1: 1883720899.28348
x2: 0.23333732568053

15
lingfei2mm 发表于 2010-3-15 10:42:27
谢谢哦!我想问下这个软件具体应该怎么操作呢?我没用过

16
lingfei2mm 发表于 2010-3-15 12:21:17
哈哈!我会用了,我想请教你一个问题,就是在1stopt中怎么把ecxel中的数据变化成矩阵形式??

17
aris_zzy 发表于 2010-3-15 14:06:56
KMV方程组,如果你这样编程 会使得你的结果与初始值关系巨大,你可以看我那边《金融数量matlab》书上的程序,使用了一个数值技巧使得初始值基本不需要选择
http://www.ariszheng.com

18
windflakes 发表于 2011-9-11 17:21:59
请问楼上那本书的全名是什么啊?
我在网上找不到呢,我也需要KMV模型编程。

19
yqx1985 发表于 2011-11-25 10:27:23
Optimizer appears to be converging to a minimum that is not a root:
Sum of squares of the function values is > sqrt(options.TolFun).
Try again with a new starting point.

如果根据那句话的意思,你仅仅换个初始值估计也没那么容易解出正确结果,它的意思说计算除了最小值,不过是局部最小值,如果你知道真实结果的范围,可以考虑在真实值附近设定初始值,否则结合全局搜索可能是一个不错的选择

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-16 20:27