2009-10-11 687 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