Segédlet BMEGEMMAGM5 “Végeselem módszer alapjai” tárgy laborgyakorlatához.
Készítette: Dr. Kossa Attila, BME Műszaki Mechanikai Tanszék, 2013. szeptember 18.

Az alábbi kidolgozott példa megoldása Mathematica-ban:

Példa: Cardano-képlet alkalmazása
Főfeszültségek számítására
Készítette: Dr. Kossa Attila (kossa@mm.bme.hu)
BME, Műszaki Mechanikai Tanszék
2012. március 21.

Forrás: http://www.mm.bme.hu/~kossa/sziltan/cardanofofesz.pdf

Határozzuk meg az alábbi feszültségi mátrix sajátértékeit, vagyis a főfeszültségeket!

σ={{10,-20,30},{-20,40,50},{30,50,-20}}

Mátrixos alakban felírva:

MatrixForm[σ]

A karakterisztikus polinom felírása:

karpol=Det[σ-λ*IdentityMatrix[3]]

Ez egy harmadfokú függvény, melynek zérushelyei adják a keresett főfeszültségeket. Fontos kihangsúlyozni, hogy szimmetrikus mátrixnak mindig valósak a sajátértékei!
A karakterisztikus polinom szemléltetése:

Plot[karpol,{λ,-80,80},PlotStyle->{Red,Thick},Filling->Axis]

A fenti ábrán jól láthatóak a zérushelyek. Ezek megkeresése:

Solve[karpol==0,λ]

A Mathematica által használt algoritmus alapesetben a komplex számok halmazán keresi a megoldást, hiszen harmadfokú egyenlet megoldása általános esetben tartalmazhat komplex megoldást.
Ha numerikusan kiiratjuk a fenti megoldásokat akkor jól látszik, hogy a komplex rész numerikusan “kicsi”:

N[%]

Az ilyen numerikus megjelenítési hibák kiküszöbölésében sokszor nagyon hasznos parancs tud lenni a Chop[]:

Chop[%]

Ezzel megkaptuk a keresett megoldásokat.

Ha a fenti nemlineáris egyenlet megoldást keressük egy pontból kiindulva akkor használhatjuk a FindRoot parancsot. Ebben az esetben azonban a megoldás attól függ, hogy honnan indítjuk a gyökkeresést:

FindRoot[karpol==0,{λ,10}]
FindRoot[karpol==0,{λ,-50}]
FindRoot[karpol==0,{λ,70}]

A karakterisztikus polinom felírására külön parancs is be van építve (kiválaszthatjuk, milyen változóra csinálja meg):

CharacteristicPolynomial[σ,λ]
CharacteristicPolynomial[σ,x]
CharacteristicPolynomial[σ,ABC]

Ellenőrizhetjük, hogy az együtthatók a σ skalár invariánsaiból is számíthatóak a kidolgozott segédlet (7) képlete alapján:

σI=Tr[σ]
σII=(1/2)(((Tr[σ])^2)-Tr[σ.σ])
σIII=Det[σ]

A segédlet (7) egyenlete ugyanazt definiálja csak -1-gyel szorozva:

((λ^3)-σI*(λ^2)+σII*λ-σIII)-(-karpol)

A sajátértékeket számíthatjuk a beépített sajátérték számító paranccsal is:

Eigenvalues[σ]

Numerikusan:

N[Eigenvalues[σ]]

A főfeszültségek sorbarendezve:

{σ1,σ2,σ3}=Sort[%,Greater]

Sajátvektorok:

{n1,n2,n3}=Eigenvectors[σ]

Numerikusan:

{n1,n2,n3}=N[Eigenvectors[σ]]

NEM EGYSÉGVEKTOROK! Célszerű normalizálni őket:

{n1,n2,n3}=Map[Normalize,{n1,n2,n3}]

Ellenőrzés:

Map[Norm,{n1,n2,n3}]