Re: [問題] 判斷遞減值中最大的值和位置?已回收

看板MATLAB作者 (失ゎれた彩畫)時間15年前 (2010/06/09 01:27), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《donby (東逼)》之銘言: : 如題 : 假如我有一串數列 : 假設是 a=[0 0 3 2 1 0 0 1 1 5 4 3 2 1 0 0 7 6 5 4 3 2 1] (以下恕刪) 找遞減 => 找規律變化的地方 => 找變化的地方 => diff 因此 先對a做diff 可得 b=[0 3 -1 -1 -1 0 1 0 4 -1 -1 -1 -1 -1 0 7 -1 -1 -1 -1 -1 -1] 其中-1為連續遞減發生的位置 其他部份無關 因此再來要將非-1的部份去掉 b_new=[0 0 -1 -1 -1 0 0 0 0 -1 -1 -1 -1 -1 0 0 -1 -1 -1 -1 -1 -1] 再來因為是遞減 因此第一項一定是最大的 所以我們再做一次diff c=[0 -1 0 0 1 0 0 0 -1 0 0 0 0 1 0 -1 0 0 0 0 0] 這裡面-1的位置就是最大值的位置 所以再來我們找出c裡面-1的位置來當做a的index使用 但是由於做過diff 所以在這要把因為diff所少的項加上去 d=find(c==-1)+1; 再用d來當a的 index 整個程式碼就是 clear all;clc; a=[0 0 3 2 1 0 0 1 1 5 4 3 2 1 0 0 7 6 5 4 3 2 1]; b=diff(a); b(b~=-1)=0 c=diff(b) d=find(c==-1)+1; a(d) a(d)就會是最大值 d是最大值的位置 如果還要再限定大小 再從a(d)下手就好 -- 時の放浪者 (Toki no Hourousha) ----"FF6 Tina's Theme" 遙か遠く 夜を越えて 砂漠の海を 彷徨う 神の聲は 蜃氣樓 忘れられた人々 影は白く 搖らめきたつ 今ひとたびの 幻 蒼く燃える 勇者の夢 永遠に眠る人々 遙か遠く 夜を越えて‧‧‧ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.82.2

06/09 02:00, , 1F
謝謝你的回答@@" 順便請問一下如果不是固定遞減-1有辦法找嗎
06/09 02:00, 1F
針對你的需求 我先改一下a a=[0 0 5 2 1 0 0 1 1 5 4 3 2 1 0 0 7 5 4 1 0 ]; 然後一樣做diff(a) b=[0 5 -3 -1 -1 0 1 0 4 -1 -1 -1 -1 -1 0 7 -2 -1 -3 -1]; 然後找b裡面<0的部份 c=find(b<0); c=[3 4 5 10 11 12 13 14 17 18 19 20 ]; 做到這裡 不知你看出和你原本問題的關係在哪了嗎? ※ 編輯: panzertp 來自: 114.32.82.2 (06/09 02:28)

06/09 02:48, , 2F
謝謝你~前半段我看得懂了 後半段我在研究一下XD
06/09 02:48, 2F
文章代碼(AID): #1C3dsFjh (MATLAB)
文章代碼(AID): #1C3dsFjh (MATLAB)