迭代法求解线性方程组(优于高斯消元法)

news/2024/5/2 8:00:59/文章来源:https://blog.csdn.net/weixin_61057398/article/details/127001515

在学习了直接法求解线性方程组之后,我们会发现,直接法利用高斯消元法求解,计算量较大(O(n3时间复杂度))(因为高斯消元法需要将每个元素都要考虑进去)其次.无法利用矩阵的稀疏性(0元素的个数),(0其实就不用计算了)从而引出迭代法(循环计算的过程):

目录

一、迭代法的方法介绍

 二、用python代码实现

1.代码实现思路(重点):

2.注意的问题

三、整体代码

四、运行结果


一、迭代法的方法介绍

1.目的:下面图片的左边是我写出的一个增广矩阵(m,b),求解:mx=b的解是多少,即:x1=?

x2=? x3=? x4=?

2.方法:先假设求出的解是 ans=[  0,  0 , 0,  0],即初始化。然后用每一行分别依次表示出每个具体的解,即我下面图片的右边所示。

 二、用python代码实现

1.代码实现思路(重点):

鉴于我在高斯消元法上面的经验(高斯消元法我个人觉得比迭代法难,我上一个博文详细介绍了高斯消元法,所以我对遍历行和列采用几个for循环比较清楚,大家如果没思路可以先看看别人的代码,然后慢慢理解,写出自己的代码),我先考虑到计算一次迭代的过程,然后在循环几次,直到达到自己的目的。下面是我迭代了100次。

for i in range(100):print(i)print(solution(m))

接下来我们一次看一下迭代一次是如何实现的 :

迭代一次也就是说,我们需要在一次结束的时候需要将ans[]解的数组刷新一下,然后在一次的计算过程中,我们的计算顺序是从上到下、从左到右,从上到下依次遍历每一行,在每一行的数据中将非主对角线中的元素累加起来,然后赋值给一个临时变量t,然后每一行的最后一个值减去t,并且除以相对应的一行主对角线上的值,这样完成一次就会得到一个解,大家可以看看我的第一张图片中右边对每个解的表示,对比下面代码来看,比较好理解

def solution(m):#用来存放求出的解,设初始解为[0,0,0,0].#这里需要for row in range(len(m)):#按一行一行进行 0,    1,    2     3t=0for col in range(len(m[0])-1):#在一行中按列进行0,1,2,3   0,1,2,3if (row!=col):t += m[row][col]*ans[col]ans[row]=(m[row][-1]-t)/m[row][row]return ans

2.注意的问题

我们需要注意一个细节,对解的初始化,我没有放在定义的这个函数之中,因为初始化只需要初试一次,在接下来的迭代过程中就会用上一次计算的结果,可以看一哈我接下来的整体代码。

三、整体代码

"""
作者:author
日期:2022年09月22日
"""
import numpy as npm= np.array([[10, -1, 2, 0, 6], [-1, 11, -1, 3, 25], [2, -1, 10,-1,-11],[0, 3, -1, 8, 15]])
print(m)
ans=[0,0,0,0]def solution(m):#用来存放求出的解,设初始解为[0,0,0,0].#这里需要for row in range(len(m)):#按一行一行进行 0,    1,    2     3t=0for col in range(len(m[0])-1):#在一行中按列进行0,1,2,3   0,1,2,3if (row!=col):t += m[row][col]*ans[col]ans[row]=(m[row][-1]-t)/m[row][row]return ansfor i in range(100):print(i)print(solution(m))

四、运行结果

下面的这一张图片是我迭代了100次的效果: 解已经出来了。

 其实我们可以看到当迭代到第15次的时候,结果已经出来了。

 最后谢谢大家阅读,如果觉得有帮助,可以给我点一个赞!!!你的支持是我持续更新的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_12773.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows公网SSH远程公司内网linux

SSH(Secure Shell)是用于登录远程系统的协议,也是目前最流行的远程连接Linux服务器的协议,默认SSH在端口22上运行。 而linux服务器下一般都会安装ssh服务,可以建立安全的远程连接。当我们在外而临时有事需要远程公司内…

[数据结构]-玩转八大排序(二)冒泡排序快速排序

前言 作者:小蜗牛向前冲 名言:我可以接收失败,但我不能接收放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一 冒泡排…

无刷电机驱动板开发,加速无刷时代前进步伐

无刷电机是由电机主体和电机驱动板组成的一种没有电刷和换向器的机电一体化产品。随着控制板的应用场景逐渐丰富,控制板开发技术日益增强,目前无刷电机的发展方向,首先就是对无刷电机驱动板的开发。 无刷电机的优点非常的多,其中最…

Nginx系列之请求处理的11个阶段(下)

上篇博客介绍了PostRead阶段涉及的模块的作用,此篇博客将介绍剩余阶段所涉及的模块作用 Preaccess阶段的limit_conn和limit_req模块 限速(rate limiting)是NGINX中一个非常有用的特性,可以用它来限制在一段时间内的HTTP请求数量…

慢查询 MySQL 定位优化技巧,从10s优化到300ms

1.如何定位并优化慢查询SQL? 一般有3个思考方向 1.根据慢日志定位慢查询sql 2.使用explain等工具分析sql执行计划 3.修改sql或者尽量让sql走索引 2.如何使用慢查询日志? 先给出步骤,后面说明 有3个步骤 1.开启慢查询日志 首先开启慢查询…

office project【图文详解】

Office Project是一款全面实用的项目管理软件。 Office Project2021正式版来自推出的项目管理软件。最新版本的Microsoft Office Project2021软件拥有最简单的项目管理方法,用户可以根据每个人的工作情况轻松分配工作量和项目执行时间。Project 安装包各个版本 htt…

(附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740

摘 要 本文介绍了使用PHPMySQL数据库和微信应用为儿童艺术学校实现教育应用的过程。本文介绍的教育应用是为儿童艺术学校设计的,这意味着该系统可用于教授儿童艺术和艺术视频。该系统的主要功能是可以将儿童艺术教育的线下方式转变为线上,从教育机构的角…

微信小程序组件介绍

组件view 普通视图区域 类似于html中的div是一个块级元素 .wxml代码 <view class"container1" ><view>温度</view><view>湿度</view> <view>光照强度</view> </view> .wxss代码—— .container1 view{width: 100…

linux 内存管理

用户空间与内核空间 人间还是仙界&#xff1f;聊一聊linux系统的用户空间和内核空间 以32 位Linux系统为例&#xff0c;虚拟地址的大小是4GB (0x0000_0000 ~ 0xffff_ffff)。 Linux 用户空间和 内核空间的大小可以通过设置宏 PAGE_OFFSET 来配置&#xff0c;默认PAGE_OFFSET 0…

Oracle数据库中的包(七)

目录 1.Oracle中包 2.包的创建 &#xff08;1&#xff09;可视化方式创建包 &#xff08;2&#xff09;以命令方式创建包 ①创建包头 ②创建包体 ③删除包 3.包的初始化 4.重载 ①相关概念和注意事项 ②系统内置的包 Oracle学习的相关知识点&#xff08;汇总&#x…

UGeek大咖说 | 直播预告:顺丰高难度可观测性压测实践与应用

本月「UGeek大咖说-大厂可观测」又双叒……来和大家见面了&#xff01;本期大咖说特邀到顺丰科技应用架构高级工程师——李卓做客直播间&#xff0c;用实际案例带我们一起剖析大型复杂系统下可观测性在全链路压测中的落地实践。 往期大咖说我们对可观测性做了很多诠释和分享&a…

2022安徽省赛赛题——B-2任务二:流量分析

有题有环境有解析,要的私我,勿喷! B-2任务二:流量分析 *任务说明:仅能获取Server2的IP地址 1.使用Wireshark查看并分析Server2桌面下的capture.pcapng数据包文件,找出黑客获取到的可成功登录目标服务器Telnet服务的账号密码,并将黑客获取到的账号密码作为Flag值(用户…

开创性的区块链操作系统项目——去中心化簿订单交易所

关于区块链操作系统上的 Web2 和 Web3 先驱系列今天向大家介绍来自Dakai的 Peter、Laszlo 和 Mark 。Web3 开发人员通过他们的去中心化簿订单交易所推进了区块链技术的发展。他们正在使用 Python 和 SQLite 作为数据库引擎来进行开发&#xff0c;他们发现他们可以在区块链操作系…

js与jquery实例-拖动改变列宽和行高

如何通过javascript或者jquery实现改变表格宽度或者行高的功能?今天就把这个功能代码分享给大家,绝对原创哦,代码少而且易懂。先看效果图:html结构:html结构:<!DOCTYPE HTML> <html> <head><meta charset="utf-8"><title>table&…

最适合从事游戏建模这类高薪职业的是这些人,快来看看有你吗?

随着游戏行业的发展&#xff0c;游戏建模受到越来越多的人的关注&#xff0c;那游戏建模的学习适用于什么样的人群呢&#xff1f;今天就来介绍一下吧 01 大学毕业&#xff0c;就业方向不明确 大学期间&#xff0c;本专业知识没有深度掌握&#xff0c;无法从事本专业相关的工作…

Vue3 i18国际化

本文参考了两片文章如下&#xff0c;博文原创&#xff0c;转载附上本博文链接即可 1、基于Vue3.0和ElementPlus开发后台框架(loginbacki18n)_zzzzzzzzzz的博客-CSDN博客_vue3后台框架 &#xff08;这个有点没看懂&#xff09; 2、https://www.jianshu.com/p/fa85595642cd&am…

盘点一个Python网络爬虫实战问题

大家好,我是皮皮。 一、前言 前几天在Python铂金交流群【红色基因代代传】问了一个Python网络爬虫的问题,提问截图如下:代码截图如下:报错截图如下:要么就是原始网页没那么多数据,要么就是你自己取到的数据没那么多,有的有排名,有的没有,可以考虑加个try异常处理。首先…

基于单片机的老人防摔GSM报警

目录 1 跌倒报警器研究现状........................................................................................ 8 2.1单片机的功能及最小系统的电路设计.................................................. 9 内置闪存存储器......................................…

雷鸟乐队 VoxEdit 大赛启动啦,24,500 SAND 奖励等你们来赢取!

是鸟……是飞机……是雷鸟&#xff01; 如果你们选择接受它&#xff0c;那么你们的任务是创造一个受 1960 年代标志性电视剧启发的车辆资产&#xff08;汽车、轮船摩托车等&#xff09;。 不要使用雷鸟的 logo 或对现有的雷鸟作品进行二次创作。 24,500 SAND 将按以下方式分配给…

手机远程控制之scrcpy(一)

有线投屏 无线投屏 屏幕录制 常见问题 错误检查 ERROR: Exception on thread 投屏模糊 scrcpy 是免费开源的投屏软件&#xff0c;支持将安卓手机屏幕投放在 Windows、macOS、GNU/Linux 上&#xff0c;并可直接借助鼠标在投屏窗口中进行交互和录制。 市面上主流的多屏协…