Дело в том что модуль sg1 не работает можно ли сделать так чтобы он заработал и как помогите.
/usr/bin/python /home/kardashevskiy/PycharmProjects/tests/qwe1.py
Traceback (most recent call last):
File “/home/kardashevskiy/PycharmProjects/tests/qwe1.py”, line 51, in <module>
v, info = sg1(B, b,tol=1.e-08)
File “/home/kardashevskiy/PycharmProjects/tests/sg1.py”, line 13, in sg1
r=np.dot(B,x)-b
File “/usr/lib/python2.7/dist-packages/scipy/sparse/compressed.py”, line 193, in __sub__
raise NotImplementedError('adding a scalar to a sparse ‘
NotImplementedError: adding a scalar to a sparse matrix is not supported
Process finished with exit code 1
import numpy as np
from scipy import sparse
def sg1(B,b,tol=1.0e-8):
“”“
Solve the linear system Ax=b by conjugate gradient method
”“”
n=len(b)
x=np.zeros((n),’float')
r=np.copy(b)
for i in range(n):
r=np.dot(B,x)-b
s=np.copy(r)
As=np.zeros((n),'float')
for k in range(n):
for i in range(n):
As=np.dot(B,s)
alpha=np.dot(r,r)/np.dot(s,As)
x=x-alpha*s
for i in range(n):
r=np.dot(B,x)-b
if np.dot(r,r)<tol**2:
break
else:
beta=-np.dot(r,As)/np.dot(s,As)
s=r+beta*s
return x,k
#Hyperbolic equation
import numpy as np
from scipy import sparse
from scipy.sparse import linalg
from sg1 import sg1
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time
def f(x, y, r):
return 2*c*(y-y**2+r*(x**2-x))
def poisson(n, h, r):
V =
I =
J =
b =
for j in range(n):
for i in range(n):
k = i+n*j
b.append(h**2*f(i*h+h, j*h+h, r))
V.append(2.-2*r)
I.append(k)
J.append(k)
if i>0:
V.append(-1.)
I.append(k)
J.append(k-1)
if i<n-1:
V.append(-1.)
I.append(k)
J.append(k+1)
if j>0:
V.append(r)
I.append(k)
J.append(k-n)
if j<n-1:
V.append(r)
I.append(k)
J.append(k+n)
# return ((V, (I,J))), b
return sparse.coo_matrix((V, (I,J))), b
# return()
N =100
h = 1./N
c = 4.
r = 0.4
tst = time.clock()
A, b = poisson(N-1, h, r)
B = A.tocsr()
v, info = sg1(B, b,tol=1.e-08)
dt = time.clock() - tst
if iter == 0:
print “N = %i, time solution = %1.3e” % (N, dt)
fig = plt.figure()
ax = Axes3D(fig)
x = np.linspace(h/2, 1.-h/2, N-1)
y = np.linspace(h/2, 1.-h/2, N-1)
X,Y = np.meshgrid(x, y)
Z = np.reshape(v, (N-1, N-1))
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap='spectral')
plt.show()