python实现gauss-seidel迭代公式_多线性方程组迭代算法——Gauss-Seidel迭代算法的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))

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迭代

转载: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算法的基本思想是将全部数据点都 ...

随机推荐

关于CSS Hack

CSS Hack由于不同厂商的浏览器,如Internet Explorer,Safari,Mozilla Firefox,Chrome 等,或者是同一厂商的浏览器的不同版本,如IE6和IE7,对CSS ...

关于“怎么比较两个SQL查询语句产生的结果集是否相同”搜集到的一些资料

一. 如果你这两个结果集都没有close,可以这样: rs.last(); rs2.last(); if (rs.getRow() != rs2.getRow()) { //记录数不等,即结果不等 } ...

Quartz定时任务学习(五)触发器

顾名思义,Trigger(触发器)的责任就是触发一个 Job 去执行.当用 Scheduler 注册一个 Job 的时候要创建一个 Trigger 与这个 Job 相关联.Quartz 提供了四种类型 ...

完成端口IOCP详解

修改自: http://blog.csdn.net/piggyxp/article/details/6922277 ps: 原作者很厉害了, 把一个iocp模型讲解的这么形象,不过在实践过程中发现一些 ...

SpringAOP 通知(advice)

@Aspect @Order(1) public class AopOne { /** * 目标方法执行之前 * @param joinPoint */ @Before("executi ...

8 求s=a+aa+aaa+aaaa+aa...a的值

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.程序分析:关键是计算出每一项的 ...

(转)linux shell 数字计算详解

代码中免不了要进行各种数据计算.抛开科学计算不提,普通的计算占地,百分比,同比,环比等需求就很常见.linux shell中进行数字计算,主要有如下几种方式: 1.bc bc是比较常用的linux计算 ...

Python基础 之 数据类型

数据类型 一.运算符 算数运算a = 10 * 10赋值运算a = a + 1 a+=1 布尔值:True 真 False 假 if True: pass while True: pass v = n ...

HDU 2094 拓扑排序

产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

Android界面编程--使用活动条(ActionBar)--添加Action View

ActionBar除了显示Action Item 外,还能显示普通的ui组件 2种方式添加Action View 1.指定ActionView的实现类 2.指定ActionView对应的视图资源 实现 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值