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

看板MATLAB作者 (天)時間9年前 (2015/12/07 11:15), 9年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
有些問題看得不是很懂... 有問題推文問再回你吧~"~ q=0.9; a=0.9; c0=0.2; c1=0.01; X=2^(1/2); [b, D] = meshgrid(0:0.1:q, 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*(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 13:06:39
文章代碼(AID): #1MPFdY67 (MATLAB)
文章代碼(AID): #1MPFdY67 (MATLAB)