[問題] 怎麼求數列的差?已回收

看板MATLAB作者 (黃囧龍)時間16年前 (2009/04/30 02:29), 編輯推噓6(607)
留言13則, 7人參與, 最新討論串1/2 (看更多)
請問要怎麼用matlab求數列的差? 也就是如果我有一串數列 1 7 8 9 5 這5個元素 則其差值的數列就會是6 1 1 -4 這4個元素 也就是用後項減前項 我目前想到的是 假如我設a為一個數列 b為a的差值 則 b = [a(2)-a(1),a(3)-a(2),a(4)-a(3),a(5)-a(4),.........] 這樣應該可以吧(我Matlab沒很熟 不知道有沒有寫錯) 可是有個問題是 如果我的a很大 有幾百個元素 那我這種暴力寫法不就會寫死 不曉得有沒有更好的方法? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.141.90

04/30 02:36, , 1F
我是不知道有沒有內建的,但就算很大也不會寫死啊= =
04/30 02:36, 1F

04/30 02:36, , 2F
最原始的方法就是寫迴圈,沒幾行就可以了
04/30 02:36, 2F

04/30 02:37, , 3F
不然就是建一個b2,讓它跟b有一個位移,第一項補0,然後
04/30 02:37, 3F

04/30 02:37, , 4F
再相減就好
04/30 02:37, 4F

04/30 02:39, , 5F
更正,照你的需求應該是b2最後一項補0,然後用b2-b
04/30 02:39, 5F

04/30 02:41, , 6F
再更正,上述的b都改成a
04/30 02:41, 6F

04/30 03:10, , 7F
diff(a)
04/30 03:10, 7F

04/30 04:39, , 8F
b=diff(a)樓上正確
04/30 04:39, 8F

04/30 07:44, , 9F
傳統寫法 b=[]; for i=1:length(a)-1 b=[b a(i+1)-a(i)];
04/30 07:44, 9F

04/30 07:45, , 10F
寫程式時我偏愛這種寫法,但matlab建議多多採用內建函數
04/30 07:45, 10F

04/30 21:35, , 11F
樓上偏好的寫法沒有先配置記憶體_A_ 會很慢喔
04/30 21:35, 11F

04/30 22:01, , 12F
a=[a(1) a]; b=a(2:end)-a(1:end-1);
04/30 22:01, 12F

05/06 20:02, , 13F
樓上的a=[a(1) a]; 應該不用吧?
05/06 20:02, 13F
文章代碼(AID): #19-9oa-k (MATLAB)
文章代碼(AID): #19-9oa-k (MATLAB)