我想编写一个程序,在一定间隔上绘制一个半圆顶部的点,在其他地方绘制一条直线。这样的事情:__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向量的值。
解决此问题的最简单,最有效的方法是什么?
答案 0 :(得分: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
来访问那些(我想要的)元素。
另外,我并不完全理解你想要实现的 。您想绘制半圆曲线的最高点(最大值)吗?
答案 1 :(得分: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);