Compliance matrix from strain matrix, Matlab

Click For Summary
SUMMARY

The discussion focuses on calculating the compliance matrix C from the strain matrix S using Matlab. The user initially attempted to compute C with the command C=inv(S), resulting in incorrect values for most elements. The correct compliance matrix, which is symmetric about the diagonal, was ultimately identified after realizing that the user had incorrectly assumed all elements below the diagonal were zero. The correct approach requires acknowledging the symmetry in the matrix elements.

PREREQUISITES
  • Understanding of compliance and strain matrices in material science
  • Familiarity with Matlab programming and matrix operations
  • Knowledge of linear algebra, specifically matrix inversion
  • Concept of symmetry in matrices
NEXT STEPS
  • Study Matlab matrix operations, particularly inv() and matrix symmetry
  • Learn about elastic properties of materials and their mathematical representations
  • Explore advanced linear algebra concepts, including eigenvalues and eigenvectors
  • Research best practices for verifying matrix calculations in computational software
USEFUL FOR

Students and researchers in materials science, engineers working with elastic properties, and anyone utilizing Matlab for matrix computations in their studies or projects.

grepecs
Messages
17
Reaction score
0

Homework Statement


(I'm trying to replicate some results in an academic paper where they have calculated elastic properties of a crystal. Because I'm going to do a lot of similar time-consuming calculations following this one, I need to learn how to do them using a computer.)

The compliance matrix C is the inverse of the strain matrix S. I want to calculate C for a given S. I thought it would be easy to do this in Matlab using the command C=inv(S), but for some reason most of the resulting compliance matrix elements are wrong.

Homework Equations



C=S^-1

where S is the 6x6 matrix

[209 114 102 0 1 0;
0 234 139 0 -7 0;
0 0 238 0 27 0;
0 0 0 77 0 -5;
0 0 0 0 23 0;
0 0 0 0 0 72]

The Attempt at a Solution


In Matlab:

C=inv(S)

which gives me

C=[0.0048 -0.0023 -0.0007 0 -0.0001 0;
0 0.0043 -0.0025 0 0.0042 0;
0 0 0.0042 0 -0.0049 0;
0 0 0 0.0130 0 0.0009;
0 0 0 0 0.0435 0;
0 0 0 0 0 0.0139]

However, the correct answer is supposed to be (the elements below have been multiplied by 10^3)

C=[6.8 -2.3 -1.7 0 1 0;
0 8.8 -5.2 0 9.2 0;
0 0 9.5 0 -13 0;
0 0 0 13 0 0.9;
0 0 0 0 62.5 0;
0 0 0 0 0 13.9]

As you can see, the only elements that I get right are C(1,2), C(4,4), C(4,6), and C(6,6), i.e., only 4 out of the 13 nonzero elements. It seemed like such a simple task, but at the moment I'm stuck. Any hints as to what I'm doing wrong? I have already double checked S.
 
Physics news on Phys.org
Ok, I solved it. For potential future persons with a similar problem: the matrix elements (in this case the elastic constants and compliance coefficients) are symmetric about the diagonal, which means that c12=c21, c13=c31 etc. I wrongly assumed that all elements below the diagonal were zero, since only those above the diagonal were explicitly listed in the paper I read (which is of course a perfectly reasonable thing to do -- I should have known better).
 

Similar threads

  • · Replies 22 ·
Replies
22
Views
4K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
7K
  • · Replies 13 ·
Replies
13
Views
7K
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 1 ·
Replies
1
Views
6K
  • · Replies 1 ·
Replies
1
Views
19K
  • · Replies 5 ·
Replies
5
Views
6K
  • · Replies 1 ·
Replies
1
Views
2K