| 查看: 1829 | 回复: 2 | ||
[求助]
穷虫50金! MATLAB的fsolve初值问题 已有1人参与
|
|
大家好,请教一个问题 在下用fsolve解非线性方程组,可是初值稍微改变,解就跟着变,我取的初值的绝对误差应该已经小于1。 是不是fsolve这个算法不好,有没有什么办法优化呢? 先谢谢各位啦~ ![]() ![]() 算法见下function f = emuch(x) B = 0.003; C = 0.0027; H = x(1)+75*(B+C)+0.5*x(11); alpha1 = 0.5+6*x(10)-H; beta1 = H*(0.01-1)+(0.5+6*x(10))*(1+0.01); gamma1 = 0.01*H; alpha2 =0.15-x(10); beta2 = 0.3; gamma2 = x(10); alpha3 = 0.3+0.2*x(10)-x(8); beta3 = x(8)*(0.1-1)+(0.3+0.2*x(10))*(1+0.1); gamma3 = x(6)*0.1; Q = 0.01*(1-x(9))+2*x(9)+0.05*x(6); P = 0.1+0.25*x(6); R = 0.3*(20*B+2*C+x(1)+x(11)+0.067*x(10)); J = 0.64*(B+x(1)+0.5*x(11)+x(10)); f1 = 0.05*(2*gamma1/(beta1+sqrt(beta1^2-4*alpha1*gamma1)))-0.1*x(1); f2 = 0.002+0.05*(2*gamma2/(beta2+sqrt(beta2^2-4*alpha2*gamma2)))-Q*x(2); f3 = 0.006+0.02*(2*gamma1/(beta1+sqrt(beta1^2-4*alpha1*gamma1)))-P*x(3); f4 =0.02+0.1*(2*gamma3/(beta3+sqrt(beta3^2-4*alpha3*gamma3)))-(0.01+R/(0.05+x(4)))*x(4); f5 = 50*x(10)*x(12)-(0.06+Q+R/(0.05+x(4)))*x(5); f6 = 50*x(11)*x(12)-(0.06+P+R/(0.05+x(4)))*x(6); f7 = (0.005+0.06*x(8))-0.08*x(7); f8 = x(7)-2*x(8); f9 = (0.04+2*x(8))*(1-x(9))/(1.05-x(9))-J*x(9)/(0.05+x(9)); f10 = x(2)-x(5); f11 = x(3)-x(6); f12 = x(4)-x(5)-x(6); f = [f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12]; end |
» 猜你喜欢
论文终于录用啦!满足毕业条件了
已经有28人回复
假如你的研究生提出不合理要求
已经有4人回复
所感
已经有3人回复
要不要辞职读博?
已经有7人回复
不自信的我
已经有11人回复
北核录用
已经有3人回复
实验室接单子
已经有3人回复
磺酰氟产物,毕不了业了!
已经有8人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有10人回复
26申博(荧光探针方向,有机合成)
已经有4人回复
» 本主题相关价值贴推荐,对您同样有帮助:
matlab fsolve得出的解全部为复数解
已经有15人回复
求助 MATLAB-fsolve
已经有3人回复
使用matlab 中的fsolve 老提示出错
已经有4人回复
求助matlab---fsolve解非线性方程组
已经有6人回复
求助!matlab用fsolve函数求解非线性方程组的问题!
已经有19人回复
【求助】matlab中fsolve解的精度控制【已解决】
已经有4人回复
george1990
金虫 (小有名气)
- 应助: 11 (小学生)
- 金币: 1155.3
- 红花: 2
- 帖子: 130
- 在线: 75.3小时
- 虫号: 2142478
- 注册: 2012-11-22
- 性别: GG
- 专业: 机械动力学
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
冯且右11: 金币+10, ★有帮助, 谢谢啦~,不过这个的精度貌似也不太好,因为从f8显然能看出x7和x8 2014-06-29 18:20:53
感谢参与,应助指数 +1
冯且右11: 金币+10, ★有帮助, 谢谢啦~,不过这个的精度貌似也不太好,因为从f8显然能看出x7和x8 2014-06-29 18:20:53
|
楼主可以使用1stOpt这个软件来求解,相对于matlab求解此类方程时的,1stOpt省去了fsolve需要的初值的问题,而且精度一般都很高。 下面是程序: Parameter x(1:12); //Constant Constant B = 0.003; Constant C = 0.0027; //ConstStr ConstStr H = x1+75*(B+C)+0.5*x11; ConstStr alpha1 = 0.5+6*x10-H; ConstStr beta1 = H*(0.01-1)+(0.5+6*x10)*(1+0.01); ConstStr gamma1 = 0.01*H; ConstStr alpha2 =0.15-x10; ConstStr beta2 = 0.3; ConstStr gamma2 = x10; ConstStr alpha3 = 0.3+0.2*x10-x8; ConstStr beta3 = x8*(0.1-1)+(0.3+0.2*x10)*(1+0.1); ConstStr gamma3 = x6*0.1; ConstStr Q = 0.01*(1-x9)+2*x9+0.05*x6; ConstStr P = 0.1+0.25*x6; ConstStr R = 0.3*(20*B+2*C+x1+x11+0.067*x10); ConstStr J = 0.64*(B+x1+0.5*x11+x10); ConstStr f1 = 0.05*(2*gamma1/(beta1+sqrt(beta1^2-4*alpha1*gamma1)))-0.1*x1; ConstStr f2 = 0.002+0.05*(2*gamma2/(beta2+sqrt(beta2^2-4*alpha2*gamma2)))-Q*x2; ConstStr f3 = 0.006+0.02*(2*gamma1/(beta1+sqrt(beta1^2-4*alpha1*gamma1)))-P*x3; ConstStr f4 =0.02+0.1*(2*gamma2/(beta3+sqrt(beta3^2-4*alpha3*gamma3)))-(0.01+R/(0.05+x4))*x4; ConstStr f5 = 50*x10*x12-(0.06+Q+R/(0.05+x4))*x5; ConstStr f6 = 50*x11*x12-(0.06+P+R/(0.05+x4))*x6; ConstStr f7 = (0.005+0.06*x8)-0.08*x7; ConstStr f8 = x7-2*x8; ConstStr f9 = (0.04+2*x8)*(1-x9)/(1.05-x9)-J*x9/(0.05+x9); ConstStr f10 = x2-x5; ConstStr f11 = x3-x6; ConstStr f12 = x4-x5-x6; Function f1=0; f2=0; f3=0; f4=0; f5=0; f6=0; f7=0; f8=0; f9=0; f10=0; f11=0; f12=0; 求出来的x系列的值如下: x1: -0.00241408292469573 x2: -1.19963721286631E-5 x3: -0.00163511248524538 x4: -0.00164712704345382 x5: -1.19975380217937E-5 x6: -0.00163512908617766 x7: -7.04705240745422E-20 x8: 1.73072251386771E-18 x9: -0.00331312406855758 x10: -0.0122596988050143 x11: -1.65447541443873 x12: -0.000192121359156606 但是楼主注意,这个方程组好像答案不唯一,对于x是否还有别的约束条件呢,楼主可以在看看,这系列值只作为楼主参考。 |

2楼2014-06-28 23:47:34
3楼2014-06-29 18:47:11













回复此楼