24小时热门版块排行榜    

查看: 549  |  回复: 2

旖旎落下

金虫 (小有名气)

[求助] 求解非线性六元方程组,时间紧,自己来不及学了,麻烦大家帮忙,问题简单,悬赏多。 已有1人参与

用MATLAB 非线性求解,不会
>> syms qn dn dr pn pr cn cr sn sr hn hr t e a o A T u1 k Fn Fr zn zr
>>o=0.8;
>>a=0.1;
>>cn=0.4;
>>cr=0.2;
>>k=2;
>>T=1;
>>hn=0.1;
>>sn=0.1;
>>hr=0.05;
>>sr=0.05;
>>A=0.1;
>> dn=1-(pn-pr)/(1-o)>> dr=(o*pn-pr)/(o-o^2)
>> Fn=20*(qn-dn)
>> Fr=20*(qn*e*(a*t+1)-dr)
>> zn=qn-dn
>> zr=qn*e*(a*t+1)-dr
>> eq1='-(pn+hn-cn-sn)*Fn+pn+hn-cn-e*(a*t+1)*(pr+hr+A*(T-t)-cn-sr)*Fr+e*(a*t+1)*(pr+hr+A*(T-t)-cn)+u1*(1-e*(a*t+1))=0'
>> eq2='qn+(hn-hr)/(1-o)+(1+qn-(2*pn-pr-sn-cn+hn)/(1-o))*Fn+Fr*(pr+hr+A*(T-t)-cn-sr)/(1-o)+10*zn^2=0'
>> eq3='e*qn*(a*t+1)+(hr-o*hn)/(o-o^2)+Fn*(pn+hn-cn-sn)/(1-o)+Fr*(o*pn-2*pr+cn+sr-A*(T-t)-hr-o*(1-o)*e*qn*(a*t+1))/(o-o^2)+10*0.05^2-10*zr^2=0'
>> eq4='a*e*qn*(hr+pr+A*(T-2*t-1/a)-cn)+a*e*qn*(sr+cn-hr-A*(T-2*t-1/a)-pr)*Fr-A*(20*dr*zr+10*zr^2)-u1*qn*e*a=0'
>> eq5='qn*(a*t+1)*(pr+hr+A*(T-t)-cn)-qn*(a*t+1)*(pr+hr+A*(T-t)-cn-sr)*Fr-2*k*e-u1*a*t*qn=0'
>> eq6='qn*(1-e*(a*t+1))=0'
最终求解qn pn pr t e u1
是用fsolve算吗,初始值不知道怎么赋,大致推迟大概是0.5 0.5 0.5 0.5 0.5
谢谢
回复此楼

» 猜你喜欢

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

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

cobrasq

金虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
旖旎落下: 金币+50, ★★★很有帮助, 好。 2014-01-09 10:23:14
以下是如何求数值解。注意,为了简化,让优化工具箱自行计算方程组的数值一阶微分(雅可比矩阵)和二阶微分(Hessian矩阵)。如果结果不理想,可以先调节 options 中的参数。如果还不理想,可以利用符号运算工具箱求出雅可比矩阵和 Hessian 矩阵。

1. 建立一个函数文件 func1.m

function y=func1(x)
%未知量
qn=x(1);
pn=x(2);
pr=x(3);
t=x(4);
e=x(5);
u1=x(6);
%常量
o=0.8;
a=0.1;
cn=0.4;
cr=0.2;
k=2;
T=1;
hn=0.1;
sn=0.1;
hr=0.05;
sr=0.05;
A=0.1;
%简化表达式
dn=1-(pn-pr)/(1-o);
dr=(o*pn-pr)/(o-o^2);
Fn=20*(qn-dn);
Fr=20*(qn*e*(a*t+1)-dr);
zn=qn-dn;
zr=qn*e*(a*t+1)-dr;

%非线性方程组
y = [-(pn+hn-cn-sn)*Fn+pn+hn-cn-e*(a*t+1)*(pr+hr+A*(T-t)-cn-sr)*Fr+e*(a*t+1)*(pr+hr+A*(T-t)-cn)+u1*(1-e*(a*t+1));
qn+(hn-hr)/(1-o)+(1+qn-(2*pn-pr-sn-cn+hn)/(1-o))*Fn+Fr*(pr+hr+A*(T-t)-cn-sr)/(1-o)+10*zn^2;
e*qn*(a*t+1)+(hr-o*hn)/(o-o^2)+Fn*(pn+hn-cn-sn)/(1-o)+Fr*(o*pn-2*pr+cn+sr-A*(T-t)-hr-o*(1-o)*e*qn*(a*t+1))/(o-o^2)+10*0.05^2-10*zr^2;
a*e*qn*(hr+pr+A*(T-2*t-1/a)-cn)+a*e*qn*(sr+cn-hr-A*(T-2*t-1/a)-pr)*Fr-A*(20*dr*zr+10*zr^2)-u1*qn*e*a;
qn*(a*t+1)*(pr+hr+A*(T-t)-cn)-qn*(a*t+1)*(pr+hr+A*(T-t)-cn-sr)*Fr-2*k*e-u1*a*t*qn;
qn*(1-e*(a*t+1))];

2. 建立一个主程序 solve_6_unknowns.m

%清屏,清工作区
clc
clear all

%设置优化算法参数
maxiter = 20000;
maxfuneval = length(x0)*maxiter;
options = optimset('Display‘, ’off',...
    'GradObj', 'off',...
    'Hessian', 'off',...
    'TolX', 1e-6,...
    'TolFun', 1e-6,...
    'MaxIter', maxiter,...
    'MaxFunEvals', maxfuneval);

%设置初始值
x0 = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
%调用优化函数
[x, fval, exitflag, output] = fsolve(@func1, x0, options);

%取结果
qn=x(1);
pn=x(2);
pr=x(3);
t=x(4);
e=x(5);
u1=x(6);

%显示结果
disp(['Iterations: ',num2str(output.iterations)])
disp(['Func Evals: ', num2str(output.funcCount)])
disp(['Algorithm: ',output.algorithm])
disp(['exit flag = ',num2str(exitflag)])
disp(['error = ( ',num2str(fval','%-15.6e'),' )'])
disp(['qn = ( ',num2str(qn,'%-15.6f'),' )'])
disp(['pn = ( ',num2str(pn,'%-15.6f'),' )'])
disp(['pr = ( ',num2str(pr,'%-15.6f'),' )'])
disp(['t = ( ',num2str(t,'%-15.6f'),' )'])
disp(['e = ( ',num2str(e,'%-15.6f'),' )'])
disp(['u1 = ( ',num2str(u1,'%-15.6f'),' )'])
2楼2014-01-08 22:57:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

旖旎落下

金虫 (小有名气)

引用回帖:
2楼: Originally posted by cobrasq at 2014-01-08 22:57:57
以下是如何求数值解。注意,为了简化,让优化工具箱自行计算方程组的数值一阶微分(雅可比矩阵)和二阶微分(Hessian矩阵)。如果结果不理想,可以先调节 options 中的参数。如果还不理想,可以利用符号运算工具箱求 ...

最终的结果是什么?
3楼2014-01-09 10:23:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 旖旎落下 的主题更新
信息提示
请填处理意见