# Not enough input arguments. Help?

2 views (last 30 days)
Charlotte Massie on 1 Apr 2020
Edited: darova on 1 Apr 2020
Not enough input arguments. Error in constraint (line 11) k1 = E*x(1)/l(1)*[(cos(a(1)))^2,sin(a(1))*cos(a(1));sin(a(1))*cos(a(1)),(sin(a(1))^2)];
This is my code:
function [c,ceq] = constraint(x)
% constraint: axial stress<=400N/m2
% x is the area of bar, x1=A1,x2=A2,x3=A3
F = [10000e3;-2000e3];%unit change (kN--N)
E = 70E9;%Pa = N/m2
l = [2 2/sqrt(3) sqrt(2)];%m
%bar 1 global matrix at node 4
k1 = E*x(1)/l(1)*[(cos(a(1)))^2,sin(a(1))*cos(a(1));sin(a(1))*cos(a(1)),(sin(a(1))^2)];
%bar 2 global matrix at node 4
k2 = E*x(2)/l(2)*[(cos(a(2)))^2,sin(a(2))*cos(a(2));sin(a(2))*cos(a(2)),(sin(a(2))^2)];
%bar 3 global matrix at node 4
k3 = E*x(3)/l(3)*[(cos(a(3)))^2,sin(a(3))*cos(a(3));sin(a(3))*cos(a(3)),(sin(a(3))^2)];
% nodal displacement in node 4
k = k1+k2+k3;
d4 = inv(k)*F; %P
%force component at each bar
f1 = k1*d4;
f2 = k2*d4;
f3 = k3*d4;
%axial force
s1 = (sqrt(f1(1)^2+f1(2)^2))/x(1);
s2 = (sqrt(f2(1)^2+f2(2)^2))/x(2);
S3 = (sqrt(f3(1)^2+f3(2)^2))/x(3);
%inequlity constraint
Fo = [s1 s2 S3]; %N/mm2
c = Fo-400;
%Equality constraint
ceq = []; %no equality constraint
end
darova on 1 Apr 2020
Shouldn't your global matrix look liek this (color - local matrices)?

Your problem may be that you are calling your function without the required input parameters your function requires one parameter
function [c,ceq] = constraint(x)
so if you call your function without input parameters it will create an error. I created a simplified version of a function:
function [c,ceq] = constraint(x); c=x;ceq=x;end
and then call it with/without parameters, look:
>> [c,ceq] = constraint(2);
>> [c,ceq] = constraint();
Not enough input arguments.
Error in constraint (line 1)
function [c,ceq] = constraint(x); c=x;ceq=x;end
>>
Hope this helps. If this does not solve your question, let me know. If it does, please accept the answer.
##### 2 CommentsShowHide 1 older comment
The code (your function) is fine, the problem is when you call the function. Somewhere, outside the function you must be calling the function, and you have not placed the value of x in that call.
Correct
% here you do something
% then you define x
x = 2;
% then you call your function
[c,ceq] = constraint(x);
% no errors coming from there
I have assumed the value of x=2 but it will be different in your setting.
Incorrect
% error will happen because you are not passing an input parameter
[c,ceq] = constraint();