【问题标题】:MATLAB Piecewise Functions + Vector ManipulationMATLAB 分段函数 + 向量操作
【发布时间】:2010-12-05 17:07:17
【问题描述】:

我想编写一个程序,它在一个半圆的顶部以一定的间隔绘制点,而在其他任何地方绘制一条直线。像这样的东西:__n__

我定义了一个时域,它被存储为一个向量 (t = 0:0.01:5)。我假设我可以使用时间向量的元素定义半圆顶部的点:

if t>=2|t<=2.3
y = sqrt(.15^2-(t-2.15)^2);

但 MATLAB 产生了一条错误消息,指出只能对方阵进行平方。

我试图利用索引来表明我想对 t 向量的一个元素而不是整个向量进行平方:

i = [200:230];
for t(200:230)
y = sqrt(.15^2-(t(i)-2.15)^2);

在这些失败之后,我注意到用一列非零元素对一个方阵进行平方会产生一个新的方阵,其中第一个矩阵的一列元素平方。如果有某种方法可以在对矩阵进行平方后消除额外的零列,我可以使用矩阵的该属性来对 t 向量的值进行平方。

解决这个问题最简单、最有效的方法是什么?

【问题讨论】:

    标签: matlab function vector


    【解决方案1】:

    听起来你想画一条水平线,上面有一个半圆形的“凸起”。以下是您可以执行此操作的方法:

    t = 0:0.01:5;        % Create the time vector
    y = zeros(size(t));  % Create a zero vector the same size as t
    index = find((t >= 2) & (t <= 2.3));        % Find a set of indices into t
    y(index) = sqrt(.15^2-(t(index)-2.15).^2);  % Add the "bump" to y
    y(1:index(1)) = y(index(1));                % Add the line before the "bump"
    y(index(end):end) = y(index(end));          % Add the line after the "bump"
    

    在上述解决方案中,“凹凸”之前和之后的线条可能略高于或略低于另一个(取决于您的样本在t 中的位置)。如果您想确保它们处于相同的高度,您可以改为执行以下操作:

    index = (t >= 2) & (t <= 2.3);              % Find a set of logical indices
    y(index) = sqrt(.15^2-(t(index)-2.15).^2);  % Add the "bump" to y
    % OPTION #1:
    y(~index) = y(find(index,1,'first'));  % Use the first circle point as the height
    % OPTION #2:
    y(~index) = y(find(index,1,'last'));   % Use the last circle point as the height
    

    最后,你可以画线了:

    plot(t,y);
    

    【讨论】:

    • 这个解释很有帮助。以下是我编译的代码:%DEFINE COMPONENTS OF TRANSFER FUNCTION: north = 1.31*10^6*[1 13.3]; south = [1 516.1 5.685*10^4 1.307*10^6 1.733*10^7]; h = tf(north,south); %TIME INTERVAL: t = 0:0.01:5; %DEFINE POINTS ON SPEED BUMP USING PIECEWISE FUNCTION: y = zeros(size(t)); index = find((t &gt;= 2) &amp; (t &lt;= 2.3)); y(index) = sqrt(.15^2-(t(index)-2.15).^2); y([1:index(1) index(end):end]) = y(index(1)); %PLOT PIECEWISE FUNCTION WITH RESPONSE: lsim(h,y,t);THANK YOU!
    【解决方案2】:

    等一下,你的问题是,你想对向量的每个元素求平方吗?您所要做的就是:

    t.^2

    . 表示向量或数组上的 element-wise operation in MATLAB

    其次,如果我目前了解您的问题,您想创建一个向量 y,其中包含 t 元素的函数,例如 t&gt;=2 | t &lt;=2.3?

    如果是这样,您所要做的就是:

    y = sqrt(0.15^2-(t( (t&gt;=2|t&lt;=2.3) )-2.15).^2));

    基本上,我创建了一个逻辑索引(t&gt;=2 | t&lt;=2.3) 并用于仅访问t 中的那些元素(我想要的)。

    另外,我没有完全理解您想要实现的什么。是否要绘制半圆曲线的最高点(最大值)?

    【讨论】:

    • 这两个答案的结合对我帮助很大。我想绘制一条直线,该直线进入半圆的点并返回直线,以及汽车底盘必须在减速带上行驶时的响应(由半圆建模)。如果没有您的 t.^2 解释,我会假设“。”在另一个答案中是一个错字。谢谢你们!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多