Matlab plots only one point

21 visualizaciones (últimos 30 días)
positron96
positron96 el 30 de Mzo. de 2017
Comentada: Guillaume el 30 de Mzo. de 2017
I want to plot the function Y = X^m/(5^m + X^m) on a Y vs. X graph for different values of m, and I used the code below but MATLAB plots only one point. Can someone help me?
for m = 1:10
X = linspace(1, 100, 1001);
Y = (X.^m) / (5^m + X.^m);
plot(X, Y);
end
Thanks!

Respuesta aceptada

Guillaume
Guillaume el 30 de Mzo. de 2017
Editada: Guillaume el 30 de Mzo. de 2017
You're performing matrix division instead of elementwise division. Use ./ instead of / in your Y calculation.
Once that's fixed, you'll get one plot and only one, because by default plot erases previous plots. Use hold on to prevent that.
Also note that since X doesn't change with m, it'll be faster to only calculate it once, outside the loop. So:
figure;
hold on;
X = linspace(1, 100, 1001);
for m = 1:10
Y = (X.^m) ./ (5^m + X.^m);
plot(X, Y);
end
edit: also note that you can avoid the loop entirely (and the need for hold on):
figure;
X = linspace(1, 100, 1001);
m = (1:10)'; %as a vector in a different direction than X
Y = (X.^m) ./ (5.^m + X.^m); %requires R2016b or later
plot(X, Y);
  3 comentarios
positron96
positron96 el 30 de Mzo. de 2017
Can you tell me what the apostrophe is for in m = (1:10)' ? Thanks in advance!
Guillaume
Guillaume el 30 de Mzo. de 2017
As the comment says, it's to ensure that m is in a different direction than X. It makes m as a column vector, whereas X is a row vector.
That's what makes the next line work.

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 30 de Mzo. de 2017
X = linspace(1, 100, 1001) ;
figure
hold on
for m = 1:10
Y = (X.^m). / (5^m + X.^m);
plot(X, Y);
end

Categorías

Más información sobre Line Plots en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by