How to run a function?
이전 댓글 표시
Hi , its the first time I'm using Matlab, I would like to know how can i run this function
function [ x,fx ,iter,x_vett]=gradiente(f,grad,x0,maxiter)
considering that f is a function of more variables, grad is a number (gradient of f), x0 is a vector and maxiter the maximum number if iterations. I use the command
[ x,fx ,iter,x_vett]=gradiente(f,grad,x0,maxiter)
with the f=@(x) 3*x(1)+2x(2) but it displays an error : "too many input arguments"
댓글 수: 4
Jan
2015년 6월 28일
Please post a complete copy of the error message and the line, which causes the error.
Geoff Hayes
2015년 6월 28일
Diego - which line of code is generating the error? The too many input arguments message is telling you that you are supplying too many input parameters to one of your functions. There probably isn't an error with gradiente but we need to know how the input function handle f is being used within that function. Perhaps it is being called with a second input parameter (i.e. two input parameters are being passed in whereas your code is assuming a single 2 element vector input is being used).
Note also the typo with your f. You are missing a multiply (?) between the 2 and x
f=@(x) 3*x(1)+2*x(2)
DIEGO FOSSO
2015년 6월 28일
DIEGO FOSSO
2015년 6월 28일
채택된 답변
추가 답변 (1개)
Geoff Hayes
2015년 6월 28일
Diego - when I run the above code, I observe the same error. This is because your anonymous function f is defined as a function that accepts a single input parameter
f=@(x) [2*x(1)+3*x(2)];
In gradiente, the following call is made against this function using feval
fx=feval(f,x(1),x(2));
and so we are passing two input parameters to a function that is expecting one (and so the error makes sense).
It is probably easier to just modify the function f to accept to input parameters as
f=@(x,y) [2*x+3*y];
and you should be able to proceed from there.
I did notice that the code in gradiente is assuming that the input grad is a function too
d=-feval(grad,x(1),x(2));
yet you are passing in the constant three. This will lead to the following error here (and in linesearch)
Error using feval
Argument must contain a string or function_handle.
Error in gradiente (line xxx)
d=-feval(grad,x(1),x(2));
How should grad be written as a function?
카테고리
도움말 센터 및 File Exchange에서 Data Distribution Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!