Почему это равенство возвращает False на Scilab?
Я изучаю Scilab для образовательных целей.
Когда мы имеем дело с устранением Гаусса, имеем Ax = b. "A" - это матрица с коэффициентами из линейных уравнений, "x" - это вектор с переменными, а "b" - это вектор с "решениями" из линейной системы.
Давайте предположим, что А это:
10. - 7. 0.
- 3. 2.09 6.
5. - 1. 5.
И б есть:
7.
3.91
6.
Используя исключение Гаусса внутри Scilab, мы получаем значения x как:
- 3.109D-14
- 1.
1.
Obs: - 3.109D-14 - число, близкое к нулю.
Когда я делаю матричное умножение на A*x, я получаю вектор 3x1 с теми же компонентами, что и вектор "b":
Наконец, я сомневаюсь: если A * x имеет те же значения, что и "b", почему равенство ниже возвращает False в Scilab?
1 ответ
Вероятно, это связано с ошибкой округления и внутренними ограничениями математики с плавающей запятой, на что указывает Normal Human в своем комментарии.
Еще одна вещь, которую нужно помнить: консоль Scilab выводит округленные значения, поэтому внутри обычно больше десятичных разрядов, которые не отображаются, если не задано явно, например mprintf("x= %.30f", x(1));
Чтобы обойти эту проблему, вы можете попробовать clean
твой массив, то есть, округляет очень маленькие значения до 0. Попробуйте увидеть результат:
A*clean(x)==b