- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Gauss-Seidel迭代算法的Python实现详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
2
|
import
numpy as np
import
time
|
1.1 Gauss-Seidel迭代算法 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
def
GaussSeidel_tensor_V2(A,b,Delta,m,n,M):
start
=
time.perf_counter()
find
=
0
X
=
np.ones(n)
d
=
np.ones(n)
m1
=
m
-
1
m2
=
2
-
m
for
i
in
range
(M):
print
(
'X'
,X)
x
=
np.copy(X)
#迭代更新
for
j
in
range
(n):
a
=
np.copy(A)
for
k
in
range
(m
-
2
):
a
=
np.dot(a,x)
for
k
in
range
(n):
d[k]
=
a[k,k]
a[k,k]
=
m2
*
a[k,k]
x[j]
=
(b[j]
-
np.dot(a[j],x))
/
(m1
*
d[j])
#判断是否满足精度要求
if
np.
max
(np.fabs(X
-
x))<Delta:
find
=
1
break
X
=
np.copy(x)
end
=
time.perf_counter()
print
(
'时间:'
,end
-
start)
print
(
'迭代'
,i)
return
X,find,i,end
-
start
|
1.2张量A的生成函数和向量b的生成函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
def
Creat_A(m,n):
#生成张量A
size
=
np.full(m, n)
X
=
np.ones(n)
while
1
:
#随机生成给定形状的张量A
A
=
np.random.randint(
-
49
,
50
,size
=
size)
#判断Dx**(m-2)是否非奇异,如果是,则满足要求,跳出循环
D
=
np.copy(A)
for
i1
in
range
(n):
for
i2
in
range
(n):
if
i1!
=
i2:
D[i1,i2]
=
0
for
i
in
range
(m
-
2
):
D
=
np.dot(D,X)
det
=
np.linalg.det(D)
if
det!
=
0
:
break
#将A的对角面张量扩大十倍,使对角面占优
for
i1
in
range
(n):
for
i2
in
range
(n):
if
i1
=
=
i2:
A[i1,i2]
=
A[i1,i2]
*
10
print
(
'A:'
)
print
(A)
return
A
#由A和给定的X根据Ax**(m-1)=b生成向量b
def
Creat_b(A,X,m):
a
=
np.copy(A)
for
i
in
range
(m
-
1
):
a
=
np.dot(a,X)
print
(
'b:'
)
print
(a)
return
a
|
1.3 对称张量S的生成函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
def
Creat_S(m,n):
#生成对称张量B
size
=
np.full(m, n)
S
=
np.zeros(size)
print
(
'S'
,S)
for
i
in
range
(
4
):
#生成n为向量a
a
=
np.random.random(n)
*
np.random.randint(
-
5
,
6
)
b
=
np.copy(a)
#对a进行m-1次外积,得到秩1对称张量b
for
j
in
range
(m
-
1
):
b
=
outer(b,a)
#将不同的b叠加得到低秩对称张量S
S
=
S
+
b
print
(
'S:'
)
print
(S)
return
S
def
outer(a,b):
c
=
[]
for
i
in
b:
c.append(i
*
a)
return
np.array(c)
return
a
|
1.4 实验二 。
1
2
3
4
5
6
7
8
9
|
def
test_2():
Delta
=
0.01
#精度
m
=
3
#A的阶数
n
=
3
#A的维数
M
=
200
#最大迭代步数
X_real
=
np.array( [
2
,
3
,
4
])
A
=
Creat_A(m,n)
b
=
Creat_b(A,X_real,m)
GaussSeidel_tensor_V2(A,b,Delta,m,n)
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://www.cnblogs.com/Fengqiao/p/Gauss-Seidel-tensor.html 。
最后此篇关于Gauss-Seidel迭代算法的Python实现详解的文章就讲到这里了,如果你想了解更多关于Gauss-Seidel迭代算法的Python实现详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如果您有超过 1 个具有相同类名的(动态)文本框,并使用 jquery 循环遍历每个所述文本框,您是否可以假设每次选择文本框的顺序都是相同的? 示例: 文本框 1 值 = 1文本框 2 值 = 2文本
有人知道为什么这段代码无法顺利运行吗?它似乎不喜欢使用yield关键字进行迭代:我正在尝试从任何级别的列表或字典中挖掘所有数字(对列表特别感兴趣)。在第二次迭代中,它找到 [2,3] 但无法依次打印
我关于从 mysql 数据库导出数据并将其保存到 Excel 文件(多表)的创建脚本。我需要让细胞动态基因化。该脚本正确地显示了标题,但数据集为空。当我“回显”$value 变量时,我检查了数据是否存
我正在尝试在 Python 中运行模拟,由此我绘制了一个数组的随机游走图,给定了两个变量参数的设定水平。 但是,我遇到了一个问题,我不确定如何迭代以便生成 250 个不同的随机数以插入公式。例如我已经
我是学习 jquery 的新手,所以如果这是一个相对简单的问题,我深表歉意。我有一个 ID 为 ChartstoDisplay 的 asp.net 复选框列表。我正在尝试创建 jquery 来根据是否
我正在尝试根据在任意数量的部分中所做的选择找出生成有效案例列表的最佳方法。也许它不是真正的算法,而只是关于如何有效迭代的建议,但对我来说这似乎是一个算法问题。如果我错了,请纠正我。实现实际上是在 Ja
如果我使用 sr1 为 www.google.com 发送 DNSQR,我会收到几个 DNSRR(s) 作为回复,例如(使用 ans[DNSRR].show() 完成): ###[ DNS Resou
假设有这样一个实体类 @Entity public class User { ... public Collection followers; ... } 假设用户有成千上万的用户关注者。我想分页..
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Nested jQuery.each() - continue/break 这是我的代码: var steps =
我刚从 F# 开始,我想遍历字典,获取键和值。 所以在 C# 中,我会说: IDictionary resultSet = test.GetResults; foreach (DictionaryEn
我知道已经有很多关于如何迭代 ifstream 的答案,但没有一个真正帮助我找到解决方案。 我的问题是:我有一个包含多行数据的txt文件。 txt 文件的第一行告诉我其余数据是如何组成的。例如这是我的
我有 12 个情态动词。我想将每个模态的 .modal__content 高度与 viewport 高度 进行比较,并且如果特定模态 .modal__content 高度 vh addClass("c
在此JSFiddle (问题代码被注释掉)第一次单击空单元格会在隐藏输入中设置一个值,并将单元格的背景颜色设置为绿色。单击第二个空表格单元格会设置另一个隐藏输入的值,并将第二个单元格的背景颜色更改为红
这是一个非常具体的问题,我似乎找不到任何特别有帮助的内容。我有一个单链表(不是一个实现的链表,这是我能找到的全部),其中节点存储一个 Student 对象。每个 Student 对象都有变量,尽管我在
有没有办法迭代 IHTMLElementCollection? 比如 var e : IHTMLLinkElement; elementCollection:IHTMLElementCollect
我正在尝试用 Java 取得高分。基本上我想要一个 HashMap 来保存 double 值(因此索引从最高的 double 值开始,这样我更容易对高分进行排序),然后第二个值将是客户端对象,如下所示
我想在宏函数中运行 while/until 循环,并限制其最大迭代次数。我找到了如何在“通常”sas 中执行此操作: data dataset; do i=1 to 10 until(con
Iterator iterator = plugin.inreview.keySet().iterator(); while (iterator.hasNext()) { Player key
晚上好我有一个简单的问题,我警告你我是序言的新手。假设有三个相同大小的列表,每个列表仅包含 1、0 或 -1。我想验证对于所有 i,在三个列表的第 i 个元素中,只有一个非零。 此代码针对固定的 i
我在 scheme 中构建了一个递归函数,它将在某些输入上重复给定函数 f, n 次。 (define (recursive-repeated f n) (cond ((zero? n) iden
我是一名优秀的程序员,十分优秀!