Почему это равенство возвращает 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
Другие вопросы по тегам