Solving a system of equations using Symbolic Matlab

7 次查看(过去 30 天)
Hi, I am working with symbolic variables for the first time and I am struggling when it comes to solving systems of equations. I have tried the typical methods I would use to solve it if it were not symbolic, but in this case, I can't seem to make it work.
The system of equations, expressed matrix-wise, that I am trying to solve is the following one:
in which the 6x6 matrix is known, the loads vector (left hand side) is symbolic and the strains vector (remaining one) is the unknown. I created F as
F = @(x) [Nx; Ny; Nxy; Mx; My; Mxy] - [Aij, Bij; Bij, Dij]*[x(1); x(2); x(3); x(4); x(5); x(6)];
where Aij, Bij and Dij are the 3x3 matrices shown in the previous image, therefore, what I want to do is that I want to find the strains as a function of the loads, but I do not get the desired result using fsolve, neither the typical x=A\b.
If it helps, at the beggining of the code I declared:
syms Nx Ny Nxy Mx My Mxy t
Aij = [99.18 19.3 0; 19.3 27.50 0; 0 0 22.02]*t;
Bij = [0 0 -2.24; 0 0 -2.24; -2.24 -2.24 0]*t^2;
Dij = [11.55 0.56 0; 0.56 1.10 0; 0 0 0.78]*t^3;
How would you solve the previous system of equations?
Thank you.
  1 个评论
Man Rsgo
Man Rsgo 2023-8-18
编辑:Man Rsgo 2023-8-18
I have also tried
syms Nx Ny Nxy Mx My Mxy epsx epsy gamxy kx ky kxy t
F = [Nx; Ny; Nxy; Mx; My; Mxy] - [Aij, Bij; Bij, Dij]*[epsx; epsy; gamxy; kx; ky; kxy];
x = solve(F)
but it solves for epsx, gamxy, kx, kxy, ky and t, in that order, and I want to find epsx, epsy, gamxy, kx, ky, kxy plus the result is a structure with 2x1 fields for each variable, and it should be 1x1

请先登录,再进行评论。

采纳的回答

John D'Errico
John D'Errico 2023-8-18
编辑:John D'Errico 2023-8-18
You CANNOT use fsolve, though you said you tried it. This is not a numerical problem, but a symbolic one. t is an unknown there.
syms t
Aij = [99.18 19.3 0; 19.3 27.50 0; 0 0 22.02]*t;
Bij = [0 0 -2.24; 0 0 -2.24; -2.24 -2.24 0]*t^2;
Dij = [11.55 0.56 0; 0.56 1.10 0; 0 0 0.78]*t^3;
First, build the 6x6 matrix.
M = [Aij,Bij;Bij,Dij]
M = 
Next, what are the knowns? The unknowns?
syms Nx Ny Nxy Mx My Mxy % these will be the knowns, though for now, we don't know them.
LHS = [Nx; Ny; Nxy; Mx; My; Mxy];
syms epsx epsy gamxy kx ky kxy % these are the unknowns. also unknown. ;-)
X = [epsx; epsy; gamxy; kx; ky; kxy];
Now the solve is almost trivial. But you need to tell solve what to solve for! The second argument to solve does that. As you can see, I give it a list of the unknowns to solve for.
sol = solve(LHS == M*X,[epsx epsy gamxy kx ky kxy])
sol = struct with fields:
epsx: (25*(45920*Mxy + 41081*Nx*t - 25091*Ny*t))/(87182412*t^2) epsy: (25*(447328*Mxy - 25091*Nx*t + 180857*Ny*t))/(87182412*t^2) gamxy: (2*(864*Mx + 17584*My + 8851*Nxy*t))/(307151*t^2) kx: (4*(48011*Mx - 18284*My + 3024*Nxy*t))/(2150057*t^3) ky: (2*(178081*My - 5224*Mx + 17584*Nxy*t))/(307151*t^3) kxy: (50*(735925*Mxy + 5740*Nx*t + 55916*Ny*t))/(21795603*t^3)
Or, I could have used backslash at this point, just M\LHS, but solve does a nice job of returning the list of unknowns, and connecting them to their found values directly.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Number Theory 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by