我在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
答案 0 :(得分:2)
在运行Simulink模型之前,通过在MATLAB中运行代码,在MATLAB基础工作区中创建数据。然后使用Repeating Sequence块。使用变量t作为时间值,使用E作为输出值。您还需要确保求解器所采用的最大步长为min(diff(t)),在数据的情况下为0.0001。
答案 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
,直到您满意为止。
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