plot() and fplot() give different results for the same function
29 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Tamara Macadam
am 15 Feb. 2024
Bearbeitet: Bruno Luong
am 15 Feb. 2024
I'm trying to plot the function
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1617828/image.png)
between 0 and 100 (not including zero of course), but am running into a problem. When I use
x = linspace(0, 100, 10000);
y = 2.*sqrt(1+x)+((sin(sqrt(x).*pi).*sin(sqrt(1+x).*pi).*(2.*x+1))/(sqrt(x))) - 2.*sqrt(1+x).*cos(sqrt(x).*pi).*cos(sqrt(1+x).*pi);
plot(x,y);
I don't get the result I expected, which is the graph occasionally intersecting y = 0. However, by doing
fplot(@(x) 2.*sqrt(1+x)+((sin(sqrt(x).*pi).*sin(sqrt(1+x).*pi).*(2.*x+1))/(sqrt(x))) - 2.*sqrt(1+x).*cos(sqrt(x).*pi).*cos(sqrt(1+x).*pi), [0 100]);
I do get the result I expected.
I can't just use fplot, as I do need to use the variable y for other things, so I'm not sure what to do or what is even happening here. Any help would be greatly appreciated.
0 Kommentare
Akzeptierte Antwort
Bruno Luong
am 15 Feb. 2024
Bearbeitet: Bruno Luong
am 15 Feb. 2024
Your coding is wrong: Replace "/" with "./"
Weitere Antworten (1)
Torsten
am 15 Feb. 2024
Bearbeitet: Torsten
am 15 Feb. 2024
x = linspace(0, 100, 10000);
y = 2*sqrt(1+x)+sin(sqrt(pi)*x).*sin(sqrt(1+x)*pi).*(2*x+1)./sqrt(x) - 2*sqrt(1+x).*cos(sqrt(x)*pi).*cos(sqrt(1+x)*pi);
plot(x,y);
hold on
f = @(x)2*sqrt(1+x)+sin(sqrt(pi)*x).*sin(sqrt(1+x)*pi).*(2*x+1)./sqrt(x) - 2*sqrt(1+x).*cos(sqrt(x)*pi).*cos(sqrt(1+x)*pi);
fplot(f,[0 100])
1 Kommentar
Bruno Luong
am 15 Feb. 2024
Bearbeitet: Bruno Luong
am 15 Feb. 2024
I believe fplot ezplot replace "*" "/" "^" etc... with elementwise operators ".*" "./', ".^". It interprets as standard math notation.
This how charming or quirking MATLAB is, depending on your taste.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!