首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个循环而不写入每个方程

创建一个循环而不写入每个方程
EN

Stack Overflow用户
提问于 2015-09-09 03:18:53
回答 1查看 82关注 0票数 0

目前,如果我想添加或删除另一个eq#,我还必须调整sig_min_lenweave变量中的变量。

代码语言:javascript
复制
fs=60000
t=linspace(0,2*pi,fs); %creates same size time 
freq=100;
for phase=1:360
    phase
    eq1=sin(freq*t+deg2rad(phase));
    eq2=sin(freq*t+deg2rad(phase+1));
    eq3=sin(freq*t+deg2rad(phase+2));
    eq4=sin(freq*t+deg2rad(phase+3));
    sig_min_len = min([ length(eq1), length(eq2)  , length(eq3), length(eq4)]); %get min length
    weave=reshape([[eq1(1:sig_min_len)];[eq2(1:sig_min_len)];[eq3(1:sig_min_len)];[eq4(1:sig_min_len)]],1,[])'; %interweave to row vectors into one col vector
end
  1. 是否有一种方法,只使用一个方程eq1=sin(freq*t+deg2rad(phase));,并有相位增量,同时也调整变量sig_min_len和变量weave通过多少个phase's i循环?
  2. 有没有办法为变量sig_min_len创建一个循环,这样我就不必写出每个length(eq#)了?有没有办法为变量weave创建一个循环,这样我就不必写出每个eq#(1:sig_min_len)

PS:我使用的是Octave 3.8.1,它的工作原理类似于matlab。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-09 04:54:27

由于您的eq#的结构几乎是相同的,除了它们有一个不同之外,这为for循环提供了完美的情况。第二个问题的解决方案是使用单元格数组来利用其索引灵活性。单元格数组的所有成员的级联是通过使用括号来实现的。我是用MATLAB做的。我想它的工作原理和八达夫差不多。

代码语言:javascript
复制
fs=60000
t=linspace(0,2*pi,fs);
freq=100;
for phase=1:360
    phase
    for ii = 1:4
        eq{ii} = sin(freq*t+deg2rad(phase+ii-1));
        sig_min_len = min(length(eq{ii}), length(eq{ii-1*(ii~=1)}))
    end
    weave=[eq{:}].';
end

表达式min(length(eq{ii}), length(eq{ii-1*(ii~=1)}))ii == 1时计算为min(length(eq{1}), length(eq{1)}))。它比一个类似的if语句要简洁得多,它希望这样:

代码语言:javascript
复制
if ii = 1
    sig_min_len = length(eq{ii})
else
    sig_min_len = min(length(eq{ii}), length(eq{ii-1}))
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32470380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档