在下面的代码中,我尝试实现以下内容
我想首先从第二个要点开始,创建三对角解算器。这就是托马斯算法。我花了一些时间来创建这部分代码,并在下面格式化了它。但现在我正在努力完成第一和第三个要点,但我不知道如何利用我已经做的来完成这些。正在寻求帮助!提前谢谢。在
import numpy as np
def TDMA(a,b,c,d):
n = len(d)
w= np.zeros(n-1,float)
g= np.zeros(n, float)
p = np.zeros(n,float)
w[0] = c[0]/b[0]
g[0] = d[0]/b[0]
for i in range(1,n-1):
w[i] = c[i]/(b[i] - a[i-1]*w[i-1])
for i in range(1,n):
g[i] = (d[i] - a[i-1]*g[i-1])/(b[i] - a[i-1]*w[i-1])
p[n-1] = g[n-1]
for i in range(n-1,0,-1):
p[i-1] = g[i-1] - w[i-1]*p[i]
return p
A = np.array([[10,2,0,0],[3,10,4,0],[0,1,7,5], [0,0,3,4]],dtype=float)
a = np.array([3.,1,3])
b = np.array([10.,10.,7.,4.])
c = np.array([2.,4.,5.])
d = np.array([3,4,5,6.])
print (TDMA(a, b, c, d))
它给出了正确的输出,我甚至用它进行了测试np.linalg.求解(a,b,c,d)以确保它是正确的
^{pr2}$
对于每个区间[x_k,x(k+1)],您可以求解四个方程
(在不检查代码的情况下,我假设这就是您所做的)。 从这里,你可以构造一个dict
对于250点中的每个x,检查点x在区间[x\k,x(k+1)]中的哪个k并计算p_k(x)。在
所有这些都是直截了当的数学和python编码。如果有什么不清楚的地方,你最好多了解这两个领域,而不是在这个网站上得到专门的建议。在
相关问题 更多 >
编程相关推荐