assemblt of global stiffness matrix

5 ビュー (過去 30 日間)
TT
TT 2014 年 12 月 3 日
コメント済み: John D'Errico 2014 年 12 月 4 日
Hi,
I write a code to find stiffness (K) matrix. It is strange that the determinant of K becomes infinity. However, ke, stiffness for each element does make sense and it is symmetric. Global K is also symmetric but as I said determinant is zero instead of infinity. Does anyone know what is the problem?
Thanks

採用された回答

John D'Errico
John D'Errico 2014 年 12 月 3 日
編集済み: John D'Errico 2014 年 12 月 3 日
A determinant is NEVER a good measure of whether a matrix is singular. And as matrices get large, the determinant becomes more than useless.
For example,
det(eye(1000)) == 1
however,
det(0.1*eye(1000)) == ???
When computed in floating point in MATLAB, the latter will yield zero, which I imagine you know not to be true. However, both matrices are equally non-singular. As easily, I could have modified the problem to yield inf by a different scale factor.
Answer? Don't use the determinant for anything of importance. It will only guide you to a poor conclusion.
Of course, this does not imply that your matrix has been created correctly or incorrectly. However, your test of that using the determinant is a useless one. Instead, you might look at the rank, or the eigenvalues. A valid stiffness matrix will be at least positive semi-definite. Don't forget that even for a singular matrix, eig can return negative eigenvalues on the order of -eps.
  2 件のコメント
TT
TT 2014 年 12 月 3 日
Thank you buddy!
My matrix is semi-definite since the rank(k)=rank(k*k) and all of the eigen values are non-negative. So it might be correct.
John D'Errico
John D'Errico 2014 年 12 月 4 日
Another nice trick to show the uselessness of the determinant is to create a numerically singular matrix that has an arbitrarily large determinant. For example:
Q = orth(rand(100));
A = Q'*diag([1:99,0])*Q;
cond(A)
ans =
2.2508e+16
rank(A)
ans =
99
det(A)
ans =
6.2431e+140
A is clearly numerically singular, since I created it that way, with a zero eigenvalue. It has a condition number on the order of 1/eps. Rank says it is rank deficient. Yet the determinant can be immense in magnitude.
I think the best test of whether you created the matrix correctly is if it yields viable predictions. At least this is what I used for the short time in my past when I had to build a few of them.
I'd expect it to be singular, since a stiffness matrix would not see simple translations of an elastic body. They have no affect on the potential energy of the system. And non-negative (and real) eigenvalues is also a positive indicator that it is at least reasonable.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLinear Algebra についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by