Решение задачи Линейная алгебра с Яндекс Контест

Без пояснения   Просмотров: 2271


Пусть экземпляр класса Matrix задаёт систему линейных алгебраических уравнений.

Тогда добавьте в класс метод solve, принимающий вектор-строку свободных членов и возвращающий строку-список, состоящую из float – решение системы, если оно единственно. Если решений нет или оно не единственно – выдайте какую-нибудь ошибку.


Код

from sys import stdin
from copy import deepcopy


class Matrix(object):
    def __init__(self, matrix):
        self.matrix = deepcopy(matrix)

    def __str__(self):
        return '\n'.join('\t'.join(map(str, row)) for row in self.matrix)

    def solve(self, s):
        l = [-1000000] * len(s)
        while True and len(self.matrix) > 0:
            b = 0
            for i in range(len(self.matrix)):
                k = 0
                val = 0
                idx = 0
                sum = 0
                for j in range(len(self.matrix[0])):
                    if l[j] == -1000000 and self.matrix[i][j] != 0:
                        k += 1
                        idx = j
                        val = self.matrix[i][j]
                    elif l[j] != -1000000:
                        sum += l[j] * self.matrix[i][j]
                if k == 1:
                    l[idx] = (-sum + s[idx]) / self.matrix[i][idx]
                    b = 1
                    del[self.matrix[i]]
                    break
            if b == 0:
                raise Exception
        return l
exec(stdin.read())

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться



Заявка на расчет