为什么我的答案是';Python中的小数不正确?

为什么我的答案是';Python中的小数不正确?,python,arrays,numpy,scipy,Python,Arrays,Numpy,Scipy,我目前正忙于一个问题,需要使用Jacobi方法求解Ax=b,其中创建的函数必须返回x和x的2范数 该问题指出,当b输入为 b = [71; 42;-11;-37;-61; 52] T = 2 N = 2 我应该得到的答案是x=[2.73186728;1.44791667;0.62885802;6.32696759;6.390625;3.33012821]和x的范数10.0953 但是我得到了x=[3.07507642;0.58675203;-0.64849988;5.33343053;6.66

我目前正忙于一个问题,需要使用Jacobi方法求解Ax=b,其中创建的函数必须返回x和x的2范数

该问题指出,当b输入为

b = [71; 42;-11;-37;-61; 52]
T = 2
N = 2
我应该得到的答案是
x=[2.73186728;1.44791667;0.62885802;6.32696759;6.390625;3.33012821]
和x的范数
10.0953

但是我得到了
x=[3.07507642;0.58675203;-0.64849988;5.33343053;6.66765397;4.16161712]
和x的2个范数
10.0221

我试图找到我的代码中的错误所在,但发现它很困难…下面是我的代码

将numpy导入为np
来自numpy.linalg进口规范
从numpy导入数组
从scipy.linalg导入解决方案
def jacobi(A,b,x0,N):
n=A.形状[0]
x=x0.copy()
k=0
x_prev=x0.copy()
对于范围(0,n)内的i:
subs=0.0
对于范围(0,n)内的j:
如果我j:
subs+=np.矩阵(A[i,j])*np.矩阵(x_prev[j])
x[i]=(b[i]-subs)/np.矩阵(A[i,i])
k+=1
返回(x)
A=数组([[18,1,4,3,-1,2],
[2, 12, -1, 7, -2, 1],
[-1, 1, -9, 2, -5, 2],
[2, 4, 1, -12, 1, 3],
[1, 3, 1, 7, -16, 1],
[-2, 1, 7, -1, 2, 13]]) 
x0=数组([[0]、[0]、[0]、[0]、[0]、[0])
_b_的元素_和_N=list(映射(float,input().split(“”)))
b_和N=数组(元素b_和N的元素)。重塑(A.shape[0]+1,)
b=b_和N[:A.形状[0]]
N=b_和N[A.shape[0]]
x=雅可比(A,b,x0,N)
打印((解算(A,b)))
打印(圆形(标准((求解(A,b)),2),4))

您是如何计算真实值的

该问题表明,当b输入为b=[71; 42;-11;-37;-61;52]T和N=2,我应该得到的答案 是x=[2.73186728;1.44791667;0.62885802;6.32696759;6.390625; 3.3301821]和x 10.0953的范数

当我执行:

x0 = array([[0], [0], [0], [0], [0], [0]], dtype=float)
A = array([[18, 1, 4, 3, -1, 2],
       [2, 12, -1, 7, -2, 1],
       [-1, 1, -9, 2, -5, 2],
       [2, 4, 1, -12, 1, 3],
       [1, 3, 1, 7, -16, 1],
       [-2, 1, 7, -1, 2, 13]])
b = array([[71], [42], [-11], [-37], [-61], [52]], dtype=float)

print(solve(A, b))
我得到:

[[ 3.07507642]
[ 0.58675203]
[-0.64849988]
[ 5.33343053]
[ 6.66765397]
[ 4.16161712]]
就像你对待雅各比一样


希望这能有所帮助:)

这是一种非常简单的写作方法。非常感谢。