Ошибка переполнения при решении линейного уравнения - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь решить уравнение с полосами, используя функцию из книги по вычислительной физике: http://www -personal.umich.edu / ~ mejn / cp / Programs / banded.py Однако запуск функции вызывает ошибку переполнения:

OverflowError: cannot convert float infinity to integer in banded line 39: v[m] /= div

Матрица A и w:

A = 
[[ 3 -1 -1 ...  0  0  0]
 [-1  4 -1 ...  0  0  0]
 [-1 -1  4 ...  0  0  0]
 ...
 [ 0  0  0 ...  4 -1 -1]
 [ 0  0  0 ... -1  4 -1]
 [ 0  0  0 ... -1 -1  3

w = [5 5 0 ... 0 0 0]

x = banded(A,w,2,2)

Может кто-нибудь помочь мне выяснить, почему возникает ошибка переполнения при использовании этой функции? Спасибо.

1 Ответ

1 голос
/ 16 марта 2019

Я думаю, вы должны превратить A в матрицу с полосами, как показано в banded.py

(  -   -  A02 A13 A24 ...
(  -  A01 A12 A23 A34 ...
( A00 A11 A22 A33 A44 ...
( A10 A21 A32 A43 A54 ...
( A20 A31 A42 A53 A64 ...

Кроме того, я считаю, что функция с полосами не будет работать должным образом, если матричные элементы в матрице A или в векторе w являются целыми числами, вы можете рассмотреть возможность инициализации ее в число с плавающей точкой.

...