多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现
多线性方程组(张量)迭代算法的原理请看这里:原理部分请留言,不方便公开分享
Jacobi迭代算法里有详细注释:多线性方程组迭代算法——Jacobi迭代算法的Python实现
- import numpy as np
- import time
1.1 Gauss-Seidel迭代算法
- 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的生成函数:
- 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的生成函数:
- 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 实验二
- 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)
多线性方程组迭代算法——Gauss-Seidel迭代算法的Python实现的更多相关文章
- gauss——seidel迭代
转载:https://blog.csdn.net/wangxiaojun911/article/details/6890282 Gauss–Seidelmethod 对应于形如Ax = b的方程(A为 ...
- 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)
梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...
- Floyd-Warshall算法,简称Floyd算法
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3). 使用条件&范围通常可以在任何图中使用,包括有向图.带负权边的图. Floyd-W ...
- 链接分析算法之:HITS算法
链接分析算法之:HITS算法 HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jo ...
- 机器学习:Python实现聚类算法(一)之AP算法
1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...
- 静态频繁子图挖掘算法用于动态网络——gSpan算法研究
摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...
- 机器学习算法总结(六)——EM算法与高斯混合模型
极大似然估计是利用已知的样本结果,去反推最有可能(最大概率)导致这样结果的参数值,也就是在给定的观测变量下去估计参数值.然而现实中可能存在这样的问题,除了观测变量之外,还存在着未知的隐变量,因为变量未 ...
- 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)
本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...
- 数据挖掘十大算法--K-均值聚类算法
一.相异度计算 在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度.用通俗的话说.相异度就是两个东西区别有多大.比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...
- 机器学习:Python实现聚类算法(二)之AP算法
1.算法简介 AP(Affinity Propagation)通常被翻译为近邻传播算法或者亲和力传播算法,是在2007年的Science杂志上提出的一种新的聚类算法.AP算法的基本思想是将全部数据点都 ...
随机推荐
- java Activiti6.0 后台 框架 spring5 SSM 工作流引擎 审批流程
1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...
- ubuntu vim8.1编译安装
sudo apt-get install libncurses5-dev python-dev python3-dev libgtk-3-dev libatk1.0-dev libbonoboui2- ...
- 关于javascript中的构造函数和普通函数探索 [转]
这是第一篇关于javascript模块的文章,在javascript入门的目录下,主要是记录一些对网上精彩的js研读碰到的疑惑,并做一些实验和探索 关于js中的对象和方法的定义博主感到非常的迷惑.针对 ...
- 十、.NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件
十..NET使用本地Outlook邮箱指定邮箱用户名和密码发送邮件 1.添加Microsoft.Office.Interop.Outlook引用 2.封装发送邮件方法 using System; us ...
- Sass函数:Opacity函数-opacify()、fade-in()函数
这两个函数是用来对已有颜色的透明度做一个加法运算,会让颜色更加不透明.其接受两个参数,第一个参数是原始颜色,第二个参数是你需要增加的透明度值,其取值范围主要是在 0~1 之间.当透明度值增加到大于 1 ...
- [BZOJ5073] [Lydsy1710月赛]小A的咒语 后缀数组+dp+贪心
题目链接 首先这种题一看就是dp. 设\(dp[i][j]\)表示\(A\)序列中到\(i\)位之前,取了\(j\)段,在\(B\)中的最长的长度. 转移也比较简单 \[ dp[i][j] \to d ...
- jupyter notebook 几个方法
2. Pretty Display of Varibles 这部分内容可能很多人都知道.如果对带有一个变量或是未赋值语句的cell执行操作,Jupyter 将会自动打印该变量而无需一个输出语句. 如果 ...
- 在windows的文件添加右键"命令提示符"菜单
1\把以下内容保存为reg文件,然后导入 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\she ...
- boost function bind ref
boost::function to encapsulate function pointers. 1. function #include <boost/function.hpp> #i ...
- Vue学习笔记-父子通信案例
<div id="app"> <cpn :number1="num1" :number2="num2" @num1chan ...