huajinli
幼苗
共回答了18个问题采纳率:77.8% 举报
鉴于你是初学我把方程组的M文件给你写上(这里需要注意的是将变量C1,C2,C3用数组的形式表示,即C(1),C(2),C(3)):
function f=myfun(C)
epsilon=[0.26644,0.46409,0.63554,0.86384];
sigama=[107.72771,96.68265,96.06903,100.47939];
f(1)=exp(-C(1)*epsilon(1)+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))...
/exp(-C(1)*epsilon(2)+epsilon(2)^C(2))/(1-exp(C(3)*epsilon(2)))-sigama(1)/sigama(2);
f(2)=exp(-C(1)*epsilon(1)+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))...
/exp(-C(1)*epsilon(3)+epsilon(3)^C(2))/(1-exp(C(3)*epsilon(3)))-sigama(1)/sigama(3);
f(3)=exp(-C(1)*epsilon(1)+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))...
/exp(-C(1)*epsilon(4)+epsilon(4)^C(2))/(1-exp(C(3)*epsilon(4)))-sigama(1)/sigama(4);
命令窗口:
fsolve(@myfun,rand(1,3))%这里的rand(1,3)表示随即给C1,C2,C3赋初始值,当然如果你知道C1,C2,C3的大概范围更好,直接把处值取到这个范围内.
结果:
Optimization terminated:first-order optimality is less than options.TolFun.
ans =
3.4807 -0.5279 4.3257
上面的ans中得到的分别是C1,C2,C3的一个解,这里需要注意的是对于一般的非线性方程组,因为我们一般情况下是不知道方程到底有几个解,因此这里只能说是得到方程组的一个解,对于给定的不同初始值,求得的结果可能是不一样的,即收敛到不同的点.另外对于fsolve这个函数里面有一个控制变量optimset这个东西包含的内容很多(在求解较为复杂的问题时会用到),在此我就不做介绍了,有机会的话自己好好研究研究.
1年前
追问
7
油炸更健康
举报
非常感谢你的热心解答,请你看一看这个程序是不是正确的呢,算出的结果带入方程验算是没问题的,这个方程没有唯一解吗?
举报
huajinli
3Q,这个程序除了方程可能写错外,没有任何问题,至于有没有唯一解我没这个能力回答!
举报
huajinli
不好意思我的方程写错了,你的是对的 function f=myfun(C) epsilon=[0.26644,0.46409,0.63554,0.86384]; sigama=[107.72771,96.68265,96.06903,100.47939]; f(1)=(exp(-C(1)*epsilon(1))+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))... /(exp(-C(1)*epsilon(2))+epsilon(2)^C(2))/(1-exp(C(3)*epsilon(2)))-sigama(1)/sigama(2); f(2)=(exp(-C(1)*epsilon(1))+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))... /(exp(-C(1)*epsilon(3))+epsilon(3)^C(2))/(1-exp(C(3)*epsilon(3)))-sigama(1)/sigama(3); f(3)=(exp(-C(1)*epsilon(1))+epsilon(1)^C(2))*(1-exp(C(3)*epsilon(1)))... /(exp(-C(1)*epsilon(4))+epsilon(4)^C(2))/(1-exp(C(3)*epsilon(4)))-sigama(1)/sigama(4); fsolve(@myfun,rand(1,3)) Optimization terminated: first-order optimality is less than options.TolFun. ans = 1.6912 -1.5898 1.5521