How to find the maximum value of a function?

89 Ansichten (letzte 30 Tage)
Josh Belandres
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.

Akzeptierte Antwort

Walter Roberson
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
Josh Belandres
Josh Belandres am 22 Apr. 2020
Thank you so much for your response
Kareem Dawood
Kareem Dawood am 17 Apr. 2022
Thank you for this contribution man!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

KurtanWagner
KurtanWagner am 26 Apr. 2021
Can you graph this as well?
  2 Kommentare
KurtanWagner
KurtanWagner am 26 Apr. 2021
I got this max value, but I would like to see just how big my variable is
Walter Roberson
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

Melden Sie sich an, um zu kommentieren.


MANSUR
MANSUR am 13 Nov. 2022
syms x
f = sin(x)+sin(x*2);
f2 = diff(f,x)=0;
Incorrect use of '=' operator. Assign a value to a variable using '=' and compare values for equality using '=='.
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
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

Melden Sie sich an, um zu kommentieren.

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!

Translated by