【问题标题】:how to make this function periodic in MATLAB?如何在 MATLAB 中使这个函数成为周期性的?
【发布时间】:2014-07-04 19:33:02
【问题描述】:

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

【问题讨论】:

  • 1) 你的职能是什么?代码非常混乱。 2)你想如何定义周期性?好像 0.8 和 0 处的函数值不相等,简单的重复似乎不是正确的选择?
  • 如果你只是将这段代码复制并粘贴到你的编辑器中并运行它,你会看到函数值 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)).
  • 我不知道你在做什么,但我在最后添加了一个plot(t_n,E) 并且两个值不相等。可能我只是绘制了错误的数据,所以请解释你的代码!
  • t_n 是 t/T_max 所以你必须绘制这个:plot(t,E)

标签: matlab function math simulink


【解决方案1】:

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

【讨论】:

  • 将块放入模型中;双击该块以打开其对话框;在显示时间值的编辑框中,输入时间变量的名称 t;在输出值的编辑框中,输出信号变量的名称,E。这是在 Simulink 中能够做的一件非常基本的事情——听起来你需要查看User Guide 的第一章,它提供了示例如何构建基本模型。
【解决方案2】:

你混淆了 Matlab 向量和函数

函数为函数域中的任何查询提供一个值。 即如果域是 [-1,2] 那么 f(x) 其中 x in [-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=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

【讨论】:

  • 感谢您的回答。我想将simulink中的功能用作电压源。所以我不需要一个点,而是整个功能。所以我需要一个花费总时间(例如 20 秒)并连续提供输出的函数。
  • @user3806398,第一个实现是一个数学函数,这意味着它为任何输入提供一个值,这再次意味着它连续提供输出。
  • 啊,我发现 url tinypic.com/r/2641a1s/8 中给出的方程没有周期 1。我不认为该图是使用该方程生成的。为了修改,我添加了额外的变量cropPeriod 来调节函数形状
猜你喜欢
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多