Как сделать периодическую кусочно-определенную функцию в Matlab? - PullRequest
0 голосов
/ 02 декабря 2018

Я пытаюсь создать свою собственную функцию в Matlab, которая аналитически определяется как:

x(t)=
{ A, k*T =< t <=k*T+tau 
{ 0, k*T+tau < t < k*T+T

Я пытаюсь сделать это с помощью:

A=1
T=2
tau=1
k=0:1:10
t=0:0.1:100
y=A.*(t>=k*T).*(t<=k*T+tau) + (0).*(t>k*T+tau).*(t<k*T+T)

после этого яполучить сообщение:

error: mx_el_ge: nonconformant arguments (op1 is 1x1001, op2 is 1x11)

Функция должна выглядеть как прямоугольная волна с амплитудой = A (например, A = 1).

Как это сделать?

1 Ответ

0 голосов
/ 02 декабря 2018

Вы можете просто определить один период (k = 1) и повторить k раз, используя repmat.Теперь это не работает, потому что вы логически сравниваете t (длина 1001) и k*T (длина 10).

В качестве альтернативы, транспонируйте k и суммируйте по строкам:

A=1;
T=2;
tau=1;
k=(0:1:10)';
t=0:0.1:100;

y=sum(A.*(t>=k*T).*(t<=k*T+tau) + (0).*(t>k*T+tau).*(t<k*T+T),1);

plot(t,y)

Примечание: это будет работать только в вашем конкретном примере, так как функция равна нулю, когда «вне диапазона».

enter image description here

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