作者qqqidqqq (newworld)
看板MATLAB
標題Re: [問題]解非線性方程式.....三個函數
時間Thu Dec 8 01:24:23 2011
此題可以用fsolve來解喔~~
先設函數:
function y=prac1(x)
y=zeros(1,3);
y(1) =
x(1)*(1-x(2)*exp(-2600/x(3))-exp(-2600/x(3))...
+x(2)*exp(-3000/x(3))*exp(137.6/x(3)))-873;
y(2) =
x(1)*(1-x(2)*exp(-1600/x(3))-exp(-1600/x(3))...
+x(2)*exp(-3000/x(3))*exp(137.6/x(3)))-555;
y(3) =
x(1)*(1-x(2)*exp(-800/x(3))-exp(-800/x(3))...
+x(2)*exp(-3000/x(3))*exp(137.6/x(3)))-91;
接著來解~
clear
clc
x01=[1,1,1];
a1=fsolve('prac1',x01)
y1=prac1(a1)
x02=[100,100,100];
a2=fsolve('prac1',x02)
y2=prac1(a2)
x03=[10000,10000,10000];
a3=fsolve('prac1',x03)
y3=prac1(a3)
% fsolve的用法是 fsolve('待解函數',初始值)
(*初始值可任意代 但最好盡量靠近答案(mo,f,T1) 就是要你先猜大概的(mo,f,T1)
若與真實答案的級數差太多
則可能找不到你要的解)
x01,x02,x03就是我設的三種初始值
而a1,a2,a3就是各解出的(mo,f,T1)值
y1,y2,y3為各代回function 看這三個方程式的值是否都等於0
來判斷解出的答案是否是我們要的 若與0差距太多 則可能是初始值設的離實際值太遠
讓我們來看看結果如何吧~~
a1 =
506.3333 1.0000 1.0000
y1 =
-366.6667 -48.6667 415.3333
______________________________________
a2 =
1.0e+003 *
1.0833 0.0008 1.4808
y2 =
1.0e-010 *
-0.1489 0.4025 0.6632
_____________________________________
a3 =
1.0e+003 *
1.0833 0.0008 1.4808
y3 =
1.0e-010 *
0.5537 0.5082 -0.5024
______________________________________
可看出a2和a3一樣 而y2和y3也確實趨近於0
至於a1的值和a2,a3差蠻多的 但也有可能是另一組解
不過y1就不趨近於0了 可見a1這組不是我們要的答案!
所以 此題之 mo=1083.3 f=0.8 T1=1480.8
呼~~~ 解完囉~~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.14.166
1F:推 marco110232:哇靠....完全正確!!!高手~~~請受小弟一拜!! 12/08 01:27
2F:→ qqqidqqq:一起加油吧~ 在matlab上我也是個新手 要學的還好多呢!! 12/08 01:35
3F:推 Raymond0710:用心推,所以用symbolic解真的很慢。 12/08 04:27