max value of a function

61 ビュー (過去 30 日間)
123456
123456 2022 年 8 月 8 日
コメント済み: 123456 2022 年 8 月 11 日
Hello everyone. I'm having a problem with finding a maximum y of a function. In general I use:
x= double(solve(diff(func)));
ymax=eval(func);
But in some cases this gives me a solution that is clearly not the maximum. Let's say, that the function is:
func = exp(-(x - 1)^2) + exp(-(x + 2)^2)
if i try to use max() i get an error "Input arguments must be convertible to floating-point numbers.".
Please let me know where is the mistake in my thinking.

採用された回答

Matt J
Matt J 2022 年 8 月 8 日
編集済み: Matt J 2022 年 8 月 8 日
In general I use: x= double(solve(diff(func)));
This assumes there are no local min/max or saddle points.
if i try to use max() i get an error "Input arguments must be convertible to floating-point numbers.".
You cannot use max() with symbolic variables.
  8 件のコメント
Matt J
Matt J 2022 年 8 月 9 日
編集済み: Matt J 2022 年 8 月 9 日
If you can identify a finite search interval [a,b] where the solution lies, you can do something like this:
a=-10; b=+10;
func = @(x) exp(-(x - 1).^2) + exp(-(x + 2).^2); %Note the element-wise .^
X=linspace(a,b,1e4);
Y=func(X);
[~,i0]=max(Y);
[xmax,ymax] = fminbnd(@(z) -func(z), X(i0-1), X(i0+1));
ymax=-ymax;
fplot(func,[a,b]); hold on
plot(xmax,ymax,'or','MarkerSize',10); hold off; axis padded
123456
123456 2022 年 8 月 11 日
Thank you so much. I will use this solution.

サインインしてコメントする。

その他の回答 (1 件)

Torsten
Torsten 2022 年 8 月 8 日
編集済み: Torsten 2022 年 8 月 8 日
syms x
func = exp(-(x - 1)^2) + exp(-(x + 2)^2);
dfunc = diff(func,x);
ddfunc = diff(dfunc,x);
xc= double(vpasolve(dfunc==0,[0 2]))
xc = 0.9996
xnum = double(subs(ddfunc,x,xc));
if xnum < 0
disp('Local maximum');
elseif xnum == 0
disp('Unknown type')
else
disp('Local minimum')
end
Local maximum
funcnum = matlabFunction(func);
x = 0:0.01:2;
plot(x,funcnum(x))

カテゴリ

Help Center および File ExchangeConversion Between Symbolic and Numeric についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by