Having trouble with matrices? cant find error

2 views (last 30 days)
I'm using matlab to design a truss and the output is suppose to be the deflections caused by the applied loads. But I keep getting "not a number" for my deflections . here is the warnings I get.
Warning: System may be partially constrained.
> In truss3 (line 222)
In truss3ex2 (line 26)
Warning: Matrix is singular to working precision.
> In truss3 (line 224)
In truss3ex2 (line 26)
relevant lines from truss3 starting at line 219
% Solve the force-displacement equations.
AA = [a,zero1;e,d]; BB = [b,zero2]'; detAA = det(AA);
if abs(detAA) < 1e-16
warning('System may be partially constrained.')
end
AAinv = inv(AA); sol = AAinv*BB;
% Prepare the output quantities.
pp = 0;
for i = 1:n
Jforce(i,1) = i; Jdispl(i,1) = i;
isol = 2*m+p+3*(i-1);
Jdispl(i,2) = sol(isol+1); Jdispl(i,3) = sol(isol+2);
Jdispl(i,4) = sol(isol+3);
end
here is the code.
% class design project example
%
% all of the members are quenched steel
% k = 2000 k-lb, Pmax = 1500 k-lb (A = 100 sq-inch)
%
clear
n = 24; m = 60; LOADZ = -20000; LOADY = 1000; A = 100;
joint = [0,0,0;0,0,-10;0,0,-20;12,0,0;12,0,-10;12,0,-20;...
0,10,0;0,10,-10;12,10,0;12,10,-10;0,20,0;0,20,-10;...
12,20,0;12,20,-10;0,30,0;0,30,-10;12,30,0;12,30,-10;...
0,40,0;0,40,-10;0,40,-20;12,40,0;12,40,-10;12,40,-20];
assembly = [1,2;1,4;1,7;2,3;2,4;2,5;2,6;2,7;2,8;3,6;3,8;...
4,5;4,9;5,6;5,9;5,10;6,10;7,8;7,9;7,11;8,9;8,10;8,11;...
8,12;9,10;9,13;10,13;10,14;11,12;11,13;11,14;11,15;11,16;...
12,14;12,16;13,14;13,17;13,18;14,18;15,16;15,17;15,19;15,20;...
16,17;16,18;16,20;16,21;17,18;17,22;17,23;18,23;18,24;19,20;...
19,22;20,22;20,23;20,24;21,24;22,23;23,24];
forceJ = [3,1,1,1;3,1,1,1;3,1,1,1;3,1,1,1;3,1,1,1;...
3,1,1,1;-1,0,0,0;-1,0,0,0;...
-1,0,0,0; -1,0,0,0;-1,0,LOADY,LOADZ;-1,0,0,0;...
-1,0,LOADY,LOADZ;-1,0,0,0;-1,0,0,0;-1,0,0,0;-1,0,0,0;-1,0,0,0;...
3,1,1,1;3,1,1,1;3,1,1,1;3,1,1,1;3,1,1,1;3,1,1,1];
for i = 1:m; stretch(i) = 2000*1000; end; stretch(1);
%
index = 1;
[Jforce,Mforce,Jdispl,Mdispl] = ... (LINE 26)
truss3(n,m,joint,assembly,forceJ,stretch,index);
%
peak_klb = 18*A
maxMforce_klb = max(abs(Mforce/1000))
maxJdispl = max(abs(Jdispl*12));
maxDX_in = maxJdispl(2),maxDY_in = maxJdispl(3),maxDZ_in = maxJdispl(4)
for forceJ, (3,1,1,1) indicates a external joint with 3 reaction forces. (-1,0,0,0) indicates an internal joint with no loads.
Can anyone help me figure out this problem with the matrices? I have no idea what to do
  2 Comments
Arnab Sen
Arnab Sen on 30 Dec 2015
Edited: Arnab Sen on 30 Dec 2015
Provide the following information:
1.The entire code for 'truss3'.
2.Exact line or statement the script is throwing the error.
3.The exact error message.
4.As a workaround try 'pinv' function in place of 'inv' function.

Sign in to comment.

Answers (1)

Walter Roberson
Walter Roberson on 30 Dec 2015
AAinv = inv(AA); sol = AAinv*BB;
should be replaced by
sol = AA\BB;
This will find a least-squared solution to the problem even when the matrix is singular.
However, it cannot work miracles so you might still get inf or NaN.
  2 Comments
Walter Roberson
Walter Roberson on 5 Mar 2019
"System may be partially constrained" is a key message. It indicates that the definition of the truss has available rotations or translations that do not anchor the truss to a particular location or orientation. That matters because finite element methods have to quantize the space and assume that the locations transform gradually, which you cannot guarantee if you could in theory suddenly move or translate the object without changing the equations.
When a geometry has too many degrees of freedom, then it is typical that the solution matrix is singular, because by definition it is underdetermined.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!