chinapenguin 发表于 2009-2-27 00:06

请大家看看这个方程组用solve为什么解不出来啊

我用solve函数,6个方程,6个未知数,为什么解不出来呢。请大家指点一下吧。我还试过fsolve,也不行。是不是需要数值方法呢?菜鸟一只,请多包涵。谢谢!
syms A b1 b2 g1 g2 R0
S1=g1*(log((R0+A)*exp(b1*16000)-A)-log(R0))/(b1*(R0+A))-1000;
S2=g2*(log((R0+A)*exp(b2*44)-A)-log(R0))/(b2*(R0+A))-1000;
S3=g2*(log((R0+A)*exp(b2*22)-A)-log(R0))/(b2*(R0+A))+g1*(log((R0+A)*exp(b2*22+b1*3781)-A)-log((R0+A)*exp(b2*22)-A))/(b1*(R0+A))-1000;
S4=g1*(log((R0+A)*exp(b1*50)-A)-log(R0))/(b1*(R0+A))+g2*(log((R0+A)*exp(b1*50+b2*86)-A)-log((R0+A)*exp(b1*50)-A))/(b2*(R0+A))-1000;
S5=g1*(log((R0+A)*exp(b1*150)-A)-log(R0))/(b1*(R0+A))+g2*(log((R0+A)*exp(b1*150+b2*84)-A)-log((R0+A)*exp(b1*84)-A))/(b2*(R0+A))-1000;
S6=g1*(log((R0+A)*exp(b1*200)-A)-log(R0))/(b1*(R0+A))+g2*(log((R0+A)*exp(b1*200+b2*116)-A)-log((R0+A)*exp(b1*116)-A))/(b2*(R0+A))-1000;
result=solve(S1,S2, S3, S4, S5, S6,'A,b1,b2,g1,g2,R0');

[ 本帖最后由 ChaChing 于 2009-2-27 10:07 编辑 ]

friendchj 发表于 2009-2-27 10:13

用fsolve可以解,但和初值的选择有很大关系,楼主如果知道各个参量的大致范围就容易解了。

ChaChing 发表于 2009-2-27 10:24

回复 楼主 chinapenguin 的帖子

我怎可跑出答案? v5.3版本
?syms A b1 b2 g1 g2 R0
...
result=solve(S1,S2, S3, S4, S5, S6,'A,b1,b2,g1,g2,R0');
?aa=double(cell2mat(struct2cell(result)))

aa =
-4.7699e+000
8.0748e+000
-4.8742e+000
-4.6475e+000
3.0600e+004
2.9177e+004

friendchj 发表于 2009-2-27 11:13

A=-4.7699e+000
b1= 8.0748e+000
b2=-4.8742e+000
g1=-4.6475e+000
g2= 3.0600e+004
R0=2.9177e+004
是这样对应吗

dingd 发表于 2009-2-27 14:08

用1stOpt试了一下,似乎不止一组解:

a: -0.554726189316617
b1: -2.2189975646296
b2: -96.0866384279688
g1: 3317.94513551457
g2: 143673.070958611
r0: 3.15284091657357

friendchj 发表于 2009-2-27 14:57

回复 5楼 dingd 的帖子

看来1stOpt在这方面挺有优势的,有楼上的初值x0=[-0.5;-2.2;-96.0;3317.9;143673.0;3.15];用fsolve进行求解,过程如下:


                                       Norm of      First-order   Trust-region
IterationFunc-count   f(x)          step         optimality    radius
   0          7         12127.6                     1.99e+005               1
   1         14         38.2904      0.0535667      9.29e+003               1
   2         21         7.73775   0.00300126      1.26e+003               1
   3         28         1.23234   0.00491511      1.69e+003               1
   4         35      0.191946    0.000555869            198               1
   5         42       0.0281542    0.000784561            257               1
   6         49      0.00411379   8.45516e-005         28.9               1
   7         56   0.000595228    0.000115097         37.4               1
   8         63    8.60752e-005    1.2306e-005         4.18               1
   9         70    1.24293e-005   1.66539e-005            5.4               1
    10         77    1.79464e-006   1.77852e-006          0.604               1
    11         84    2.59071e-007   2.40483e-006         0.78               1
    12         91    3.73986e-008   2.56776e-007         0.0871               1
    13         98    5.39854e-009   3.47157e-007          0.113               1
    14      105    7.79287e-010   3.70668e-008         0.0126               1
    15      112   1.1249e-010   5.01127e-008         0.0163               1
    16      119   1.6238e-011   5.35062e-009      0.00182               1
    17      126    2.34396e-012    7.2338e-009      0.00235               1
    18      133    3.38349e-013   7.72363e-010       0.000262               1
    19      140    4.88419e-014   1.04419e-009       0.000339               1
Optimization terminated: relative function value changing by less
than max(options.TolFun^2,eps) and sum-of-squares of function
values is less than sqrt(options.TolFun).
>> vpa(res,10)

ans =

-.5522800582
-2.216976596
-96.00038563
3317.899989
143673.0000
3.165194150
我采用solve求解,一直busy。即使求解出,可能也需要好长时间。

chinapenguin 发表于 2009-3-3 12:04

真的非常谢谢大家的帮助啊!!我用了1st Opt, 得到了很多组解。并且在1st Opt里面用了约束条件,效果也不错。呵呵,以后就用1st Opt偷懒了。但是有一点遗憾的是:用1st Opt求的解,总有一个方程error比较大,其中大概是第三个方程,总是误差在10%的样子,其他方程就基本没有误差。

[ 本帖最后由 chinapenguin 于 2009-3-3 12:07 编辑 ]

程瑞岩 发表于 2012-5-28 11:49

书到用时方恨少啊。{:{19}:}
页: [1]
查看完整版本: 请大家看看这个方程组用solve为什么解不出来啊