I have a file called F.m which contains the following code:
1 % INPUT:
2 % 3D vector x
3 %
4 % OUTPUT:
5 % function value at x
6
7 function val = f(x)
8 val= x(1)^2 + x(1)*x(2)^3 - 12*x(3) + 4;
9 end
I am trying to call F.m in an algorithm in another file, but when I run the code, I get the following error:
"Error using F (line 8) Not enough input arguments."
I'm new to MATLAB, so I'm not sure what I'm doing wrong here. Any help would be greatly appreciated!

2 件のコメント

Aaron Powers
Aaron Powers 2015 年 4 月 26 日
Could you include the code that calls your function f, with an example of what x is?
Anonymous Chupacabra
Anonymous Chupacabra 2015 年 4 月 26 日
Thank you for your interest in my question, Aaron!
x is a 3D point/vector, for example x = (x(1), x(2), x(3)) = (0,1,2).
Here's the code (it also calls on 2 other algorithms and requires input of other values too):
function [xminest, fminest,k] = Algorithm1(f, gradf, x0, tol1, tol2, T)
k = 0;
xk = x0;
while ( norm(feval(gradf, xk)) >= tol1 )
%du = feval(gradf, xk);
%dk = -du/norm(du);
dk = -1*feval(gradf, xk);
[a, b] = Algorithm2(f, xk, dk, T);
[tmin, fmin] = Algorithm3(f, a, b, tol2, xk, dk);
k = k + 1;
xk = xk + tmin*dk;
end
fminest = feval(f,xminest);
To run the code, I enter the command:
Algorithm1(F, gradf, [0,1,2], 0.1, 0.1, 10)

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

 採用された回答

the cyclist
the cyclist 2015 年 4 月 26 日

1 投票

With the syntax
Algorithm1(F, gradf, [0,1,2], 0.1, 0.1, 10)
MATLAB is looking for a variable named F (and similarly with gradf). You need to tell it that F is a function, by passing the function handle:
Algorithm1(@F, @gradf, [0,1,2], 0.1, 0.1, 10)
It looks like you have similar problems deeper in your code, but I could not resolve them completely because I don't have all the functions you are using.

1 件のコメント

Anonymous Chupacabra
Anonymous Chupacabra 2015 年 4 月 27 日
Thank you very much, cyclist! After prefacing each file name with @ as you said, the code is executing as intended!

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

その他の回答 (1 件)

Jan
Jan 2015 年 4 月 26 日
編集済み: Jan 2015 年 4 月 26 日

1 投票

Inside this line:
[a, b] = Algorithm2(f, xk, dk, T);
you call the function "f" without arguments. But You want top provide the function handle of this file instead:
[a, b] = Algorithm2(@f, xk, dk, T);
Note: In modern Matlab versions you can omit the feval and call the function handle directly, which looks nicer:
while norm(gradf(xk)) >= tol1

1 件のコメント

Anonymous Chupacabra
Anonymous Chupacabra 2015 年 4 月 27 日
Thank you very much, Jan! Using the function handle as you showed worked! Thank you also for your tip, as I have the 2015 MATLAB version, but I think the algorithm code I am using may be quite old.

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

カテゴリ

ヘルプ センター および File ExchangeStartup and Shutdown についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by