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

看板MATLAB作者 (Kevin)時間9年前 (2015/12/07 12:13), 9年前編輯推噓1(1014)
留言15則, 3人參與, 最新討論串3/3 (看更多)
謝謝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)》之銘言: : 各位版上前輩好, : 我想要請教幾個問題希望大家可以幫助我 > < : --- : q=0.9, a=0.9, c0=0.2, c1=0.01, X=2^(1/2) : for b=0:0.1:1 : for D=0.1:0.1:1 : if q - b > 0 & q - c1 > 0 & q*(q + b) - 2*c0 > 0 : 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) : else : S1 = 0 : F2 = 0 : A2 = 0 : end : end : Y = [S1 F2 A2] : Z = max(Y) : fprintf('Max = \n',Z) : end : --- : 總而言之我希望調控b跟D分別跑出一組一組的S1, F2, A2, : 並且在每一組內找出這三個中最大的值,顯示對應的代號 : 所以應該會有10 x 9 = 90組Max的值, : 可能像是 : Max = S1 : Max = S1 : Max = S1 : Max = S1 : Max = F2 : Max = F2 : Max = A2 : Max = A2 : Max = A2 : Max = A2 : Max = A2 : Max = A2 : ... : 目前想請大家幫的忙有幾個: : 1. 我無法在每一個b - D組合得到一個Max值 : 跑完之後他會先出現很多組S1, F2, A2, : 然後在最後一組之後出現: : Y = [xxx yyy zzz] : Z = yyy (假設是最大值) : 而不是每一筆資料都是一個Max值 : 2. 我無法得到代號,而是數值 : 我知道很直覺的我的矩陣裡面放的是S1, F2, A2計算出來的值, : 但我應該要怎麼寫才可以讓Max出來的是代號呢? : 3. 我無法儲存最後得到的Max值 : 假設順利得到了90組Max值,我要怎麼儲存他? : 因為目前好像就是會在Matlab出現90行的文字, : 但我希望可以把它儲存為 : (b1, D1, Max1) : (b2, D1, Max2) : (b3, D1, Max3) : ... : 再請大家幫助我了,謝謝各位 > < -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.87 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1449458146.A.187.html ※ 編輯: celestialgod (140.109.74.87), 12/07/2015 11:18:04 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.250.42 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1449461619.A.74F.html ※ 編輯: kevinjean (140.113.250.42), 12/07/2015 12:14:06

12/07 12:17, , 1F
1. 計算後,我再取條件等於0,不是一樣?
12/07 12:17, 1F

12/07 12:18, , 2F
如果你要個別條件,在個別加就好
12/07 12:18, 2F

12/07 12:18, , 3F
2. 我不知道你在寫什麼...
12/07 12:18, 3F

12/07 12:21, , 4F
例如(b,D,max)=(0,0.1,S1);(0.1,0.1,S1);(0.2,0.1,S1)
12/07 12:21, 4F

12/07 12:21, , 5F
(0.3,0.1,S1);...;(0.5,0.5,A2);(0.6,0.5,A2);...
12/07 12:21, 5F

12/07 12:22, , 6F
...;(1,0.9,F2);(1,1,F2) 這樣的輸出
12/07 12:22, 6F

12/07 12:32, , 7F
所以我前面不就說可以用fprintf做?
12/07 12:32, 7F

12/07 13:07, , 8F
前面程式OUTPUT是錯的,你也沒發現...
12/07 13:07, 8F

12/07 13:07, , 9F
你到底有沒有跑過我寫的程式,再來問問題?
12/07 13:07, 9F

12/07 13:19, , 10F
有我有跑過了,謝謝!目前先看到的狀況就是有一連串
12/07 13:19, 10F

12/07 13:19, , 11F
S1, F2, A2。我還沒有先對output的內容,我會再研究
12/07 13:19, 11F

12/07 13:20, , 12F
一下,謝謝celestialgod
12/07 13:20, 12F

12/07 13:23, , 13F
所以output應該都給你了,我不知道你後面要幹嘛就是
12/07 13:23, 13F

12/07 13:38, , 14F
限制式只限制b , 解出來剛好是一個開區間。
12/07 13:38, 14F

12/07 13:39, , 15F
S1 F2 A2又剛好只是b D的二次式,應該可以手算才是
12/07 13:39, 15F
文章代碼(AID): #1MPGTpTF (MATLAB)
文章代碼(AID): #1MPGTpTF (MATLAB)