如何在MATLAB中定期执行此函数?

时间:2014-07-04 19:33:03

标签: matlab function math simulink

我在MATLAB编辑器中编写了这段代码,并希望这个函数是周期性的(周期= 0.8s)

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秒)并输出CONTINUSELY(就像Sin函数一样)。

功能和它的形状是: http://tinypic.com/r/2641a1s/8

2 个答案:

答案 0 :(得分:2)

在运行Simulink模型之前,通过在MATLAB中运行代码,在MATLAB基础工作区中创建数据。然后使用Repeating Sequence块。使用变量t作为时间值,使用E作为输出值。您还需要确保求解器所采用的最大步长为min(diff(t)),在数据的情况下为0.0001。

enter image description here

答案 1 :(得分:0)

嗯,你混淆了Matlab矢量和一个函数

该函数为函数域中的任何查询提供值。 即如果域是[-1,2]那么f(x)其中[-1,2]中的x应该给出并且只给出一个值。例如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=j75jzk&s=8#.U7iH43VdXJ8中给出的等式与图像上的等式不同。由于我不知道函数的周期,您只需选择适当的数字cropPeriod,直到您满意为止。

示例图

Periodic plot

如果您只想让它有句号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