[討論] 如何打出a = 2 8 32 128 512

看板MATLAB作者 (=ρdρdφ)時間5年前 (2019/02/06 16:44), 5年前編輯推噓5(5019)
留言24則, 7人參與, 5年前最新討論串1/1
for n=1:2:10 a(n)=2^n end 結果顯示 a = 2 0 8 0 32 0 128 0 512 要如何把0消掉? 我試了 for n=1:5 a(n)=2^(2*n-1) end 結果顯示 a = 2 8 32 128 512 0 128 0 512 為什麼512後面會跑出0 128 0 512? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.1.42.30 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1549442693.A.10C.html ※ 編輯: dxdy (106.1.42.30), 02/06/2019 16:45:29

02/06 17:51, 5年前 , 1F
是不是因為你把這兩段code放在一起 所以a向量的大小跟上
02/06 17:51, 1F

02/06 17:52, 5年前 , 2F
面的一樣 而且後面幾個元素的值沒變
02/06 17:52, 2F

02/06 20:04, 5年前 , 3F
先回覆陣列內有零的問題,我記得matlab不用在變數後面括
02/06 20:04, 3F

02/06 20:04, 5年前 , 4F
弧也會自己儲存成陣列。所以你只要把a(n)的(n)整個刪除
02/06 20:04, 4F

02/06 20:04, 5年前 , 5F
,再run一次應該就會有。
02/06 20:04, 5F

02/06 20:07, 5年前 , 6F
第二個方法是直接把數值串聯,a=[a 2^n]; 這是matlab
02/06 20:07, 6F

02/06 20:07, 5年前 , 7F
才有的寫法
02/06 20:07, 7F

02/06 21:20, 5年前 , 8F
請記得先用zeors之類的給定a的size...程式前面最好加個
02/06 21:20, 8F

02/06 21:21, 5年前 , 9F
clear; clc;之類的...至少我是習慣這樣做的
02/06 21:21, 9F

02/06 21:21, 5年前 , 10F
上面打錯 zeros
02/06 21:21, 10F

02/06 23:43, 5年前 , 11F
插入0是因為陣列初始值為0,你第一個迴圈n=3時,陣列(2)未
02/06 23:43, 11F

02/06 23:43, 5年前 , 12F
指定即為0。第二個迴圈問題則是因為剛剛的a沒清除,所以(5)
02/06 23:43, 12F

02/06 23:43, 5年前 , 13F
之後都是舊的值。
02/06 23:43, 13F

02/06 23:48, 5年前 , 14F
還有就是MATLAB在指定元素超出範圍時會即時配置一個新的陣
02/06 23:48, 14F

02/06 23:48, 5年前 , 15F
列,然後再複製內容過去。所以a(100)=0是一個zeros之外的預
02/06 23:48, 15F

02/06 23:48, 5年前 , 16F
配置記憶體的方法。(據說比較快)
02/06 23:48, 16F

02/06 23:51, 5年前 , 17F
a=[a, 2*n+1] 很方便,但效能較差,因為每次迴圈都要花費配
02/06 23:51, 17F

02/06 23:51, 5年前 , 18F
置記憶體+複製內容的時間。
02/06 23:51, 18F

02/08 16:02, 5年前 , 19F
n = 1:10; a = 2 ^ n
02/08 16:02, 19F

02/08 16:03, 5年前 , 20F
n = 1:2:10才對
02/08 16:03, 20F

02/09 17:53, 5年前 , 21F
n=1:2:10
02/09 17:53, 21F

02/09 17:53, 5年前 , 22F
a=2.^n
02/09 17:53, 22F

02/09 17:53, 5年前 , 23F
矩陣運算比迴圈有效率 點乘蠻好用的
02/09 17:53, 23F

02/12 00:01, 5年前 , 24F
.^正解,速度快很多
02/12 00:01, 24F
文章代碼(AID): #1SMfw54C (MATLAB)
文章代碼(AID): #1SMfw54C (MATLAB)