2009-10-11 669 views
0

我想写一个程序,绘制一个半圆上的点在一定的间隔和其他地方的直线上。像这样:__n__MATLAB Piecewise函数+矢量操作

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

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

但MATLAB所产生的错误消息,仅方阵可以平方。

我试图利用指数表明,我想方的吨向量的元素,而不是整个矢量:

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

这些失败后,我注意到平方的正方形矩阵的一列非零元素将产生具有第一矩阵元素的平方的列的新方形矩阵。如果在矩阵平方后有一些方法可以消除额外的零列,我可以使用矩阵的属性来平方t向量的值。

解决此问题的最简单和最有效的方法是什么?

回答

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); 
+0

此解释有帮助。以下是我编译的代码: '%定义传输函数的组件: north = 1.31 * 10^6 * [113.3]; south = [1 516.1 5.685 * 10^4 1.307 * 10^6 1.733 * 10^7]; h = tf(北,南); %TIME INTERVAL: t = 0:0.01:5; %使用分段功能定义速度缓冲点: y =零(size(t)); index = find((t> = 2)&(t <= 2.3)); (指数)= sqrt(.15^2-(t(指数)-2.15)。 ([1:index(1)index(end):end])= y(index(1)); %具有响应的PLOT分块功能: lsim(h,y,t);' 谢谢! – 2009-10-12 04:10:09

1

坚持,所以你的问题是,你想平方米的每个元素?所有你需要做的是:

t.^2

.代表在矢量或数组的element-wise operation in MATLAB

其次,如果我目前了解你的问题,你想创建一个向量y,其中包含一个元素t的函数,使得t>=2 | t <=2.3

如果是这样,你需要做的是这样的:

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

从本质上讲,我创建了一个逻辑索引(t>=2 | t<=2.3)和用于访问仅这些要素(我想)在t

此外,我没有完全了解什么你想实现。你想绘制一个半圆曲线的最高点(最大值)吗?

+0

这两个答案的组合帮助我好的折扣。我想绘制一条直线进入一个半圆的点,并随着汽车底盘必须驾驶一个减速碰撞(以半圆为模型)的响应回到一条直线上。没有你的t^^解释我会假设'。'在另一个答案是一个错字。 谢谢你们两位! – 2009-10-12 04:02:23

+0

大声笑,不客气... upvotes也欢迎! – Jacob 2009-10-13 03:04:28