用MATLAB计算for循环中的一些正弦曲线,然后绘制它们

时间:2010-10-04 14:50:39

标签: matlab for-loop plot

我在MATLAB中执行以下操作并且运行良好。但是我需要计算20个正弦曲线而不是3个,然后将它们全部绘制出来。

x=sin(1*w*t)*(2/(pi*1));
y=sin(3*w*t)*(2/(pi*3));
z=sin(6*w*t)*(2/(pi*6));

plot(t,x,t,y,t,z)

我认为应该可以制作一个for循环,然后绘制,但我不确定这是怎么做的,需要一些帮助。

2 个答案:

答案 0 :(得分:8)

考虑这个例子:

w = 2;
t = (0:0.05:pi)';              %'# time axis
p = [1 3:3:12];                %# parameters you loop over

%# sinusoids over all possible parameters
x = bsxfun(@times, sin(w*bsxfun(@times,p,t)), (2./(pi*p)));
plot(t,x)                      %# plot all of them at one
legend( cellstr(num2str(p')) )

alt text

您只需将矢量p更改为您的特定值

即可

答案 1 :(得分:4)

功能BSXFUN是解决问题的一种方法as illustrated by Amro。但是,如果您是较新的MATLAB用户,则更简单的for循环解决方案可能更容易理解并且不那么令人生畏:

w = 1;     %# Choose the value of w
k = 1:20;  %# Your 20 values to compute a sinusoid for
N = 100;   %# The number of time points in each sinusoid

t = linspace(0,2*pi,N).';  %'# A column vector with N values from 0 to 2*pi
X = zeros(N,numel(k));      %# A matrix to store the sinusoids, one per column

for iLoop = 1:numel(k)      %# Loop over all the values in k
  X(:,iLoop) = sin(k(iLoop)*w*t)*(2/(pi*k(iLoop)));  %# Compute the sinusoid
                                                     %#   and add it to X
end

plot(t,X);  %# Plot all the sinusoids in one call to plot

以下是文档的一些链接,这些链接应有助于全面了解上述解决方案的工作原理:LINSPACENUMELZEROSPLOT,{{3 },For loops