How to find the maximum value of a function?

165 次查看(过去 30 天)
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.

采纳的回答

Walter Roberson
Walter Roberson 2020-4-22
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 个)

KurtanWagner
KurtanWagner 2021-4-26
Can you graph this as well?
  2 个评论
KurtanWagner
KurtanWagner 2021-4-26
I got this max value, but I would like to see just how big my variable is
Walter Roberson
Walter Roberson 2021-4-26
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
MANSUR 2022-11-13
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 个评论
Walter Roberson
Walter Roberson 2022-11-13
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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Stateflow 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by