как сделать эту функцию периодической в MATLAB?

#matlab #function #math #simulink

#matlab #функция #математика #simulink

Вопрос:

Я написал этот код в редакторе MATLAB и хочу, чтобы эта функция была периодической (период = 0,8 с)

 HR=75;

E_max=2.0;

E_min=0.06;

t_c=60/HR;

T_max=0.2 0.15*t_c;

t=0:0.0001:t_c;

t_n=t/T_max;

E_n=1.55*(((t_n/0.7).^1.9)./(1 (t_n/0.7).^1.9)).*(1./(1 (t_n/1.17).^21.9));

E=(E_max-E_min)*E_n E_min;

plot(t,E)
  

Я хочу использовать функцию в simulink в качестве источника напряжения. итак, мне нужна не точка, а целая функция. итак, мне нужна функция, которая занимает общее время (например, 20 секунд) и выдает выходные данные НЕПРЕРЫВНО (например, функция Sin).

функция и ее форма таковы:http://tinypic.com/r/2641a1s/8

Комментарии:

1. 1) Какова ваша функция? Код очень запутанный. 2) Как вы хотите определить периодичность? Кажется, значение функции при 0.8 и 0 не равно, простое повторение не кажется правильным вариантом?

2. если вы просто скопируете и вставьте этот код в свой редактор и запустите его, вы увидите, что значения функции в 0.8 и 0 равны!!!!!!!!! и что вы имеете в виду, как я хочу сделать ее периодической? во всех отношениях она будет периодической!!!! и я думаю, это настолько ясно, что моя функция E_n = 1.55 * (((t_n/0.7).^1.9)./(1 ( t_n/0.7).^1.9)).*(1./(1 ( t_n/1.17).^21.9)).

3. Я не знаю, что вы делаете, но я добавил plot(t_n,E) в конце, и оба значения не равны. Возможно, я просто вывел неправильные данные, поэтому ОБЪЯСНИТЕ свой код!

4. t_n равно t / T_max, поэтому вам нужно построить это: plot(t, E)

Ответ №1:

Создайте свои данные в рабочей области MATLAB base, запустив свой код в MATLAB перед запуском модели Simulink. Затем используйте блок повторяющейся последовательности. Используйте вашу переменную t в качестве значений времени и E в качестве выходных значений. Вам также нужно убедиться, что максимальный размер шага, который принимает решатель, равен min (diff (t)), что в случае ваших данных равно 0.0001.

введите описание изображения здесь

Комментарии:

1. Ставить блок в модель; дважды нажмите на блок, чтобы открыть его диалоговое окно, в поле редактирования, который говорит, что значения времени, выложил название своей переменной времени, т; в поле, который говорит, что выход значения имя Ваш сигнал переменная, т. е. это очень фундаментальная вещь в состоянии сделать в Simulink — это звучит, как вы должны выглядеть в первой главе инструкции , которые дает примеры того, как построить базовые модели.

Ответ №2:

Ну, вы путаете вектор Matlab и функцию

Функция выдает значение для любого запроса в домене функции. т.е. если домен равен [-1,2], то f (x), где x в [-1,2] должен выдавать и только одно значение. например, y = 3x 2.

Если вы хотите The function , то вам следует преобразовать скрипт в функцию.

cardiac.m

 function y = cardiac(x,cropPeriod,period)
    t_n = mod(x*cropPeriod/period,cropPeriod); 
    y=1.55*(((t_n/0.7).^1.9)./(1 (t_n/0.7).^1.9)).*(1./(1 (t_n/1.17).^21.9));
end
  

Затем сохраните файл как cardiac.m и он предоставит вам функцию.
И вызовите функцию как cardiac(x,0.8) , тогда это даст вам желаемое значение

demo.m

 t = 0:0.01:10;  % choose arbitrary range.
p = 0.8;        % period
cropPeriod = 4; % explained below
y = cardiac(t,cropPeriod,p);
plot(t,y);
  

Ясно, что уравнение, приведенное в http://tinypic.com/view.php?pic=j75jzkamp;s=8#.U7iH43VdXJ8 отличается от графика на изображении. Поскольку я не знаю период функции, вы можете просто выбрать подходящее число cropPeriod , пока не будете удовлетворены.

Пример графика

Периодический график

Если вы просто хотите, чтобы у нее был период p

График MATLAB — это не что иное, как последовательность точек данных. при вызове plot(t,E) MATLAB отображает точки в положении (t (1), E(1)) и (t(2), E(2)) … Таким образом, если вы хотите ее масштабировать, просто введите

 plot(p * t,E);
xlabel('sec(s)'); % Give x axis label
ylabel('E(t)')
  

где p = 0.8

Комментарии:

1. Спасибо за ответ. Я хочу использовать функцию в simulink в качестве источника напряжения. итак, мне нужна не точка, а целая функция. итак, мне нужна функция, которая занимает общее время (например, 20 секунд) и выдает вывод НЕПРЕРЫВНО.

2. @user3806398, первая реализация — это математическая функция, что означает, что она выдает значение для любого ввода, что, опять же, означает, что она выдает вывод НЕПРЕРЫВНО.

3. Ах, я обнаружил, что уравнение, указанное в URL tinypic.com/r/2641a1s/8 не имеет периода 1. Я не думаю, что график был сгенерирован с использованием этого уравнения. Чтобы внести изменения, я добавил дополнительную переменную cropPeriod для регулирования формы функции