Почему python не решает эту матричную корреляцию? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь поэкспериментировать с использованием матриц для решения полиномиальных выражений, и до сих пор это работало.

В моем коде:

import numpy as np

A = np.array([[1, 1, 1], [4,2,1], [9,3,1]])
B = np.array([2, 5, 10])
sol = np.linalg.solve(A, B)


print(sol)

Массив A - это только первые 3 значения требуется решить для квадрата c. Массив B предназначен для x ^ 2 + 1. Таким образом, результат функции должен быть:

[1. 0. 1.]

Вместо этого я получаю: [1.00000000e + 00 -8.32667268e-16 1.00000000e + 00]

Я получаю e + 00, но почему второе значение "-8.32667268e-16" ?? Я дважды проверил свою математику, и она должна быть x ^ 2 + 1.

Ответы [ 3 ]

2 голосов
/ 16 июня 2020

Технически это -8x10 ^ (- 16) ~ = 0, следовательно, ответ правильный. Хотя вы можете отформатировать его так, чтобы он был точно равен 0, используя сигмовидную функцию или просто используя теорему Ролля.

2 голосов
/ 16 июня 2020

-8.32667268e-16 = -0.0000000000000008326… Это ошибка округления с плавающей запятой. См. документацию .

0 голосов
/ 16 июня 2020

Потому что во время матричных операций числа немного округляются. Попробуйте:

import numpy as np

A = np.array([[1, 1, 1],
              [4, 2, 1],
              [9, 3, 1]])

B = np.array([2, 5, 10])
sol = [round(n) for n in np.linalg.solve(A, B)]

print(sol)

Вывод:

 [1.0, -0.0, 1.0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...