Форум сайта python.su
Добрый день!
Сразу хочу извиниться, что в данном вопросе о пайтоне будет говориться лишь косвенно.
Прохожу онлайн курс “Основы программирования на Python” на курсере, курс нравится хоть в задачах чаще больше логики и математики чем пайтона. Наткнулся на одну задачу которую не понимаю как решить, вот она:
Даны вещественные числа a, b, c, d, e, f. Известно, что система линейных уравнений:
ax + by = e
cx + dy = f
имеет ровно одно решение. Выведите два числа x и y, являющиеся решением этой системы.
Формат ввода
Вводятся шесть чисел a, b, c, d, e, f
- коэффициенты уравнений системы.
Формат вывода
Выведите ответ на задачу.
Тест 1
Входные данные:
1
0
0
1
3
3
Вывод программы:
3 3
Вопрос в следующем, я не понимаю как решается данная система, ведь если решить ее на бумаге методом подстановки или даже методом Крамера ответ будет х = 0, а у = 1. Откуда здесь х = 3, у = 3. Не понимаю. Подскажите пожалуйста.
Офлайн
Тут даже из входных данных, без всяких методов подстановки и Крамера, видно что х=3 у=3
Отредактировано krok64 (Июнь 26, 2017 09:42:11)
Офлайн
krok64Мне не видно, потому и спрашиваю. Объясните, если Вам все очевидно. Для меня, например,
Тут даже из входных данных, без всяких методов подстановки и Крамера, видно что х=3 у=3
Офлайн
tolk
ax + by = e
cx + dy = f
tolk
Вводятся шесть чисел a, b, c, d, e, f
tolkаккуратно подставляем и:
Входные данные:
1
0
0
1
3
3
Офлайн
krok64Ошибку своей невнимательности осознал, спасибо!
Офлайн
При решении данной задачи нужно учесть различные варианты:
1) система имеет множество решений, т.е. a,b,e = lambda*(c,d,f), где lambda – какая-то константа, отличная от нуля;
2) система не имеет решений, это когда (a,b) = lambda *(c, d), но e != lambda * f;
3) система имеет единственное решение: (a,b) != lambda*(c,d) при любом lambda != 0.
эти условия можно выразить через определитель матрицы: a*d-b*c,
в случае систем большой размерности, однако, для решения определители не используют, поскольку их вычисление может быть сопряжено с вычислительными погрешностями. Для решения систем используют ортогональные преобразования, которые позволяют привести матрицу, например, к верхнетреугольной форме, или даже двухдиагональной…
Офлайн
scidamЧтобы не изобретать велосипед можно взять numpy.linalg.solve()
При решении данной задачи нужно учесть различные варианты:
Офлайн
tolk
Даны вещественные числа a, b, c, d, e, f. Известно, что система линейных уравнений:
ax + by = e
cx + dy = f
имеет ровно одно решение. Выведите два числа x и y, являющиеся решением этой системы.
x = (e - b * y) / a
y = (f - c * ((e - b * y) / a)) / d
x = (e - b * y) / a
y = ...
Отредактировано py.user.next (Июнь 27, 2017 03:00:51)
Офлайн
Прохожу курс на одном онлайн ресурсе. Столкнулся с задачей по решению линейных уравнений. Автоматическая проверка указывает, что мой код выдает неверный ответ. Может кто-то подскажет где я ошибаюсь?
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) if (a * d - b * c) != 0: if (a * f - e * c) == 0: y = 0 if a != 0: if (e - b * y) == 0: x = 0 print(float(x), float(y)) else: x = (e - b * y) / a print(float(x), float(y)) else: y = (a * f - e * c) / (a * d - b * c) if a != 0: if (e - b * y) == 0: x = 0 print(float(x), float(y)) else: x = (e - b * y) / a print(float(x), float(y))
Отредактировано sahandalya (Дек. 14, 2017 13:39:14)
Офлайн
Сам решил.
a = float(input()) b = float(input()) c = float(input()) d = float(input()) e = float(input()) f = float(input()) if b != 0: y = (c * e - a * f) / (b * c - a * d) if c != 0: x = (f - d * y) / c print(x, y) else: if a != 0: x = (f * b - d * e) / (b * c - d * a) if d != 0: y = (f - c * x) / d print(x, y)
Офлайн