多线性方程组(张量)迭代算法的原理请看这里:原理部分请留言,不方便公开分享

Jacobi迭代算法里有详细注释:多线性方程组迭代算法——Jacobi迭代算法的Python实现

  1. import numpy as np
  2. import time

1.1 Gauss-Seidel迭代算法

  1. def GaussSeidel_tensor_V2(A,b,Delta,m,n,M):
  2. start=time.perf_counter()
  3. find=0
  4. X=np.ones(n)
  5. d=np.ones(n)
  6. m1=m-1
  7. m2=2-m
  8. for i in range(M):
  9. print('X',X)
  10. x=np.copy(X)
  11. #迭代更新
  12. for j in range(n):
  13. a=np.copy(A)
  14. for k in range(m-2):
  15. a=np.dot(a,x)
  16. for k in range(n):
  17. d[k]=a[k,k]
  18. a[k,k]=m2*a[k,k]
  19. x[j]=(b[j]-np.dot(a[j],x))/(m1*d[j])
  20. #判断是否满足精度要求
  21. if np.max(np.fabs(X-x))<Delta:
  22. find=1
  23. break
  24. X=np.copy(x)
  25. end=time.perf_counter()
  26. print('时间:',end-start)
  27. print('迭代',i)
  28. return X,find,i,end-start

1.2张量A的生成函数和向量b的生成函数:

  1. def Creat_A(m,n):#生成张量A
  2. size=np.full(m, n)
  3. X=np.ones(n)
  4. while 1:
  5. #随机生成给定形状的张量A
  6. A=np.random.randint(-49,50,size=size)
  7. #判断Dx**(m-2)是否非奇异,如果是,则满足要求,跳出循环
  8. D=np.copy(A)
  9. for i1 in range(n):
  10. for i2 in range(n):
  11. if i1!=i2:
  12. D[i1,i2]=0
  13. for i in range(m-2):
  14. D=np.dot(D,X)
  15. det=np.linalg.det(D)
  16. if det!=0:
  17. break
  18. #将A的对角面张量扩大十倍,使对角面占优
  19. for i1 in range(n):
  20. for i2 in range(n):
  21. if i1==i2:
  22. A[i1,i2]=A[i1,i2]*10
  23. print('A:')
  24. print(A)
  25. return A
  26.  
  27. #由A和给定的X根据Ax**(m-1)=b生成向量b
  28. def Creat_b(A,X,m):
  29. a=np.copy(A)
  30. for i in range(m-1):
  31. a=np.dot(a,X)
  32. print('b:')
  33. print(a)
  34. return a

1.3 对称张量S的生成函数:

  1. def Creat_S(m,n):#生成对称张量B
  2. size=np.full(m, n)
  3. S=np.zeros(size)
  4. print('S',S)
  5. for i in range(4):
  6. #生成n为向量a
  7. a=np.random.random(n)*np.random.randint(-5,6)
  8. b=np.copy(a)
  9. #对a进行m-1次外积,得到秩1对称张量b
  10. for j in range(m-1):
  11. b=outer(b,a)
  12. #将不同的b叠加得到低秩对称张量S
  13. S=S+b
  14. print('S:')
  15. print(S)
  16. return S
  17. def outer(a,b):
  18. c=[]
  19. for i in b:
  20. c.append(i*a)
  21. return np.array(c)
  22. return a

1.4 实验二

  1. def test_2():
  2. Delta=0.01#精度
  3. m=3#A的阶数
  4. n=3#A的维数
  5. M=200#最大迭代步数
  6. X_real=np.array( [2,3,4])
  7. A=Creat_A(m,n)
  8. b=Creat_b(A,X_real,m)
  9. GaussSeidel_tensor_V2(A,b,Delta,m,n)

多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现的更多相关文章

  1. gauss——seidel迭代

    转载:https://blog.csdn.net/wangxiaojun911/article/details/6890282 Gauss–Seidelmethod 对应于形如Ax = b的方程(A为 ...

  2. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)

    梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...

  3. Floyd-Warshall算法,简称Floyd算法

    Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3). 使用条件&范围通常可以在任何图中使用,包括有向图.带负权边的图. Floyd-W ...

  4. 链接分析算法之:HITS算法

    链接分析算法之:HITS算法     HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jo ...

  5. 机器学习:Python实现聚类算法(一)之AP算法

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

  6. 静态频繁子图挖掘算法用于动态网络——gSpan算法研究

    摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...

  7. 机器学习算法总结(六)——EM算法与高斯混合模型

    极大似然估计是利用已知的样本结果,去反推最有可能(最大概率)导致这样结果的参数值,也就是在给定的观测变量下去估计参数值.然而现实中可能存在这样的问题,除了观测变量之外,还存在着未知的隐变量,因为变量未 ...

  8. 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)

    本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...

  9. 数据挖掘十大算法--K-均值聚类算法

    一.相异度计算  在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度.用通俗的话说.相异度就是两个东西区别有多大.比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...

  10. 机器学习:Python实现聚类算法(二)之AP算法

    1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...

随机推荐

  1. java Activiti6.0 后台 框架 spring5 SSM 工作流引擎 审批流程

    1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...

  2. ubuntu vim8.1编译安装

    sudo apt-get install libncurses5-dev python-dev python3-dev libgtk-3-dev libatk1.0-dev libbonoboui2- ...

  3. 关于javascript中的构造函数和普通函数探索 [转]

    这是第一篇关于javascript模块的文章,在javascript入门的目录下,主要是记录一些对网上精彩的js研读碰到的疑惑,并做一些实验和探索 关于js中的对象和方法的定义博主感到非常的迷惑.针对 ...

  4. 十、.NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件

    十..NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件 1.添加Microsoft.Office.Interop.Outlook引用 2.封装发送邮件方法 using System; us ...

  5. Sass函数:Opacity函数-opacify()、fade-in()函数

    这两个函数是用来对已有颜色的透明度做一个加法运算,会让颜色更加不透明.其接受两个参数,第一个参数是原始颜色,第二个参数是你需要增加的透明度值,其取值范围主要是在 0~1 之间.当透明度值增加到大于 1 ...

  6. [BZOJ5073] [Lydsy1710月赛]小A的咒语 后缀数组+dp+贪心

    题目链接 首先这种题一看就是dp. 设\(dp[i][j]\)表示\(A\)序列中到\(i\)位之前,取了\(j\)段,在\(B\)中的最长的长度. 转移也比较简单 \[ dp[i][j] \to d ...

  7. jupyter notebook 几个方法

    2. Pretty Display of Varibles 这部分内容可能很多人都知道.如果对带有一个变量或是未赋值语句的cell执行操作,Jupyter 将会自动打印该变量而无需一个输出语句. 如果 ...

  8. 在windows的文件添加右键"命令提示符"菜单

    1\把以下内容保存为reg文件,然后导入 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\she ...

  9. boost function bind ref

    boost::function to encapsulate function pointers. 1. function #include <boost/function.hpp> #i ...

  10. Vue学习笔记-父子通信案例

    <div id="app"> <cpn :number1="num1" :number2="num2" @num1chan ...