/ / Próbujesz wykreślić funkcję, ale zamiast niej uzyskać tylko kropki? - Matlab, fabuła

Próbujesz wykreślić funkcję, ale zamiast tego dostajesz tylko kropki? - matlab, spisek

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 № 1

Moż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-*");

wprowadź opis obrazu tutaj


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);