前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现所有算法-雅可比方法(Jacobian)

Python实现所有算法-雅可比方法(Jacobian)

作者头像
云深无际
发布2022-08-05 11:39:26
1.3K0
发布2022-08-05 11:39:26
举报
文章被收录于专栏:云深之无迹

Python实现所有算法-二分法

Python实现所有算法-力系统是否静态平衡

Python实现所有算法-力系统是否静态平衡(补篇)

Python实现所有算法-高斯消除法

Python实现所有算法-牛顿-拉夫逊(拉弗森)方法

断断续续的写了五篇了,夸我!

可恶,优不见了

有一说一,矩阵的数值算法不是那么简单的写,我这里会推荐一些学习的资源假如你愿意学的话。

首先是最出名(国内的嗷)的一个教材

其中一个封面是这个

还有一个是这样的

当然了,还有一个黄皮的数值计算的书,和数学建模的封面是一样的。其实我收集了很多相关的图书,只是硬盘不在手边,有机会可以分享一下。

这里推荐一个课程,中科大的,当然没有什么视频资料,不过PPT做的很好。

科大的数值计算

PPT一观

课程的特点

课程研究的东西

关于代码也推荐一本C数值代码,就平平无奇的名字

对于视频的话,这里推荐苏州大学:

妈妈,我在B大学上课

反正万国造

你以后可以这样说,看的清华的教程,翻的中科大的PPT,研究的苏州大学的视频,抄的云深无际的公众号的代码。

不管怎么说,学会就行,一个确定的知识和结论不会随着载体的不一样而便便,因为你学的是本质。

我相信很多人的学校都寡,但是又没有剥夺你学习的权力,所以你不学才是蛋疼的地方。

开始正文了:

对于矩阵求解,我们大体分为,A稠密不稠密:

那么就会演化出来两个解决的办法

感谢CSDN一位作者的总结,绘制了一观漂亮的思维导图

雅克比迭代法的优点明显,计算公式简单,每迭代一次只需计算一次矩阵和向量的乘法,且计算过程中原始矩阵 A (A在上面说明了)始终不变,比较容易并行计算。然而这种迭代方式收敛速度较慢,而且占据的存储空间较大,所以工程中一般不直接用雅克比迭代法,而用其改进方法。

这个迭代法又称为辗转法,是用计算机解决问题的一种基本方法,为一种不断用变量的旧值递推新值的过程,与直接法相对应,一次性解决问题。迭代法分为精确迭代和近似迭代,“二分法”和“牛顿迭代法”属于近似迭代法。迭代法利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

再说矩阵的求解:

考虑线性方程组Ax = b时,一般当A为低阶稠密矩阵时,用主元消去法解此方程组是有效方法。但是,对于由工程技术中产生的大型稀疏矩阵方程组(A的阶数很高,但零元素较多,例如求某些偏微分方程数值解所产生的线性方程组),利用迭代法求解此方程组就是合适的,在计算机内存和运算两方面,迭代法通常都可利用A中有大量零元素的特点。雅克比迭代法就是众多迭代法中比较早且较简单的一种,其命名也是为纪念普鲁士著名数学家雅可比。

这里总结一句话,雅可比算法是:用于确定严格对角占优的线性方程组的解。

在数学中,如果对于矩阵的每一行,一行中对角线条目的大小大于或等于所有其他(非对角线)的大小之和,则称方阵为对角占优该行中的条目。更准确地说,矩阵A是对角占优的,如果:

定义给出来了

多说无疑,你可以参考这个学习对角占优矩阵

所以这里的A是指非奇异的大规模稀疏矩阵。

什么是稀疏矩阵???毕竟一开始就写了。

概念:在实际问题中,特别是微分方程数值解法中,出现的线性代数方程组的系数矩阵往往系数很高,但其非零元素所占的比例很小,我们常把这类矩阵成为大型稀疏矩阵。

理解:零元素很多的多阶矩阵。

注意:求解此类系数矩阵若使用Gauss消元法常常会破坏矩阵稀疏性,另分解过程中出现大量非零元素。

再插一个:

什么是非奇异阵呢?非奇异矩阵是行列式不为 0 的矩阵,也就是可逆矩阵。意思是n 阶方阵 A 是非奇异方阵的充要条件是 A 为可逆矩阵,也即A的行列式不为零。即矩阵(方阵)A可逆与矩阵A非奇异是等价的概念。

理论的东西先说上面那么多,都是概念,说计算的时候的样子。

首先将方程组中的系数矩阵A分解成三部分,即:A = L+D+U,如下图所示,其中D为对角阵,L为下三角矩阵,U为上三角矩阵。

之后确定迭代格式,X^(k+1) = B*X^(k) +f ,(这里^表示的是上标,括号内数字即迭代次数),如下图所示,其中B称为迭代矩阵,雅克比迭代法中一般记为J。(k = 0,1,......)

再选取初始迭代向量X^(0),开始逐次迭代。

理论是这样的

也就是说,对角线分量D,下三角部分L,和上三角U

伪算法是这样的

其实这个算法除了矩阵符合要求以外,最重要的迭代格式的转换。

我们的线性方程组是这样的

把A可以分解成三个矩阵的加和

最终的迭代格式是这样的

对具体元素的迭代公式是这样

在代码实现的部分,频繁的会看到__future__这个库,SO?是什么。

是这样的

关于annotation其实是一个PEP的提案。

这也就是它的作用

我们对函数的设计是需要两个多维的数组,对应在我们的线性方程组,迭代的初始值也要设计,不然从哪里开始迭代呢?以及想迭代的次数。

对于此函数的一个输入来说是这样的

代码语言:javascript
复制
coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]])
constant = np.array([[2], [-6], [-4]])
init_val = [0.5, -0.5, -0.5]
iterations = 3

jacobi_iteration_method(coefficient, constant, init_val, iterations)
[0.909375, -1.14375, -0.7484375]

看见这种代码其实就有一点优雅

为了确保我们的矩阵可以进行迭代,这里要做大量的参数上面的判断,对于一个算法来讲,正确的结果总是建立在正确的输入上。错误处理统一为值错误。

还缺了一个,迭代次数至少为1次

我们这里要把系数和常数矩阵连在一起,后面的参数在前面的文章里有解释

靓仔记得我上面写的对角占优的事情吗?某种意义上还是在对参数的判断

这代码按说看的懂吧?

对矩阵进行了严密的(笑死)

想了想,就是这么严密的计算,最后给个结论!接下来的迭代可以继续

迭代的次数是参数,接着一个列表来承接中间的值,行列开始计算

这就是迭代公式,最后下次要迭代的初值计算出来

写的有点早了,这样才对,最后是把迭代的值都发出去

现在请返回去再看看函数,可能就不是那么陌生了

前几天给地平线写的文章地平线机器人平台发布浅谈(可能是深谈),获得了一个X3派,今天拿到手了。

里面的内容物

剥皮摆线,重新拍一次

后背

因为在外面鬼混,手头没有内存卡,也测试不了

这里也可以随手抓个靓仔,评测一下体积,真的很小

接下来有时间会来一段时间地平线X3的相关文章,Logo好评

另外地平线的工作人员100昏,对开发者问的问题基本上手把手教了

这里突然发现还能内推地平线

实不相瞒,想去

代码语言:javascript
复制
原文链接:https://blog.csdn.net/bertZuo/article/details/86151559
代码语言:javascript
复制
https://baike.baidu.com/item/%E9%9B%85%E5%85%8B%E6%AF%94%E8%BF%AD%E4%BB%A3%E6%B3%95/8736410?fr=aladdin
代码语言:javascript
复制
百度网盘链接:https://pan.baidu.com/s/12Ta7pH_eDtegPdmOJyrWGw 

提取码:eouz 作者:全面战争魔兽 https://www.bilibili.com/read/cv15091660 出处:bilibili
代码语言:javascript
复制
http://staff.ustc.edu.cn/~tongwh/NA_2021/#General
代码语言:javascript
复制
https://www.bilibili.com/video/BV18741177td?spm_id_from=333.999.0.0&vd_source=4d701f61fa0ceae0a5ab579df26e314c

B站

代码语言:javascript
复制
https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/

MIT的一个课程

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档