2013-10-13 5 views
-1

Я застрял за один шаг при написании одного алгоритма. Пожалуйста, помогите мне решить это.Алгоритм решения линейного уравнения n с n переменными

Мне нужно решить линейные уравнения. См. Ниже изображение.

enter image description here

я использовал изображение, потому что я не знаю, как писать матрицу.

Пожалуйста, предложите мне алгоритм для вычисления всех значений переменных. Ищите свой добрый ответ.

+13

Http: // эн.wikipedia.org/wiki/Gaussian_elimination – BlackBear

+0

Если это не связано с программированием, тогда это неправильное место, чтобы спросить – P0W

+0

Как насчет отображения кода? Что вы пробовали? Где ваши проблемы? – Matthias

ответ

4

Если ваша матрица всегда имеет одинаковую форму, заданную в вопросе (т. Е. Все, кроме -1 по диагонали), то вы можете решить ее во времени O (n), где n - число уравнений.

Пусть N - число уравнений.

Затем раствор определяется по формуле:

t = (a+b+c)/(N-2) 
x = (t-a)*0.5 
y = (t-b)*0.5 
z = (t-c)*0.5 

кода Python:

# Set up equations 
a=4 
b=5 
c=6 
A = a,b,c 

# Compute inverse 
t = sum(A)/(len(A)-2.) 
B = [(t-x)*0.5 for x in A] 

# Check 
x,y,z = B 
print -x+y+z 
print x-y+z 
print x+y-z 

Я полученный эту формулу:

  1. Добавление все уравнения вместе, чтобы получить (N- 2) (x + y + z) = (a + b + c), где N - число уравнений
  2. Письмо каждое уравнение, например, -x + y + z = x + y + z - 2x = (a + b + c)/(N-2) - 2x = a
  3. Решение этого уравнения для значения x
+0

Я не знаком с Python, если возможно, дайте мне алгоритм или код C. – devsda

+1

@devsda Показать инициативу, пожалуйста. Кто-то потратил довольно много времени, давая вам очень подробный ответ на ваш вопрос. Все, что вам нужно сделать, - это искать самые простые биты синтаксиса Python. Это не слишком много, чтобы спросить. – us2012

+0

@ us2012 Действительно Извините за это. – devsda

0

Рассматривая ваши примеры, вы выглядите так, будто вы пытаетесь инвертировать по n матрице всех 1, кроме как по диагонали у вас есть -1. Назовем эту матрицу D_n.

Учитывая эту симметрию, инверсия будет похожей: все а, кроме диагонали, вы будете иметь b (a и b, которые будут найдены).

Умножение D_n на обратное дает нам два уравнения, которые должны быть выполнены (что соответствует элементам в произведении по диагонали и по диагонали).

-b + (n-1) * a = 1 
b + (n-3) * a = 0 

Решение дает нам:

a = 1/(2n - 4) 
b = (3-n)/(2n - 4) 

Например, при п = 3, то есть а = 1/2, Ь = 0, так что обратное, инв (D_3), является

0 0.5 0.5 
0.5 0 0.5 
0.5 0.5 0 

Или когда п = 4, то есть = 1/4, B = -1/4, так что обратный, Inv (D_4), является

-0.2500 0.2500 0.2500 0.2500 
0.2500 -0.2500 0.2500 0.2500 
0.2500 0.2500 -0.2500 0.2500 
0.2500 0.2500 0.2500 -0.2500 

Теперь вы пытаетесь найти x_1, x_2, ..., x_n (назовем этот вектор x) таким, что D_n * x = (a_1, a_2, ..., a_n).

Учитывая, что мы выяснили, как вычислить и (D_N), решение:

x_j = (3 - n)a_j/(2n - 4) + sum(i=1..n, i != j) (a_n/(2n - 4)) 
Смежные вопросы