解线性方程组(二)

实验类型:●验证性实验  ○综合性实验  ○设计性实验

实验目的:进一步熟练掌握用Jacobi迭代法和Gauss-Seidel法解线性方程组的算法,提高编程能力和解算线性方程组问题的实践技能。

实验内容:

1)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6用Jacobi迭代法解线性方程组

2)取初值性x(0)=(0,0,0,0)T, 精度要求ε=10-6用Gaoss-Seidel迭代法解线性方程组

实验原理:Jacobi迭代算法,Gaoss-Seidel迭代算法。

实验任务及说明:

  1. 从一般迭代法收敛性理论上分析并讨论1)、2)两个问题所选用的迭代方法是否收敛,若分析过程涉及到四次代数方程求根可用Matlab的roots函数求多项式的根,请将分析、讨论过程及收敛性结论写在规格为A4的打印纸上。   
  2. 分别用Jacobi迭代算法,Gaoss-Seidel迭代算法手工解算1)、2)两个问题的线性方程组,清楚的写出迭代公式,要求严格按照算法步骤手工计算,其中间计算结果保留五位小数,手工迭代至少迭代三步,计算出X(1),X(2),X(3),请将手工计算过程写在规格为A4的打印纸上,对计算过程进行总结和梳理后在A4纸上分别手工画出Jacobi迭代算法,Gaoss-Seidel迭代算法的程序设计流程图(提示:算法开始或结束--用椭圆框;类似赋值语句(算法公式)的执行处理--用矩形框,赋值语句(算法公式)写在矩形框内;条件判断---用菱形框,条件判断表达式写在菱形框里,条件判断必须有两个出口即两个流出的流程线在流出的流程线傍边要清楚的标出Yes或No)。
  3. 用Matlab编写程序上机计算并输出中间结果(可参考马昌凤柯艺芬编著的数值计算方法(MATLAB版) ,科学出版社2020.11.  Page49,Page51 );请将算法流程图(使用Word画图)、程序代码、调试截图记录、输入数据截图记录、输出的中间结果截图记录及最终计算的结果截图记录等作为实验报告内容编排成word文档,然在规格为A4的打印纸双面打印实验报告中的word文档的文字采用宋体5号,单倍行距,报告中截图上的文字不得小于宋体六号,截图文字的字迹必须清晰可见!
  4. 请在实验报告中验证计算机程序迭代计算的前三步近似解向量X(1),X(2),X(3)与手工迭代计算的前三步近似解向量X(1),X(2),X(3)是否一致,要求将手工计算的前三步结果和计算机程序计算的前三步结果列表对比,经过对比分析在列表后的文档中清楚给出是否一致的验证结论
  5. 纸质版实验报告装订顺序:①实验任务(本文档版式不得做任何改动);②实验报告正文(Word文档);③写在A4纸上的手工分析与计算(也可以将A4纸上详细手工分析与计算过程拍照成JPG图片插入在实验报告的word 电子版中随Word文档双面打印)。

实验步骤

  1. 要求上机实验前先进行算法收敛性分析并手工计算、对手工计算进行总结后画出流程图,再编写出程序代码;
  2. 编辑录入程序;
  3. 记录运行时的输入(截图)和输出(截图)。调试程序并记录调试过程中出现的问题(截图)及修改程序的过程(截图);
  4. 经反复调试后,运行程序并验证程序运行是否正确,必须明确写出分析对比过程及验证结论

  

实验报告:根据实验情况和结果撰写并递交实验报告(含手工分析与计算)。

实验总结:(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)

程序代码

电子报告word文件命名规则:专业班级-完整学号-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验2报告word文件命名则应是:信息123-201212030315-实验2-郭海涛.doc, 其中 .doc是Word文件扩展名

特别提醒:学委负责检查电子文件命名规范,命名不规的将不接收。每人必需提交电子报告和纸质报告各一份(两者内容一致,纸质版实验报告要求用A4纸张双面打印,按规定的装订顺序装订)。本实验任务书版式不得做任何改动。电子报告以班为单位提交压缩包.

问题一:

手写算法迭过程及判断是否收敛过程

流程图:

算法流程图:

程序设计流程图:

程序代码:

function [y,n]=Jacobi(A,b,x0,ep)

A=[14 4 4 4;4 14 4 4;4 4 14 4;4 4 4 14];

b=[-4;16;36;56];

x0=[0;0;0;0];

% epslion为误差值

epslion=1.0000e-06;

% N为自己设置的迭代次数

N=100;

L=tril(A,-1); %L为A的单位下三角矩阵

D=diag(diag(A)); %D为A的对角矩阵

U=triu(A,1); %U为A的上三角矩阵

B=-D\(L+U); %B为迭代矩阵

g=D\b;error=1;n=0;

for i=1:N

while error>epslion && n<N

y=x0;x0=B*x0+g;error=norm(y-x0,inf);

if error>epslion

n=n+1;

fprintf('第%d次jacobi迭代结果为:',n)

disp(x0);

fprintf('第%d次迭代结果的误差为:\n',n);disp(error)

break

end

if error<=epslion

n=n+1;fprintf('第%d次jacobi迭代结果为:',n)

disp(x0);fprintf('第%d次迭代结果的误差为:\n',n);disp(error);

fprintf('该方程组的jacobi迭代法的最小迭代次数为:')

disp(n);break

end

end

end

end

运行时的输入和输出:

手工计算结果与程序运行结果对比:

变量

X1(k)

X2(k)

X3(k)

X4(k)

迭代次数

手算

Matlab

手算

Matlab

手算

Matlab

手算

Matlab

0

0

0

0

0

0

0

0

0

1

-0.28571

-0.2857

1.14286

1.1429

2.57143

2.5714

4.00000

4.0000

2

-2.48980

-2.4898

-0.65306

-0.6531

1.18367

1.1837

3.02041

3.0204

3

-1.30029

-1.3003

0.65306

0.6531

2.60641

2.6064

4.55977

4.5598

手工计算过程中保留五位小数,matlab程序中保留的是四位小数,将我手工计算的结果保留四位小数和matlab的结果比对后完全一致。

问题2:

手写算法迭过程及判断是否收敛过程
省略

程序代码:

function x=Gauss_Seidel_fun(A,b,n,x0,tol,N)

x=zeros(n,1);  % 给x赋值

k=-1;

while k<N

for i=1:n

if i==1

x(1)=(b(1)-A(1,2:n)*x0(2:n))/A(1,1);

elseif i==n

x(n)=(b(n)-A(n,1:n-1)*x(1:n-1))/A(n,n);

else

x(i)=(b(i)-A(i,1:i-1)*x(1:i-1)-A(i,i+1:n)*x0(i+1:n))/A(i,i);

end

end

if norm(x-x0)<tol

break;

end

x0=x;k=k+1;

disp(['when k=',num2str(k)]);

disp('x=');disp(x);                       %输出中间结果

end

if k==N

disp('迭代次数已到达上限!');

end

disp(['迭代次数 k=',num2str(k)])

end

运行时的输入和输出:

手工计算结果与程序运行结果对比:

变量

X1(k)

X2(k)

X3(k)

X4(k)

迭代次数

手算

Matlab

手算

Matlab

手算

Matlab

手算

Matlab

0

0

0

0

0

0

0

0

0

1

-2.66667

-2.6667

0.05556

0.0556

0.89815

0.8981

4.35725

4.3573

2

-1.77225

-1.7722

0.64258

0.6426

2.59747

2.5975

4.62232

4.6223

3

-1.35627

-1.2492

0.87560

0.8935

2.79399

2.8725

4.69278

4.7248

手工计算过程中保留五位小数,matlab程序中保留的是四位小数,将我手工计算的结果保留四位小数和matlab的结果比对后在k=0和k=1时完全一致,在k=3时有出入。

实验总结:

学会了另外两种迭代方法:Jacobi迭代法和Gauss-Seidel法求解线性方程组,以及如何判断算法收敛; 掌握了这两种迭代方法的求解迭代过程以及word画流程图,还有这两种算法在面对同一个线性方程组的优势; 训练了function函数的使用以及在纸上解题的能力和独立思考以及自学能力,还有独立编程并实现这两种算法的能力; 今后学习中对于算法框图的构建以及程序设计框图的展现还有待提高。

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

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

相关文章

易语言模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

Charles抓包_Android

1.下载地址 2.破解方法 3.安卓调试办法 查看官方文档&#xff0c;Android N之后抓包要声明App可用User目录下的CA证书 3.1.在Proxy下进行以下设置&#xff08;路径Proxy->Proxy Settings&#xff09; 3.1.1.不抓包Windows&#xff0c;即不勾选此项&#xff0c;免得打输出不…

进程崩溃难以定位,日志分析五步搞定|OceanBase故障排查实践

作者&#xff1a;胡呈清&#xff0c;爱可生 DBA 团队成员&#xff0c;擅长故障分析、性能优化。 背景 Server 进程崩溃的常见原因包括程序bug、文件损坏、磁盘坏块以及内存坏块&#xff0c;这类故障通常较难分析和定位。 在OceanBase 集群部署时&#xff0c;系统会自动配置co…

[spring源码]spring配置类解析

解析配置类 在启动Spring时&#xff0c;需要传入一个AppConfig.class给ApplicationContext&#xff0c;ApplicationContext会根据AppConfig类封装为一个BeanDefinition&#xff0c;这种BeanDefinition我们把它称为配置类BeanDefinition AnnotationConfigApplicationContext a…

低压电容器衰减的计算方法

低压电容器的衰减&#xff08;通常指电容器容量的衰减&#xff09;是指电容器在长时间运行或经历一些不良工作环境下&#xff0c;电容值随时间逐渐减少的现象。这个衰减会影响电容器的工作性能&#xff0c;尤其是在无功补偿和功率因数校正等应用中。计算电容器衰减的具体方法可…

Maven的安装配置

文章目录 一、MVN 的下载二、配置maven2.1、更改maven/conf/settings.xml配置2.2、配置环境变量一、MVN 的下载 还是那句话,要去就去官网或者github,别的地方不要去下载。我们下载binaries/ 目录下的 cd /opt/server wget https://downloads.apache.org/maven/maven-3/3.9.6/…

构建Java教学新生态:SpringBoot应用实例

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

ctfshow(316)--XSS漏洞--反射性XSS

Web316 进入界面&#xff1a; 审计 显示是关于反射性XSS的题目。 思路 首先想到利用XSS平台解题&#xff0c;看其他师傅的wp提示flag是在cookie中。 当前页面的cookie是flagyou%20are%20not%20admin%20no%20flag。 但是这里我使用XSS平台&#xff0c;显示的cookie还是这样…

【设计模式系列】建造者模式(十)

目录 一、什么是建造者模式 二、建造者模式的角色 三、建造者模式的典型应用 四、建造者模式在StringBuilder中的应用 五、典型建造者模式的案例 一、什么是建造者模式 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于构建复杂对…

NVR批量管理软件/平台EasyNVR多个NVR同时管理的智能化革新

随着安防监控技术的不断进步和普及&#xff0c;视频监控系统在各行各业中的应用愈发广泛。无论是大型企业、工业园区&#xff0c;还是公共场所、住宅小区&#xff0c;视频监控都成为了保障安全、提升管理效率的重要手段。 NVR批量管理软件/平台EasyNVR&#xff0c;作为一款集多…

【公司新闻】实力出圈!开放传神(OpenCSG)登上《IT时报》!

2024年11月1日&#xff08;星期五&#xff09;&#xff0c;《IT时报》刊登了关于开放传神&#xff08;以下简称&#xff1a;OpenCSG&#xff09;的新闻内容&#xff0c;这期报道究竟揭示了哪些亮点&#xff1f;让我们一起来深入了解。 来源&#xff1a;《 IT时报 》 本报记者 &…

python的安装环境Miniconda(Conda 命令管理依赖配置)

这一段时间&#xff0c;对AI大模型 有了兴趣就想研究一下。 在研究之前肯定要先把需要的编程技能掌握了。经过我查阅资料&#xff0c;今天就先学一下 python的 环境安装。 Node.js 包管理工具&#xff1a;npm 依赖配置文件&#xff1a;package.json 环境管理&#xff1a;nvm&am…

初级图像处理工具

图像处理-初级 1、功能概览 初级图像处理工具旨在为用户提供一个易于使用的界面来执行常见的图像处理任务。该工具集成了多项实用功能&#xff0c;从显示和调整图像的基本属性到应用各种滤镜效果&#xff0c;用户都可以通过简单的命令行交互来完成。 我们的初级图像处理工具…

【docker】5. 背景知识(了解)

Docker 是什么 Docker 本质 Docker 本质其实是 LXC 之类的增强版&#xff0c;它本身不是容器&#xff0c;而是容器的易用工具。容器是 linux 内核中的技术&#xff0c;Docker 只是把这种技术在使用上简易普及了。Docker 在早期的版本其核心就是 LXC 的二次封装发行版。 Docke…

【react框架之dvajs】如何创建一个初始的dva项目工程

dvajs作为react的框架&#xff0c;一度火爆市场&#xff0c;只是新框架层出不穷&#xff0c;也是越做越成熟了&#xff0c;很多老的框架被淹没&#xff0c;使用的越来越少。dva框架还是有不少的公司有项目在使用&#xff01; dva项目的搭建步骤 在系统检测是否安装了dva&…

5分钟科普:AI网关是什么?应用场景是什么?有没有开源的选择?

AI网关的功能及其定义 AI网关位于企业应用与内外部大模型调用的交汇点&#xff0c;能够灵活地将请求转发给内部自建模型或外部大模型服务提供商&#xff0c;甚至海外的服务商。它管理着企业所有的AI出口流量&#xff0c;为企业内的不同团队提供了多方面的优势。 对于开发团队…

Spring中的 InitializingBean、BeanPostProcessor、@PostConstruct 等初始化动作的执行时机分析

初始化Bean的时序图如下&#xff1a; 小结说明&#xff1a; 1、相同点&#xff1a;InitializingBean 的(afterPropertiesSet方法)、BeanPostProcessor、PostConstruct 都是在bean的属性注入完毕之后才执行&#xff0c;都可以用来进行bean的初始化动作 2、初始化执行顺序优先级…

java ssm 校园快递物流平台 校园快递管理系统 物流管理 源码 jsp

一、项目简介 本项目是一套基于SSM的校园快递物流平台&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#x…

最新整理:Selenium自动化测试面试题

1.selenium中如何判断元素是否存在? find_elements查找到的元素个数为0&#xff0c;find_element报错意味着元素不存在 2.如何判断元素是否出现? 判断元素是否出现&#xff0c;存在两种情况&#xff0c;一种是该元素压根就没有&#xff0c;自然不会出现;另外一种是有这样的…

【The Art of Unit Testing 3_自学笔记06】3.4 + 3.5 单元测试核心技能之:函数式注入与模块化注入的解决方案简介

文章目录 3.4 函数式依赖注入技术 Functional injection techniques3.5 模块化依赖注入技术 Modular injection techniques 写在前面 上一篇的最后部分对第三章后续内容做了一个概括性的梳理&#xff0c;并给出了断开依赖项的最简单的实现方案&#xff0c;函数参数值注入法。本…