如何在 MATLAB 中使该函数具有周期性?

问题描述 投票:0回答:3

我已经在 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

matlab function math simulink
3个回答
2
投票

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

enter image description here


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


0
投票

编写一个函数 取 t_new = mod(t,time_period) 并编写函数,给出 t_new 从 0 到 time_period 的输出。

© www.soinside.com 2019 - 2024. All rights reserved.