필터 지우기
필터 지우기

max value of a function

조회 수: 81 (최근 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 CenterFile Exchange에서 Numbers and Precision에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by