我已经在 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 秒)并连续给出输出(如 Sin 函数)。
函数及其形状为: http://tinypic.com/r/2641a1s/8
在运行 Simulink 模型之前,通过在 MATLAB 中运行代码来在 MATLAB 基础工作区中创建数据。 然后使用重复序列块。 使用变量 t 作为时间值,使用 E 作为输出值。 您还需要确保求解器采用的最大步长为 min(diff(t)),在您的数据情况下为 0.0001。
你混淆了 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
编写一个函数 取 t_new = mod(t,time_period) 并编写函数,给出 t_new 从 0 到 time_period 的输出。