| 查看: 1962 | 回复: 8 | |||
| 当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖 | |||
[求助]
matlab矢量写法,这样可以吗?急求啊!!
|
|||
|
大家好,在论坛上和网上也学到了一些将for语句写成矢量的写法,但是我的这个里面有if句法,如何来实现呢?我试了下,没有成功 就这样几句话: ny0=64; fi=2*pi/16; t=2.8; I=1i; H0=zeros(ny0,ny0); for j=1:ny0; if(mod(jl,2)==1) m=(j(l)+1)/2; else m=j(l)/2; end Ax=-(m-1)*0.5*fi; if (mod(j,4)==1) H0(j,j+1)=t*exp(I*Ax); end end 我试着这样去做: ny0=64; fi=2*pi/16; t=2.8; I=1i; H0=zeros(ny0,ny0); j=1:ny0; l=1:1:length(j); if(mod(j(l),2)==1) m=(j(l)+1)/2; else m=j(l)/2; end Ax=-(m-1)*0.5*fi; if (mod(j(l),4)==1) H0(j(l),j(l)+1)=t*exp(I*Ax); end 但是很奇怪啊,里面没数据啊。 有没有人可以帮我下啊? |
» 猜你喜欢
实验室接单子
已经有4人回复
全日制(定向)博士
已经有4人回复
假如你的研究生提出不合理要求
已经有6人回复
对氯苯硼酸纯化
已经有3人回复
求助:我三月中下旬出站,青基依托单位怎么办?
已经有12人回复
不自信的我
已经有12人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
北核录用
已经有3人回复
26申博(荧光探针方向,有机合成)
已经有4人回复

libralibra
至尊木虫 (著名写手)
骠骑将军
- 程序强帖: 40
- 应助: 817 (博后)
- 金币: 12914.1
- 红花: 64
- 帖子: 2238
- 在线: 287.3小时
- 虫号: 696514
- 注册: 2009-02-05
- 专业: 计算机软件
【答案】应助回帖
|
j=1:ny0; 循环标志l = 1:length(j),所以j(l)==l 你的代码就是 然后分析一下: j = 1:64; 开始循环j的元素l 如果是奇数,自加1除以2,如果是偶数,除以2,赋值给m 根据m得到Ax 如果当前元素除4余1,给H0的(l,l+1)元素赋值. j中所有除以4余1的元素是 一共16个,等于其实你只需要给H0的这16个元素赋值 既然给H0赋值的元素个数只有16个,为什么要循环64次呢?等于有48次循环计算的m和Ax根本没有用处. 那么修改一下:revise 1 既然mod(l,4)==1,就有l=4*n+1=2*2n+1,说明l除以2也余1,直接计算m然后给H0元素赋值. revise2,matlab的for可以指定步长,连if判断都不需要了 向量化的办法: revise3,既然是给全0矩阵H0的16个元素赋值,那你直接运用向量化计算出来结果,然后赋值就行了.不过可能有些绕,需要用好几个函数来实现 可以通过sparse来实现,不过sparse之后用full只能还原到61*62维,因为其他元素都是0 所以需要用局部矩阵赋值的办法 revise 4,终极向量化办法,得到行列号后,直接得到下标序列,将H0看做一维向量赋值 |

9楼2012-12-06 22:24:58

2楼2012-12-05 20:18:18

3楼2012-12-05 20:28:42

4楼2012-12-05 20:29:27












回复此楼




