Not enough input arguments. Help?

1 次查看(过去 30 天)
Charlotte Massie
Charlotte Massie 2020-4-1
编辑: darova 2020-4-1
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
% Load, geometry and materal
F = [10000e3;-2000e3];%unit change (kN--N)
E = 70E9;%Pa = N/m2
l = [2 2/sqrt(3) sqrt(2)];%m
a = [deg2rad(-30) deg2rad(-60) deg2rad(-135)];%rad
%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
  3 个评论
Ankit
Ankit 2020-4-1
it is working fine. how you are passing x (areas) to your function?
[c,ceq] = constraint([2 3 4])
Output in Matlab:
c =
1.6326e+06 1.8391e+06 1.5596e+06
ceq =
[]
darova
darova 2020-4-1
编辑:darova 2020-4-1
Shouldn't your global matrix look liek this (color - local matrices)?

请先登录,再进行评论。

回答(1 个)

Constantino Carlos Reyes-Aldasoro
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 个评论
Charlotte Massie
Charlotte Massie 2020-4-1
Hi,
I am still unsure what you mean and how i can fix my code. Any further help would be appreciated.
Constantino Carlos Reyes-Aldasoro
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();

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Linear Least Squares 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by