2014-03-27 26 views
1

這是我第一次需要MatLab,因此我正在學習如何使用它。 正如我的問題所指出的那樣,在我的代碼中必定會出現一些錯誤,它會使點而不是類似於平方根函數的函數。試圖繪製一個函數,但只獲得點?

h=0.1; 
tf=1; 
samples = round(tf/h+1); 
x = ones (samples, 1); 
y = zeros (samples, 1); 
y_true = zeros (samples, 1); 
hold on; 
for n=1: samples ; 
    t=(n-1)/10 +h; 
    y_true = 1-exp (-t); 
    plot (t,y_true); 
end; 
hold off; 

對於t的值是00.10.20.3等等,直到1。就在發佈這個問題之前,我發現了hold()的用途,因爲在此之前我會在中間得到一個點。謝謝你的時間。

回答

1

您可以繪製在同一時間所有的點:

% Parameters 
h=0.1; 
tf=1; 

% Process 
samples = round(tf/h+1); 
x = ones (samples, 1); 
y = zeros (samples, 1); 
y_true = zeros (samples, 1); 
n = 1:samples; 
t = (n-1)./10+h; 
y_true = 1-exp(-t); 

% Plot 
figure 
plot(t,y_true,'b-*'); 

enter image description here

+0

哦,謝謝。在這個例子中,我的教授向我們展示了他使用函數'for'。我想知道他是如何做到的。你可以幫我嗎? – user3468834

+0

我會試着問一個更好的問題:爲什麼如果我嘗試使用「for」,我只能得到積分,但是以你寫的形式得到一條線? – user3468834

+0

使用'for'循環時,只使用函數'plot'作爲一個點。因此,您在每次迭代中繪製一個點。另一方面,當你使用函數'plot'來同時描述所有的點時。函數'plot'內插給定點以顯示更平滑的線。 – tashuhka

0

從這個代碼很清楚你的意思是建立與所有點的矢量:

x = ones(samples, 1); 
y = zeros(samples, 1); 
y_true = zeros(samples, 1); 

要做到這一點,你可以使用向量計算,如tashuhka顯示,或者每次通過for循環存儲一個元素。你用下標來做:

for n= 1:samples 
    t(n) = (n-1)/10 + h; 
    y_true(n) = 1-exp(-t); 
end 

現在你可以在for循環之外的一個步驟中繪製整個向量。

最終代碼:

h=0.1; 
tf=1; 
samples = round(tf/h+1); 
x = ones(samples, 1); 
y_true = zeros(samples, 1); 
for n = 1:samples 
    t(n) = (n-1)/10 +h; 
    y_true(n) = 1-exp(-t); 
end 
plot(t, y_true); 
相關問題