Having trouble with matrices? cant find error

2 次查看(过去 30 天)
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 个评论
Arnab Sen
Arnab Sen 2015-12-30
编辑:Arnab Sen 2015-12-30
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.

请先登录,再进行评论。

回答(1 个)

Walter Roberson
Walter Roberson 2015-12-30
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 个评论
Walter Roberson
Walter Roberson 2019-3-5
"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.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Structural Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by