С помощью MATLAB рассчитайте количество синусоид внутри цикла for, а затем построите их - PullRequest
2 голосов
/ 04 октября 2010

Я делаю следующее в 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 ]

8 голосов
/ 04 октября 2010

Рассмотрим этот пример:

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 на ваши конкретные значения

4 голосов
/ 04 октября 2010

Функция BSXFUN - это один из способов решения вашей проблемы, , как показано Amro . Однако, если вы новичок в MATLAB, более простое решение для цикла может быть проще для понимания и немного менее пугающим:

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

Вот несколько ссылок на документацию, которая поможет понять, как работает вышеуказанное решение: LINSPACE , NUMEL , ZEROS , PLOT , Для циклов , Предварительное выделение массивов для улучшения производительности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...