How to find the maximum value of a function?
89 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Josh Belandres
am 22 Apr. 2020
Kommentiert: Walter Roberson
am 13 Nov. 2022
The function is:
f=sin(x)+sin(x*2)
and I want to find the scalar maximum and this is my code as of now.
f = sin(x)+sin(x*2);
f2 = diff(f,x)==0;
x = solve(f2,x);
X = max(x);
However this code gives:
acos(- 33^(1/2)/8 - 1/8)
and I want a numerical value because I need to use the scalar maximum for other calculations. If I procede with this code then "acos(- 33^(1/2)/8 - 1/8)" shows in every following calculation. Please let me know how to convert this or use a different code, thanks.
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 22 Apr. 2020
You are chasing the wrong problem.
x = solve(f2,x);
Those are not solutions to when the function f becomes 0: those are the solutions to when the derivative becomes 0. They are the locations of the inflection points, but they are not the values of the functions. You should be using
syms x
f = sin(x)+sin(x*2);
f2 = diff(f,x)==0;
extreme_points = solve(f2,x);
extreme_values = subs(f, x, extreme_points);
[maxX, maxidx] = max(extreme_values);
best_location = extreme_points(maxidx);
best_value = simplify(maxX, 'steps', 50);
best_value =
((3*2^(1/2) + 66^(1/2))*(33^(1/2) + 15)^(1/2))/32
Chances are that you should not be working with numeric values, as the numeric values are only approximations. You might choose to display a numeric value to make it easier for the user to make sense of the result, but you should compute based upon the full result.
To convert to a numeric approximation, double(best_value)
2 Kommentare
Weitere Antworten (2)
KurtanWagner
am 26 Apr. 2021
Can you graph this as well?
2 Kommentare
KurtanWagner
am 26 Apr. 2021
I got this max value, but I would like to see just how big my variable is
Walter Roberson
am 26 Apr. 2021
syms x
f = sin(x)+sin(x*2);
f2 = diff(f,x)==0;
extreme_points = solve(f2,x);
extreme_values = subs(f, x, extreme_points);
[maxX, maxidx] = max(extreme_values);
best_location = extreme_points(maxidx);
best_value = simplify(maxX, 'steps', 50);
fplot(f, [-10 5])
hold on
plot(double(best_location), double(best_value), 'r*');
hold off
.. it is periodic. With a little change to the code you can show that it repeats every 2*pi
MANSUR
am 13 Nov. 2022
syms x
f = sin(x)+sin(x*2);
f2 = diff(f,x)=0;
extreme_points = solve(f2,x);
extreme_values = subs(f, x, extreme_points);
[maxX, maxidx] = max(extreme_values);
best_location = extreme_points(maxidx);
best_value = simplify(maxX, 'steps', 50);
fplot(f, [-10 5])
hold on
plot(double(best_location), double(best_value), 'r*');
hold off
1 Kommentar
Walter Roberson
am 13 Nov. 2022
syms x
f = sin(x)+sin(x*2);
f2 = diff(f,x)==0;
extreme_points = solve(f2,x);
extreme_values = subs(f, x, extreme_points);
[maxX, maxidx] = max(extreme_values);
best_location = extreme_points(maxidx);
best_value = simplify(maxX, 'steps', 50);
fplot(f, [-10 5])
hold on
plot(double(best_location), double(best_value), 'r*');
hold off
Siehe auch
Kategorien
Mehr zu Stateflow finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

