To jest moje pierwsze zadanie, które wymaga MatLabPo prostu uczę się, jak go używać. Jak mówi moje pytanie, w moim kodzie musi być coś złego, który tworzy punkty zamiast funkcji, która wygląda podobnie do funkcji pierwiastka kwadratowego.
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;
Wartości t to 0
, 0.1
, 0.2
, 0.3
i tak dalej, aż 1
. Tuż przed opublikowaniem tego pytania odkryłem co hold()
jest po, ponieważ wcześniej dostałbym tylko punkt w środku. Dziękuję za Twój czas.
Odpowiedzi:
1 dla odpowiedzi № 1Możesz wykreślić wszystkie punkty jednocześnie:
% 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-*");
0 dla odpowiedzi nr 2
Z tego kodu jasno wynika, że masz zamiar zbudować wektor ze wszystkimi punktami:
x = ones(samples, 1);
y = zeros(samples, 1);
y_true = zeros(samples, 1);
Aby to zrobić, możesz użyć kalkulacji wektorowej, jak pokazała tashuhka, lub po prostu przechowywać jeden element za każdym razem w pętli for. Robisz to za pomocą subskrypcji:
for n= 1:samples
t(n) = (n-1)/10 + h;
y_true(n) = 1-exp(-t);
end
Teraz możesz narysować cały wektor w jednym kroku, poza pętlą for.
Kod końcowy:
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);