inconsistent linear system of equation

조회 수: 12 (최근 30일)
Jakub Dohnal
Jakub Dohnal 2019년 3월 24일
댓글: John D'Errico 2019년 3월 25일
Hello,
I am working on analysis of truss structure. This structure includes 386 link bodies and 132 joints. Every joint connects several link bodies. Links are substitute with axial forces, that are spread to components of each axis (x,y,z). So I wrote 3 equations for every joint (exept 4 joints, that have only plane components of forces, these have 2 equations). I wrote another 24 forces, which prevant structure movement. 6 of these forces should be solved, and 18 forces will be unsloved variables, which is okay, beacause i want them solve in differnt calculations.
So I have a 392 variables (they will be dependent to 18 unsloved variables) and 392 equations. But this linear system of equation is inconsistent and doesn't have solution. I modeled this truss structure in Ansys apdl, and in this programme, I got a results of every axial force and if I give this values to my system of equations, I'll get a pretty accurate solutions of each equation. This solution is not exactly zero, but it is very close to it (for example 10^-6).
So is there any solve method, which can solve this inconsistent system, for example some Iterative method and if its not, how can I find which collums are lineary dependent?
System of equations and Ansys results are in attachment.
  댓글 수: 3
Jakub Dohnal
Jakub Dohnal 2019년 3월 24일
편집: Jakub Dohnal 2019년 3월 24일
Because i have a solution from Ansys, and if I substitute those values into the equations, the results of every equations are almost zero (very small numbers like 10^-6). So i don't know how to modify this system to get some solution. Or at least I want to know those linear dependent collums and i don't know how to find them.
John D'Errico
John D'Errico 2019년 3월 25일
One worry is you seem to be creating these equations in MATLAB using 9 digits of precision. But the system is singular.
Ad = double(A);
size(Ad)
ans =
392 392
rank(Ad)
ans =
383
Is the system inconsistent? Yes. But then b contains symbolic elements, not just numbers.
rank([Ad,b])
ans =
384
b(1:10)
ans =
0
2876.8499999999985448084771633148 - 1.0*FS1ay
-1.0*FS1az
0
2876.8499999999985448084771633148 - 1.0*FS1by
-1.0*FS1bz
-1.0*FS1cx
2876.8499999999985448084771633148 - 1.0*FS1cy
0
-1.0*FS1dx
Which columns of A are linearly dependent on the others? Well, that is difficult to say, because we can only say that 9 columns are dependent on the others. Which exact set of 9 that should be eliminated is somewhat arbitrary.
[R,jb] = rref(Ad);
setdiff(1:392,jb)
ans =
311 319 327 335 343 352 354 386 388
So rref chose that set of 9 columns.
I'm not entirely certain what solution you compare this to, since b is not numeric as we have it, nor do I see how it is you think that you got a solution that is correct to roughly 1e-6, since b is not numeric.

댓글을 달려면 로그인하십시오.

답변 (1개)

Matt J
Matt J 2019년 3월 24일
You can find the least squares solution to a linear system of equation A*x=b using backslash
x_leastsquares = A\b

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

제품


릴리스

R2016a

Community Treasure Hunt

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

Start Hunting!

Translated by