[讨论] 如何打出a = 2 8 32 128 512

楼主: dxdy (=ρdρdφ)   2019-02-06 16:44:48
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?
作者: rex0707 (我就是我)   2019-02-06 17:51:00
是不是因为你把这两段code放在一起 所以a向量的大小跟上面的一样 而且后面几个元素的值没变
作者: book5601 (苍澜野兽)   2019-02-06 20:04:00
先回复阵列内有零的问题,我记得matlab不用在变量后面括号也会自己储存成阵列。所以你只要把a(n)的(n)整个删除,再run一次应该就会有。第二个方法是直接把数值串联,a=[a 2^n]; 这是matlab才有的写法
作者: profyang (prof)   2019-02-06 21:20:00
请记得先用zeors之类的给定a的size...程式前面最好加个clear; clc;之类的...至少我是习惯这样做的上面打错 zeros
作者: sppmg (sppmg)   2019-02-06 23:43:00
插入0是因为阵列初始值为0,你第一个循环n=3时,阵列(2)未指定即为0。第二个循环问题则是因为刚刚的a没清除,所以(5)之后都是旧的值。还有就是MATLAB在指定元素超出范围时会即时配置一个新的阵列,然后再复制内容过去。所以a(100)=0是一个zeros之外的预配置内存的方法。(据说比较快)a=[a, 2*n+1] 很方便,但效能较差,因为每次循环都要花费配置内存+复制内容的时间。
作者: sherees (ShaunTheSheep)   2019-02-08 16:02:00
n = 1:10; a = 2 ^ nn = 1:2:10才对
作者: bcpsowen (pigbull)   2019-02-09 17:53:00
n=1:2:10a=2.^n矩阵运算比循环有效率 点乘蛮好用的
作者: tn00364361 (小氵斿)   2019-02-12 00:01:00
.^正解,速度快很多

Links booklink

Contact Us: admin [ a t ] ucptt.com