How can one make this program work? (fmin question)

In Part 1, I have learned that
x_optimal = fminbnd(@fun,0,2)
function out=fun(x)
if x<=1 out=x; else out=sqrt(x); end
out=-out; %because we're maximizing
end
Now I want to parameterize this example. I want to define a parameterized function
function out=fun(x,a)
if x<=1 out=x; else out=a*sqrt(x); end
out=-out; %because we're maximizing
end
And want to create an output vector
x=zeros(10,1);
for a=1:1:10
x(a,1)=fminbnd(@fun,0,2) % minimizes fun(x,a)
end
But this code does not work. How can one make the code work?

 채택된 답변

Bruno Luong
Bruno Luong 2020년 8월 2일

1 개 추천

x=zeros(10,1);
for a=1:1:10
x(a,1)=fminbnd(@(x) fun(x,a), 0, 2) % minimizes fun(x,a)
end

댓글 수: 3

alpedhuez
alpedhuez 2020년 8월 2일
편집: alpedhuez 2020년 8월 2일
Thank you.
  1. How did you arrive at this solution?
  2. I thought of using a global variable. Which is better?
global a
x=zeros(2,1);
for n=1:1:2
a=n;
x_optimal(n,1) = fminbnd(@fun,0,2)
end
function out=fun(x)
global a
if x<=1 out=1; else out=a*sqrt(x); end
out=-out; %because we're maximizing
end
" How did you arrive at this solution? "
Strictly speaking I did not arrive at this solution, since I did not search for it.
I simply kwow MATLAB and anonymous function by mainly reading the doc and then practice.
Don't use global variable if you don't have to.
Okay.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

질문:

2020년 8월 2일

댓글:

2020년 8월 2일

Community Treasure Hunt

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

Start Hunting!

Translated by