Not enough input arguments in Schaffer

1 Ansicht (letzte 30 Tage)
Scarlett Lee
Scarlett Lee am 7 Mai 2016
Bearbeitet: Walter Roberson am 3 Mär. 2025
Though I'm new to Matlab, I can't believe I could get this wrong. Matlab told me" Error using Schaffer (line 2) Not enough input arguments." But I can't find the problem and fix it. The following is my code--really simple, Please help me, thanks a lot!
function f=Schaffer(x)
f=0.5+((sin((x(1)^2+x(2)^2)^(1/2)))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2))^2;
x0=[-10,10];
[x,fval]=fminsearch(Schaffer,x0);
end
  1 Kommentar
Abhishek
Abhishek am 3 Mär. 2025
Hi, can you please specify which verison of MATLAB did you use?

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Abhishek
Abhishek am 3 Mär. 2025
Hi,
It looks like you're running into a common issue when working with function handles in MATLAB. The error you're encountering stems from attempting to define the function and call it within the same file. I tried this in MATLAB R2024b, and I faced the same issue.
In MATLAB, functions can either be saved in function files or script files, but script files cannot share the same name as a function within the file.
Additionally, functions must be declared at the start, and the name of the file must match the name of the first function if saved in a function file. Please refer to the below documentation which explains that functions can either be defined in a function file that only contains the function definition, or in a script file that contains function definitions and commands. https://www.mathworks.com/help/releases/R2024b/matlab/ref/function.html
In order to resolve this issue, you can define the function in a separate file and call it from another file. You may try following the below steps to achieve this in MATLB R2024b:
  1. Define the function in a file named “Schaffer.m”:
function f = Schaffer(x)
f = 0.5 + ((sin((x(1)^2 + x(2)^2)^(1/2)))^2 - 0.5) / (1 + 0.001 * (x(1)^2 + x(2)^2))^2;
end
2. Call the function from another file. I have created a file named “Test.m” in the same directory as “Schaffer.m” and called it from there:
x0 = [10, -10];
[x, fval] = fminsearch(@Schaffer, x0);
disp('Optimised values of x:');
disp(x);
disp('Function value at the optimum (fval):');
disp(fval);
3.Run the “Test.m” file. The output is as follows:
>> Test
Optimised values of x:
12.0419 -10.0666
Function value at the optimum (fval):
0.1782
Hope this solves the issue .

Kategorien

Mehr zu Random Number Generation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by