Re: [問題] 迴圈中多組答案選出Max

作者: kevinjean (Kevin)   2015-12-07 12:13:36
謝謝celestialgod!
簡單來說,我有三個公式想要記算,分別是S1, F2, A2的算式
但各自公式成立之前都有一些不一樣的限制式需要被滿足,
如果限制式有 > 0才計算數值,不然就顯示0。
所以,
1. 在S1的前面應該要有:
if......(S1成立的條件式)
S1 = ......
else
S1 = 0
if......(F2成立的條件式)
F2 = ......
else
F2 = 0
if......(A2成立的條件式)
A2 = ......
else
A2 = 0
2. 這樣一輪下來應該就會有S1, F2, A2的值 (有數字或是0)
接著去比較在b = 0, D = 0.1的狀況下哪個是Max並且print name出來
然後迴圈後在b = 0.1, D = 0.1的狀況下再比較一次
...經過很多輪
然後迴圈後在b = 1, D = 1的狀況下再比較一次
3. 最後希望可以整理出在不同b跟D的組合下,什麼時候S1, F2, A2會是max
然後想要畫出一個圖http://i.imgur.com/NNTHMT9.jpg
像右邊圖,在不同的組合下面max的值是哪一個
不好意思再麻煩各位幫我解惑了 > <
謝謝!
※ 引述《celestialgod (天)》之銘言:
有些問題看得不是很懂...
有問題推文問再回你吧~"~
q=0.9;
a=0.9;
c0=0.2;
c1=0.01;
X=2^(1/2);
[b, D] = meshgrid(0:0.1:1, 0.1:0.1:1);
S1 = (q*(a+b(:))-2*c0).^2/(16*(q-c1));
F2 = (q^2*(2*D(:) + a - b(:)) .* (a*q - 2*c0 + b(:)*q))/(16*(c1 - q).^2);
A2 = ((X*q*(q*(a + b(:))-2*c0)).^2)/((4*(q-c1)).^3);
Y = [S1, F2, A2];
Y(q - b(:) > 0 & q*(q + b(:)) - 2*c0 > 0) = 0;
if q - c1 <= 0
Y(:) = 0;
end
[Z, code] = max(Y, [], 2);
names = {'S1', 'F2', 'A2'};
maxNames = arrayfun(@(x) names{x}, code, 'uni', false);
儲存的話,要同時存chr跟數字的話,就用open跟fprintf解決吧,網路上很多
存數字就用dlmwrite就好
※ 引述《kevinjean (Kevin)》之銘言:
: 各位版上前輩好,
: 我想要請教幾個問題希望大家可以幫助我 > <
:
作者: celestialgod (天)   2015-12-07 12:17:00
1. 計算後,我再取條件等於0,不是一樣?如果你要個別條件,在個別加就好2. 我不知道你在寫什麼...
作者: kevinjean (Kevin)   2015-12-07 12:21:00
例如(b,D,max)=(0,0.1,S1);(0.1,0.1,S1);(0.2,0.1,S1)(0.3,0.1,S1);...;(0.5,0.5,A2);(0.6,0.5,A2);......;(1,0.9,F2);(1,1,F2) 這樣的輸出
作者: celestialgod (天)   2015-12-07 12:32:00
所以我前面不就說可以用fprintf做?前面程式OUTPUT是錯的,你也沒發現...你到底有沒有跑過我寫的程式,再來問問題?
作者: kevinjean (Kevin)   2015-12-07 13:19:00
有我有跑過了,謝謝!目前先看到的狀況就是有一連串S1, F2, A2。我還沒有先對output的內容,我會再研究一下,謝謝celestialgod
作者: celestialgod (天)   2015-12-07 13:23:00
所以output應該都給你了,我不知道你後面要幹嘛就是
作者: sunev (Veritas)   2015-12-07 13:38:00
限制式只限制b , 解出來剛好是一個開區間。S1 F2 A2又剛好只是b D的二次式,應該可以手算才是

Links booklink

Contact Us: admin [ a t ] ucptt.com