Filter löschen
Filter löschen

plotting a simple constant

183 Ansichten (letzte 30 Tage)
Robert
Robert am 17 Sep. 2016
Beantwortet: Sam Chak am 2 Mär. 2024
Matlab strikes again with stupidity
Been using matlab for years and still fighting ridiculous problems
x = [1:.5:10]
y = x.*4;
Z = 4
plot(x,y,'blue'); hold on
plot (x,Z,'red')
Why won't this give me a simple plot with both functions on it. Totally insane. It gives me the x*4 plot but will not give me the constant 4

Akzeptierte Antwort

Anatoly Kozlov
Anatoly Kozlov am 6 Apr. 2020
Bearbeitet: Anatoly Kozlov am 6 Apr. 2020
x = 0:0.001:1;
c=5;
const = @(x)(c).*x.^(0);
plot(x, const(x))
  1 Kommentar
Anatoly Kozlov
Anatoly Kozlov am 6 Apr. 2020
Bearbeitet: Anatoly Kozlov am 6 Apr. 2020
Note: const = @(x)(c); doesn't work

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Image Analyst
Image Analyst am 17 Sep. 2016
Sometime in your years of using MATLAB you probably ran across ones() function but forgot about it. You need to use it so that, for each value of x, you have a value for Z. Here is the correct way to do it.
x = [1 : 0.5 : 10]
y = x .* 4
% Now declare a constant array Z
% with one element for each element of x.
Z = 4 * ones(1, length(x));
plot(x, y, 'b', 'LineWidth', 2);
hold on
plot(x, Z, 'r', 'LineWidth', 2)
grid on;
Otherwise, your Z had only 1 element, not 1 for every value of x so it won't plot a point at every value of x.
  5 Kommentare
Robert
Robert am 17 Sep. 2016
After further research I have decided for myself the best way to do it is to plot the unit step function with whatever gain you need.
Paul
Paul am 2 Mär. 2024
Since R2018b, yline is probably the way to go
x = [1:.5:10];
y = x.*4;
Z = 4;
plot(x,y,'blue'); hold on
%plot (x,Z,'red')
yline(Z,'red')

Melden Sie sich an, um zu kommentieren.


sunny
sunny am 2 Mär. 2024
x =1:.5:10;
y = x.*4;
Z = 4;
m=5:.5:14;
n=m-x;
plot(x,y,'blue');
hold on
plot (x,n,'red');
hold off;

Sam Chak
Sam Chak am 2 Mär. 2024
Before I discovered other special non-math functions like ones() and yline(), I used to rely on certain math tricks, such as the sign function, to plot a constant y-value over a specified x range. The concept was to treat plotting as if it were any other vector in a finite-dimensional Euclidean space. However, this trick had a fatal flaw when attempting to plot the constant y-value over , as . Therefore, it was necessary to adjust or shift the 'goalpost' to overcome this limitation.
Example 1: Using the sign function
x = 1:0.5:10;
y1 = 4*x;
y2 = 4*sign(x.^2);
figure(1)
plot(x, y1, 'linewidth', 2), hold on
plot(x, y2, 'linewidth', 2), grid on
xlim([x(1), x(end)])
xlabel x, ylabel y
title('Example 1: Using the sign function')
legend('y_{1}', 'y_{2}', 'fontsize', 16, 'location', 'best')
Example 2: Fatal flaw when crossing
x = -2:0.5:2;
y1 = 4*x;
y2 = 4*sign((x - 0).^2);
figure(2)
plot(x, y1, 'linewidth', 2), hold on
plot(x, y2, 'linewidth', 2), grid on
xlim([x(1), x(end)])
xlabel x, ylabel y
title('Example 2: Fatal flaw when crossing x = 0')
legend('y_{1}', 'y_{2}', 'fontsize', 16, 'location', 'best')
Example 3: Shifting the goalpost
x = -2:0.5:2;
y1 = 4*x;
y2 = 4*sign((x - 2*x(1)).^2);
figure(3)
plot(x, y1, 'linewidth', 2), hold on
plot(x, y2, 'linewidth', 2), grid on
xlim([x(1), x(end)])
xlabel x, ylabel y
title('Example 3: Shifting the goalpost')
legend('y_{1}', 'y_{2}', 'fontsize', 16, 'location', 'best')

Kategorien

Mehr zu Line Plots finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by