Найти - Пользователи
Полная версия: Нужна помощь в программировании
Начало » Python для новичков » Нужна помощь в программировании
1
Urung
Дело в том что модуль 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()




Singularity
Фоллов ми
terabayt
испоьзуйтеподстветкусинтаксисаатооченьнеудобночитать
ну как? все понятно)) перезалейте код в норм виде и вставьте перед
v, info = sg1(B, b,tol=1.e-08)
print B, b
и покажите что оно выдаст
Urung
Это модуль который должен работать. В другой программе в котором нет разреженной матрицы она работает
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[i]=np.dot(B[i,0:n],x[0:n])-b[i]
    s=np.copy(r)
    As=np.zeros((n),'float')
    for k in range(n):
        for i in range(n):
            As[i]=np.dot(B[i,0:n],s[0:n])
        alpha=np.dot(r,r)/np.dot(s,As)
        x=x-alpha*s
        for i in range(n):
            r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
        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
А вот основная программа в которой этот модуль должен работать но не хочет вроде dot не поддерживает разреженные матрицы как сделать так чтобы заработала помогите
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 sparse.coo_matrix((V, (I,J))), b
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()
выдает вот такую ошибку
Traceback (most recent call last):
  File "/home/kardashevskiy/PycharmProjects/tests/qwe1.py", line 47, in <module>
    v, info = sg1(B, b,tol=1.e-08)
  File "/home/kardashevskiy/PycharmProjects/tests/sg1.py", line 13, in sg1
    r[i]=np.dot(B[i,0:n],x[0:n])-b[i]
  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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB