24小时热门版块排行榜    

查看: 1831  |  回复: 2

冯且右11

铜虫 (初入文坛)

[求助] 穷虫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
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

george1990

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

冯且右11

铜虫 (初入文坛)

抱歉啊!!! f10 ,f11 ,f12应该改去掉 ,改为:

x10=x2-x5
x11=x3-x6
x12=x4-x5-x6
3楼2014-06-29 18:47:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 冯且右11 的主题更新
信息提示
请填处理意见