Matlab Solve a system of equations for a set of data

13 visualizaciones (últimos 30 días)
Manuel Soler
Manuel Soler el 3 de Abr. de 2020
Comentada: Manuel Soler el 4 de Abr. de 2020
Hello,
So i want to solve this strain, stress problem by knowing 2 out of 6 unknowns and the 4 equations i need. I have a set of data for ex28 and ey28 of 9 values. I am noob to matlab and I started to write a code to solve it as follows:
E=73*10^9; v=0.33;
ey28=-1 *10^-6;
ex28=-3*10^-6;
syms sigmax28 sigmay28 ez28 sigmaz28;
eqn1=sigmax28==v*E*(ex28+ey28+ez28)/((1+v)*(1-2*v))+E/(1+v)*ex28;
eqn2=sigmay28==v*E*(ex28+ey28+ez28)/((1+v)*(1-2*v))+E/(1+v)*ey28;
eqn3=sigmaz28==v*E*(ex28+ey28+ez28)/((1+v)*(1-2*v))+E/(1+v)*ez28;
eqn4=ez28==sigmaz28/E-v/E*(sigmay28+sigmax28);
sol28=solve([eqn1, eqn2,eqn3,eqn4],[sigmax28,sigmay28,sigmaz28,ez28])
When solved, I get a 'struct' with very large numbers, so I have the feeling I am doing something wrong. I also could not figure out how to get the values from the struct without doubleclicking on it on the variable tree
I am also finding this process of going value by value very tedious, is there a way I could make the whole system of equations at once?
Thanks for throwing some light on it :)

Respuesta aceptada

John D'Errico
John D'Errico el 3 de Abr. de 2020
You get huge numbers, because you are trying to use symbolic tools here, but with double precision numbers. See what happens here:
x = (sqrt(5) + 1)/2
x =
1.61803398874989
>> sym(x)
ans =
910872158600853/562949953421312
At that point, x is just a number. You and I happen to know where it came from, but MATLAB does not. So in order to do exact arithmetic on it, the symbolic toolbox converts the floating point number to a ratio of integers. You can always convert a result to a floating point number using double, or to a floating point high precision number using vpa.
double(sym(x))
ans =
1.61803398874989
vpa(sym(x))
ans =
1.6180339887498949025257388711907
Don't trust those extra digits that vpa yields here, because there were only roughly 16 significant digits to start with.
double(sol28.sigmax28)
ans =
-190572.704674325
  1 comentario
Manuel Soler
Manuel Soler el 4 de Abr. de 2020
Thank you so much
I was able to solve it and make it more automate too :)

Iniciar sesión para comentar.

Más respuestas (1)

David Hill
David Hill el 3 de Abr. de 2020
You could just solve Ax=b (A\b):
E=73*10^9;
v=0.33;
ey28=-1*10^-6;
ex28=-3*10^-6;
b=[v*E*(ex28+ey28)/(1+v)/(1-2*v)+E*ex28/(1+v);v*E*(ex28+ey28)/(1+v)/(1-2*v)+E*ey28/(1+v);v*E*(ex28+ey28)/(1+v)/(1-2*v);0];
A=[1 0 0 -v*E/(1+v)/(1-2*v);0 1 0 -v*E/(1+v)/(1-2*v);0 0 1 -v*E/(1+v)/(1-2*v)-E/(1+v);v/E v/E -1/E 1];
x=A\b;

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by