solving three non linear equation simultaneously??

i have following set of equations-
ex = (1/Ec)*(sigx - v*(sigy + sigz); ---(1)
ey = (1/Ec)*(sigy - v*(sigx + sigz); ---(2)
ez= (1/Ec)*(sigz - v*(sigy + sigx); ---(3)
where,
sigx= -(px*ex*Es + Pfx*Ef*ex + lx);
sigy= -(py*ey*Es + Pfy*Ef*ey + ly);
sigz= -(px*ex*Es + lz);
For equations (1) (2) and(3), known term is ex and hence sigx
Unknowns are ey and ez
Values of other terms are-
Ef = 180000;
Es= 2*10^5;
Ec= 25000;
fx=fy=420;
lx=0;
ly=5;
lz=0;
px=0.016;
py=0.024;
pz= 0.016;
v=0.15;
pfx=0.0125;
pfy=0.0125;
PROBLEM - when i am solving (2) and (3) simultaneously for a given value of ex and hence sigx , I am getting values of ey and ez which are not satisfying (1) equation. What is the reason for this contradiction? Please help!!

2 Comments

What are your expected results for ey and ez?
there are no such expected results for ey and ez . But the values of ey and ez should be such that when kept in eq(1) it should give the same value of ex which was initially assumed.

Sign in to comment.

 Accepted Answer

I believe what you are looking for is as follows:
syms ex ey ez
Ef=180000;Es=2*10^5;Ec=25000;fx=420;fy=420;Ix=0;Iy=5;Iz=0;px=0.016;py=0.024;pz=0.016;v=0.15;pfx=0.0125;pfy=0.0125;
ex = (1/Ec)*(-(px*ex*Es + pfx*Ef*ex + Ix) - v*(-(py*ey*Es + pfy*Ef*ey + Iy) + -(pz*ez*Es + Iz)));
ey = (1/Ec)*(-(py*ey*Es + pfy*Ef*ey + Iy) - v*(-(px*ex*Es + pfx*Ef*ex + Ix) + -(pz*ez*Es + Iz)));
ez= (1/Ec)*(-(pz*ez*Es + Iz) - v*(-(py*ey*Es + pfy*Ef*ey + Iy) + -(px*ex*Es + pfx*Ef*ex + Ix)));
sol=solve([ex,ey,ez])
See the solutions by typing
sol.ex
sol.ey
sol.ez

9 Comments

Thanks for your help.... but actually i want to find the value of ey and ez for a given value of ex.
Then set the valıe of ex to something, then you will have two equations for two unknowns.
syms ey ez
Ef=180000;Es=2*10^5;Ec=25000;fx=420;fy=420;Ix=0;Iy=5;Iz=0;px=0.016;py=0.024;pz=0.016;v=0.15;pfx=0.0125;pfy=0.0125;
ex= 0.00003;
sigx= -(px*ex*Es + pfx*Ef*ex + Ix);
ey = (1/Ec)*(-(py*ey*Es + pfy*Ef*ey + Iy) - v*(sigx + -(pz*ez*Es + Iz)));
ez= (1/Ec)*(-(pz*ez*Es + Iz) - v*(-(py*ey*Es + pfy*Ef*ey + Iy) + sigx));
sol=solve([ey,ez]);
y=sol.ey
z=sol.ez
excheck = (1/Ec)*(sigx - v*(-(py*y*Es + pfy*Ef*y + Iy) + -(pz*z*Es + Iz)))
As u said, i fixed the value of ex and got the value of ey and ez .
But when these values of ey and ez are not satisfying the first equation then...i.e excheck is not equal to ex..
this is the problem!!
How are you deriving your equation for excheck ?
You can not expect it to be the same. Actually, when you check their difference:
err=abs(ex)-abs(vpa(excheck))
>> 0.00002895
which means that their difference can be easily thought as zero.
but this value is very large if in terms of strain so for my project i cannot take it as zero. Is there any method through which i can solve this problem.? Kindly answer.
How are you deriving your equation for excheck ?
By assuming ex we get the value of ex and ey and consequently sigx ,sigy and sigz. Therefore by back substituting these values in eq(1) i.e sigx= -(px*ex*Es + pfx*Ef*ex + Ix) , I am trying to check the value of ex.
I notice that your lines
ey = (1/Ec)*(-(py*ey*Es + pfy*Ef*ey + Iy) - v*(sigx + -(pz*ez*Es + Iz)));
ez= (1/Ec)*(-(pz*ez*Es + Iz) - v*(-(py*ey*Es + pfy*Ef*ey + Iy) + sigx));
assign to symbols on the left that are also used on the right. I wonder if those should be
eqns = [ey == (1/Ec)*(-(py*ey*Es + pfy*Ef*ey + Iy) - v*(sigx + -(pz*ez*Es + Iz))),
ez == (1/Ec)*(-(pz*ez*Es + Iz) - v*(-(py*ey*Es + pfy*Ef*ey + Iy) + sigx))];
sol = solve(eqns,[ey, ez]);
This does not bring ex and excheck into agreement, but might hint at further difficulties.

Sign in to comment.

More Answers (1)

As far as I can see, the equations are linear in the unknowns. So you only have to solve a system of linear equations using the "backslash" operator.
Best wishes
Torsten.

Community Treasure Hunt

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

Start Hunting!