2017-03-20 179 views
0

功能我試圖在單個情節繪製逐段函數(形式爲y =αX+β的),使得用於在x軸不同的區域,對於函數,我有不同的α和β值。繪製「鋸齒狀」 MATLAB的

我想使這些步驟的位置(在x軸)可修改在將代替具有這樣的片函數的預定數目。繪製時,理想情況下它應該看起來像一組不同斜率和截距的線條,每個線條間隔一定距離。所以如果我的間距向量有10個元素,我寫了我的代碼,這樣我將相應地爲x軸上的不同區域分配10個不同的函數。

這裏是我寫的代碼。

x = linspace(0,100,10000); 
y = zeros(1,10000); 
spacing = 0:10:100; 

alpha = linspace(1,3,length(spacing)); %setting arbitrary upper lim 
beta = linspace(1,5,length(spacing)); 




for j = 1:length(spacing) 
    for i=1:10000 
     if x(i) <= spacing(j) 
      y(i) = alpha(j)*x(i) + beta(j); 
      i = i + 1; 
     else 
      j = j + 1; 


     end 
    end 



end 

plot(x,y) 

但是,當我繪製這個,我得到一個單一的斜坡。它似乎並沒有被認識到的間距(J)的變化是由於當J = J + 1次迭代else語句

enter image description here

任何建議或幫助,我應該如何處理這將是多大不勝感激!

回答

1

你應該首先遍歷x,然後在spacing。因爲對於x中的每個元素,您都試圖找到正確的間隔。然後,一旦你發現你的時間間隔應該移動到的x下一個元素,並在spacing停止迭代。你可以使用brake來做到這一點。如果你不這樣做,那麼它總是會選擇最後的時間間隔since x(i) <= spacing(end)。請參見下面的代碼:

x = linspace(0,100,10000); 
y = zeros(1,10000); 
spacing = 0:10:100; 

alpha = linspace(1,3,length(spacing)); %setting arbitrary upper lim 
beta = linspace(1,5,length(spacing)); 

for i=1:10000 
    for j = 1:length(spacing) 
     if x(i) <= spacing(j) 
      y(i) = alpha(j)*x(i) + beta(j); 
      break 
     end 
    end  
end 

plot(x,y) 
ylim([0 max(y)]) 

最後一行是設置y從0

+0

由於啓動,這是有道理的。我也很好奇,如果可以讓線性圖從y = 0開始,而不是從之前的片斷函數開始。一旦y(i)被更新,我想過在循環中將'i'值重置爲1,但是這並不能解決像往常一樣仍然讓x軸讀取0-100的問題。 – Ferreroire

+1

您可以將ylim([0 max(y)]添加到代碼的末尾。更一般地說,ylim([a b])將限制繪圖的a <= y <= b。查看更新後的答案。 –