User defined function wont work, syntax issue?

function [Max_height] = Nheight(v0, la, g)
Max_height = -(v0^2*sin(la)^2)/(2*g);
not really sure what to do to fix it. Cant get it to work.

3 件のコメント

Tyler
Tyler 2012 年 11 月 5 日
and i get an error in line 2.
Azzi Abdelmalek
Azzi Abdelmalek 2012 年 11 月 5 日
what is the error message
Jan
Jan 2012 年 11 月 5 日
@Tyler: Please provide the error message and the inputs, which cause the error. Otherwise an answer required guessing, and this is always a bad strategy.

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

回答 (5 件)

Walter Roberson
Walter Roberson 2012 年 11 月 5 日

0 投票

Your code would have a problem if any of your parameters are vectors, and could have a problem if they are matrices. You should change your * operations to .* and you should change ^ to .^ and should change / to ./
Tyler
Tyler 2012 年 11 月 5 日

0 投票

these are the errors im getting still with the "." also i dont understand why it says undefined function or variable for v0 when there is a defined v0 in the workspace
Undefined function or variable 'v0'.
Error in Max_Height (line 2) Max_height = -((v0).^2.*sin(la).^2)/(2.*g); Error in fminbnd (line 216) x= xf; fx = funfcn(x,varargin{:});
Error in main (line 19) h = fminbnd(@Max_Height, 0, 6500); fprintf('The max height reached was %d meters\n', h)

3 件のコメント

Walter Roberson
Walter Roberson 2012 年 11 月 5 日
Your routine is named Nheight but you are invoking Max_Height.
Note: do not name the routine the same thing as a variable in the routine.
Tyler
Tyler 2012 年 11 月 5 日
i changed it were it isnt, and the error nor the undefined v0 went away.
Walter Roberson
Walter Roberson 2012 年 11 月 5 日
I am confused about whether the problem is solved or not? If it is not please show your current function and show your main routine where you are calling it.
You do realize that with the code you showed earlier, your "la" and "g" would be undefined? fminbnd() only passes in one parameter. See the fminbnd() documentation.

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

Jan
Jan 2012 年 11 月 5 日

0 投票

How do you call the function? Perhaps like this:
v0 = 123;
la = 234;
g = 567;
Max_height = Nheight
You have to call the function in this way:
Max_height = Nheight(v0, la, g)
The existence of v0 in the workspace is not enough for functions in opposite to scripts. You have to provide the inputs explicitly.
Tyler
Tyler 2012 年 11 月 6 日

0 投票

here is the User defined:
function [Max_h] = Max_Height(v0, la, g)
Max_h= -((v0.^2).*(sin(la)).^2)/(2.*g);
here is the line it is in:
h = fminbnd(@Max_Height,0,6500);
im getting these errors
Error using Max_Height (line 2) Not enough input arguments.
Error in fminbnd (line 216) x= xf; fx = funfcn(x,varargin{:});
Error in main (line 19) h = fminbnd(@Max_Height,0,6500); fprintf('The max height reached was %d meters\n', h);

6 件のコメント

Walter Roberson
Walter Roberson 2012 年 11 月 6 日
"Not enough input arguments" does not mean that v0 is undefined. In your case it indicates that la and g are undefined. fminbnd() only passes in one parameter. See the fminbnd() documentation.
Arguments
fun is the function to be minimized. fun accepts a scalar x and returns a scalar f, the objective function evaluated at x.
and
Parameterizing Functions in the MATLAB Mathematics documentation, explains how to pass additional parameters to your objective function fun.
Tyler
Tyler 2012 年 11 月 6 日
編集済み: Tyler 2012 年 11 月 6 日
im getting the not enough input arguments from my UDF.
Tyler
Tyler 2012 年 11 月 6 日
here is a current of everything again:
UDF:
function [Max_h] = Max_Height(v0, la, g)
Max_h= -((v0.^2).*(sin(la)).^2)/(2.*g);
main script line
h = fminbnd(@Max_Height, 0, 6500);
errors recieved
Undefined function or variable 'la'.
Error in Max_Height (line 2) Max_h= -((v0.^2).*(sin(la)).^2)/(2.*g); Error in fminbnd (line 216) x= xf; fx = funfcn(x,varargin{:});
Error in main (line 19) h = fminbnd(@Max_Height, 0, 6500);
EDU>> Max_Height Error using Max_Height (line 2) Not enough input arguments.
Walter Roberson
Walter Roberson 2012 年 11 月 6 日
Read that documentation about parameterizing functions!
What value are you expecting la and g to get? You do not define them anywhere obvious, and fminbnd() is for minimizing along a SINGLE variable. If you are expecting la and g to -also- be varied between the bound 0 to 6500 then you have the logical problem that you divide by g so you would get a discontinuity at your bounds but the minimizers require continuous functions.
Tyler
Tyler 2012 年 11 月 6 日
ok. All things aside, when i run my userdefined functions (forget the fminbnd for now), i get not enough input arguments.
everything is in the same folder, variables are in the workspace. do i need to somehow put the variables in the UDF or what?
Walter Roberson
Walter Roberson 2012 年 11 月 6 日
What is your current version of the code?
Having variables in the workspace is not good enough: you need to pass them in to the function if they appear in the function heading.

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

カテゴリ

ヘルプ センター および File ExchangeMATLAB Coder についてさらに検索

質問済み:

2012 年 11 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by