M.P.
M.P.

Reputation: 1

large number of linear equations in MATLAB

I want to use solve() to solve a large system of linear equations. The solve() function needs equations and variables. I use a loop to generate the equations and my variables are contained in a large array. This is a simple code of what I am trying to do:

x = sym('x',[1 3])
eqn = sym('eqn', [1,3])
eqn1 = 2*x1 + x2 + x3 - 2 == 0
eqn2 = 2*x2 -x2 -x1- x3 == 3
eqn3 = 2*x2+ x1 + 3*x3 == -10
Y = solve(eqn, x)

MATLAB does not recognize my variable x1. I have solved the same system using the following code:

syms x1 x2 x3
eqn1 = 2*x1 + x2 + x3 == 2
eqn2 =   2*x2 -x2 -x1 - x3 == 3
eqn3 = 2*x2+ x1 + 3*x3 == -10
X = solve([eqn1, eqn2, eqn3, eqn4], [x1 x2 x3])
structfun(@subs,X)

But this is useless for a very large number of equations. What am I doing wrong?

Upvotes: 0

Views: 121

Answers (1)

tryman
tryman

Reputation: 3293

You don't need symbolic (syms) for that. This is a standard linear system of equations that can be represented as: Ax = b where A = [2 1 1; -1 1 -1; 1 2 3], x = [x1; x2; x3] and b = [0; 3; -10]

To solve for x, you would first define

A = [2 1 1; -1 1 -1; 1 2 3]

and

b = [0; 3; -10]

and then solve using

x = A\b

PS. There are some odd things in your question, eg. in eq.2 eqn2 = 2*x2 -x2 -x1- x3 == 3 I assume you omitted simplying this to -x1 +x2 -x3 ==3.

PS2. This is pretty standard Matlab, you can find a lot of info under the standard mldivide page in the documentation along with a lot similar questions here on SO.

Upvotes: 1

Related Questions