Finding the minimum of a function

My function is supposed to return the minimum y-value, fmin, of the function described in the input function handle, funhan, in the interval, [x1, x2]. What am I doing wrong?
function fmin = findMin(funhan, x1, x2)
[~, fmin] = fmindbnd(@funhan(x),x1,x2);
and I already wrote the pre-exisiting function square_plus_one (which will be called in the test case)
function y = square_plus_one(x)
y= x.^2 + 1
These are what the Test Cases are supposed to run--but i can't run the test cases without an error
>> fh = @square_plus_one;
>> low = 3; hi = 5;
>> findMin(fh,low,hi)
ans = 10.0003
>> fh = @cos;
>> low = 3; hi = 4;
>> findMin(fh,low,hi)
ans = -1.0000

2 件のコメント

Star Strider
Star Strider 2012 年 10 月 14 日
I don't see any errors. What were you expecting?
Walter Roberson
Walter Roberson 2012 年 10 月 14 日
The minimum of x^2+1 over 3 to 5 would be 10 not 10.0003

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

 採用された回答

Walter Roberson
Walter Roberson 2012 年 10 月 14 日

0 投票

Just pass funhan to fminbnd() instead of passing @funhan(x)
Alternately pass @(x) funhan(x)

6 件のコメント

Ping
Ping 2012 年 10 月 14 日
walter: when i change my code to
[~, fmin] = @(x) (funhan(x),x1,x2);
I get the error: Expression or statement is incorrect--possibly unbalanced (, {, or [.
and when i change it to
[~, fmin] = @(x) (fminbnd(),x1,x2);
i get the same error! i don't understand the error because all my parenthesis and brackets are in place!
Walter Roberson
Walter Roberson 2012 年 10 月 15 日
[~, fmin] = fmindbnd(funhan,x1,x2);
or
[~, fmin] = fmindbnd(@(x) funhan(x),x1,x2);
Ping
Ping 2012 年 10 月 15 日
for the 1st one i get the error: Undefined function 'fmindbnd' for input arguments of type 'function_handle'.
for the 2nd one I get the error: Undefined function 'fmindbnd' for input arguments of type 'function_handle'.
Walter Roberson
Walter Roberson 2012 年 10 月 15 日
Which MATLAB version are you using? fminbnd is part of basic MATLAB now. What does
which -all fminbnd
show ?
Ping
Ping 2012 年 10 月 15 日
/Applications/MATLAB_R2012a_Student.app/toolbox/matlab/optimfun/fminbnd.m EDU>>
Walter Roberson
Walter Roberson 2012 年 10 月 15 日
fmindbnd() is the same place it was for your original question where you used that function ;-)
Possibly you had a typo in your question and meant to type fminbnd at that point, and that fminbnd is what you want to use here.

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeStrategy & Logic についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by