解线性方程组(一)

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

实验目的:进一步熟练掌握高斯顺序消去法解线性方程组的算法并编写程序,进一步熟练掌握高斯列主元消去法解线性方程组的算法并编写程序,提高编程能力和解算线性方程组问题的实践技能。

实验内容:分别高斯顺序消去法高斯列主元消去法解线性方程组:

问题 1

用两种算法求解右边给定的方程组

问题2:据电路图建立模型并用两种算法解方程组

电路图

实验原理:高斯顺序消去法高斯列主元消去法上三角线性方程组的回代解法

实验步骤:  

  1. 要求上机实验前在A4纸上分别按照高斯顺序消去法和高斯列主元消去法的算法步骤手工计算问题1,对其算法步骤和手工计算过程进行梳理和总结,分别画出高斯顺序消去法和高斯列主元消去法的程序设计流程图,然后编写出两个算法的函数程序代码
  2. 编辑录入程序。
  3. 记录运行时的输入和输出(截图),调试程序并记录调试过程中出现的问题(截图)及修改程序的过程(截图);请将每次截图及时粘贴并编排在实验报告word文档中,要求对截图配上必要的文字解说,以便证明你的实验过程。每张截图的下方都必须有图号和图题。截图要有针对性有重点的截取能反映你实验过程的重要信息,截图打印后展现的文字不能小于宋体6号字,必须字迹清晰可见!。
  4. 经反复调试后,运行程序并验证程序运行是否正确,必须明确写出对比分析过程及其验证结论。若手工计算或计算机计算结果不一致,必须认真思考、仔细分析并查明原因(提醒:此时正是提高认识和纠正对数值计算方法算法错误理解的好机会!!,或者是纠正对编程语言语法规则理解错误的好机会),然后,或者纠正手工计算错误,或者纠正程序代码中的错误,直到完全掌握算法并使手工计算或计算机计算结果确实一致为止。(严禁不经严谨的对比分析而主观臆断地给出结论! )

实验思考 高斯顺序消去法潜在的算法漏洞是什么,如何对高斯顺序消去法做一完善以便消除潜在的算法漏洞。(提示:选主元。选主元都有哪些方法?)

数学建模与应用:请对给定的电路图建立数学模型并应用你的程序解决这道电路网络计算问题。分析建模时会用到基尔霍夫电压定律:电路网络中任意单向闭路的电压和为零。请利用基尔霍夫电压定律按照网孔分析法对每个网孔建立电压方程并构建整个电路网络的数学模型,然后对图中给出的电路网络问题的数学模型进行分析和编程计算。

  1. R1=1,R2=1,R3=2,R4=1,R5=2,R6=4,E1=23,E2=29
  2. R1=1, R2=0.75,R3=1,R4=2.5,R5=1,R6=4,E1=12,E2=21.5         
  3. R1=1, R2=2,R3=4,R4=3,R5=1,R6=5,E1=41,E2=38

试用你的程序对上述三种情形电阻、电源电压取值情况分别求解电流I1,I2,I3. 试问含有n个网孔纯电阻电路网的电流分布模型是什么?(请查阅高教出版社傅恩锡等主编《电路分析简明教程》§2-3网孔电流法p60)

实验报告书写要求:根据实验过程情况和实验结果撰写并递交实验报告。实验报告应当有算法原理简介算法流程图程序代码调试记录计算结果阐释人工计算和计算机程序计算的主要中间结果及最终计算结果列表对比经列表对比分析后,给出验证结论。对于数学建模的应用问题要有分析建模的过程、模型特征的分析与描述、求解计算的算法过程描述、实际问题解答或阐释的内容。实验报告正文中的标题用加粗的宋体小四,正文的内容采用宋体五号,正文截图或插图中的文字不得大于宋体五号,也不得小于宋体六号确保打印后字迹清晰)。报告中的文字内容或图片上的文字内容若看不清楚将直接影响实验报告评阅成绩

应用高斯列主元消去法上三角线性方程组的回代法手工解算线性方程组,并验证程序计算的中间结果与手工计算中间结果是否一致、程序计算最终结果与手工计算的最终结果是否一致,如果手工计算与计算机计算不一致必须分析并查明不一致的原因并予以纠正。提交在A4规格纸张上手工书写手工计算的过程内容,并给出机器解算中间计算量、最终结果和手工解算中间计算量、最终结果的列表比较及其分析验证结论, 请将详细手工计算过程及其验证结论拍照成JPG图片插入在实验报告的word 电子版中。

实验报告打印和装订顺序要求

实验报告打印要求:在A4纸上将实验报告的Word文档双面打印

实验报告打印和装订顺序

  • 实验任务(本文档版式不得做任何改动);
  • 实验报告正文(Word文档);
  • 写在A4纸上的手工计算(可以将A4纸上详细手工计算过程拍照成JPG图片插入在实验报告的word 电子版中随Word文档双面打印)。

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

参考程序

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

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

问题一:

算法原理简介:

(1)高斯顺序消去法:

高斯消元法(Gauss Elimination Method)是一种规则化的加减消元法。基本思想是通过逐次消元计算把需要求解的线性方程组转化为上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组的求解转化为等价(同解)的上三角形方程组的求解。

(2)高斯列主元消去法:

列主元素消去法是为控制舍入误差而提出来的一种算法,列主元素消去法计算基本上能控制舍入误差的影响,其基本思想是:在进行第 k(k=1,2,...,n-1)步消元时,从第k列的 akk及其以下的各元素中选取绝对值最大的元素,然后通过行变换将它交换到主元素akk的位置上,再进行消元。

手工计算问题一:

图1手写计算问题一(两种解法)

实验代码:

  1. 高斯顺序消去法:

function x=Gauss_elimination(A,b)

tic

A=[1 2 1 4;2 0 4 3;4 2 2 1;-3 1 3 2];

b=[13;28;20;6];

[rows,~]=size(A);

aug_mat=[A,b];

for i=1:rows

    if aug_mat(i,i)~=0

        coefficient=aug_mat(:,i);

        aug_mat(i,:)=aug_mat(i,:)./aug_mat(i,i);

        coefficient=-coefficient;

        coefficient(i)=0;

        aug_mat=coefficient*aug_mat(i,:)+aug_mat;

disp(aug_mat);

    else

        aug_mat(:,rows+1:end)=nan;

        break

    end

end

x=aug_mat(:,rows+1:end);

toc

end

  1. 高斯列主元消去法:

function x=principal_element(A,b)

tic

A=[1 2 1 4;2 0 4 3;4 2 2 1;-3 1 3 2];

b=[13;28;20;6];

[rows,~]=size(A);

aug_mat=[A,b];

for i=1:rows

    temp_list=aug_mat(:,i);

    temp_list(1:max(1,i-1))=0;

    [~,exchange_pos]=max(abs(temp_list));

    aug_mat([i,exchange_pos],:)=aug_mat([exchange_pos,i],:);

    coefficient=aug_mat(:,i);

    coefficient=-coefficient./coefficient(i);

    coefficient(i)=0;

    aug_mat=coefficient*aug_mat(i,:)+aug_mat;

    disp(aug_mat);

end

divisor=aug_mat((1:rows)+(0:rows:(rows*(rows-1))))';

aug_mat=aug_mat./divisor;

x=aug_mat(:,rows+1:end);

toc

end

程序运行界面及运行结果:

  1. 高斯顺序消去法

  1. 高斯列主元消去法:

问题二:

模型建立:

初次模型是

I1*R1+(I1-I2)*R3+(I1-I3)*R4=E1

I2*R2+(I2-I1)R3+(I2-I3)*R5=-E2

(I3-I1)*R4+(I3-I2)*R5+I3*R6=0

整理后可得

(R1+R3+R4)*I1-R3*I2-R4*I3=E1

-R3*I1+(R2+R3+R5)*I2-R5*I3=-E2

-R4*I1-R5*I2+(R4+R5+R6)*I3=0

实验代码:

程序代码1:

function x=Gauss_elimination(A,b)

tic

A=[];b=[];

[rows,~]=size(A);

aug_mat=[A,b];

for i=1:rows

    if aug_mat(i,i)~=0

        coefficient=aug_mat(:,i);

        aug_mat(i,:)=aug_mat(i,:)./aug_mat(i,i);

        coefficient=-coefficient;

        coefficient(i)=0;

        aug_mat=coefficient*aug_mat(i,:)+aug_mat;

disp(aug_mat);

    else

        aug_mat(:,rows+1:end)=nan;

        break

    end

end

x=aug_mat(:,rows+1:end);

toc

end

程序代码2:

function x=principal_element(A,b)

tic

A=[];b=[];

[rows,~]=size(A);

aug_mat=[A,b];

for i=1:rows

    temp_list=aug_mat(:,i);

    temp_list(1:max(1,i-1))=0;

    [~,exchange_pos]=max(abs(temp_list));

    aug_mat([i,exchange_pos],:)=aug_mat([exchange_pos,i],:);

    coefficient=aug_mat(:,i);

    coefficient=-coefficient./coefficient(i);

    coefficient(i)=0;

    aug_mat=coefficient*aug_mat(i,:)+aug_mat;

    disp(aug_mat);

end

divisor=aug_mat((1:rows)+(0:rows:(rows*(rows-1))))';

aug_mat=aug_mat./divisor;

x=aug_mat(:,rows+1:end);

toc

end

  1. R1=1,R2=1,R3=2,R4=1,R5=2,R6=4,E1=23,E2=29

将上述代码的“A=[];b=[];”这两行语句改为“A=[4,-2,-1;-2,5,-2;-1,-2,7];b=[23;-29;0];”

  1. R1=1, R2=0.75,R3=1,R4=2.5,R5=1,R6=4,E1=12,E2=21.5

将上述代码的“A=[];b=[];”这两行语句改为“A=[4.5,-1,-2.5;-1,2.75,-1;-2.5,-1,7.5];b=[12;-21.5;0];”

  1. R1=1, R2=2,R3=4,R4=3,R5=1,R6=5,E1=41,E2=38

将上述代码的“A=[];b=[];”这两行语句改为“A=[8,-4,-3;-4,7,-1;-3,-1,9];b=[41;-38;0];”

程序运行界面及运行结果:

算法流程图:

(1)高斯顺序消去法:

图14高斯顺序消去法的程序流程图

(2)高斯列主元消去法:

图15高斯列主元消去法程序流程图

实验思考:

Gauss消去法有以下两个主要缺陷:

    1)如果某个主元akk=0,则消元无法进行;

    2)在akk=0,但相对很小,当其作为除数时,会导致其他元素数量级的增长,容易造成严重的舍入误差。

而主元素消去法则是对Gauss消去法存在的两个主要问题的一种解决方法。

主元素消去法使用地比较多的是列主元素消去法,与Gauss消去法的主要区别是在进行第k次更新时,首先需要对第k列的第k行以及该列后续元素进行排序,并交换得到最大元素的行。

实验总结:

在本次实验中,我学会了两种求解线性方程组的方法,分别是高斯顺序消去法、高斯列主元消去法;掌握了这两种方法的区别、缺陷以及在具体问题中的使用;训练了function函数的使用;发现了在程序运行缺某些输出时可以依赖disp()来实现,括号中填写想输出变量。

对于第二个问题就是对于第一个问题模型的应用,更多的考验的是将具体的实际问题,在应用基尔霍夫电压定律和网孔分析法建立电路网络的数学模型时将实际问题转化出来,我学会了将实际问题模型化。

今后学习中,对于题目的敏感度有待提高。对于函数的使用和变量的使用应更加细心,对于已经有结构的算法的实现也有待提高。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu使用Qt虚拟键盘,支持中英文切换

前言 ​最近领导给了个需求,希望将web嵌入到客户端里面,做一个客户端外壳,可以控制程序的启动、停止、重启,并且可以调出键盘在触摸屏上使用(我们的程序虽然是BS架构,但程序还是运行在本地工控机上的),我研…

数学建模(基于Python实现)--灰色关联分析法讲解,含案例

前言 这是去年底学数学建模老哥的建模课程笔记; 未来本人将陆陆续续的更新数学建模相关的一些基础算法,大家可以持续关注一下,主要在于运用; 提示:数学建模只有实战才能提升🔥​🔥​&#x1f…

jmeter结合ansible分布式压测--1数据准备

一、搭建ansible环境 ansible是基于python开发,通过ssh连接客户机执行任务。ansible可以批量系统配置、批量程序部署、批量运行命令等。 1、安装yum install ansible 2、检查ansible的版本:ansible --version 二、利用ansible在其他机器上准备压测数据 1、本地准…

网络:ARP的具体过程和ARP欺骗

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言ARP具体过程ARP欺骗原理总结 前言 本文仅作为ARP具体过程和ARP欺骗的知识总结 硬件类型 :指定发送和接受ARP包的硬件类型&am…

AI大模型的广泛应用时代该如何重塑软件开发流程?

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于AI大模型如何重塑软件开发流程的相关内容…

影响神经网络速度的因素- FLOPs、MAC、并行度以及计算平台

影响神经网络速度的四个主要因素分别是 FLOPs(浮点操作数)、MAC(内存访问成本)、并行度以及计算平台。这些因素共同作用,直接影响到神经网络的计算速度和资源需求。 1. FLOPs(Floating Point Operations&a…

springboot基于SpringBoot的旅游网站的设计与实现

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,旅游网站当然也不能排除在外,随着旅游网站的不断成熟,它彻底改变了过去传统的旅游网站方式,不仅使旅游管理…

2.2 python数据库-mysql

以mysql为例,数据库的操作包括:连接、断开、新增库表、新增数据、查询数据、删除数据和修改数据 1. 连接与关闭 #!/usr/bin/python3import pymysqldb pymysql.connect(hostlocalhost,usertestuser,passwordtest123,databaseTESTDB)# 使用 cursor() 方…

微信小程序的汽车维修预约管理系统

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 系统功能简述 前台用于实现用户在页面上的各种操作,同时在个人中心显示各种操作所产生的记录:后…

Python | Leetcode Python题解之第540题有序数组中的单一元素

题目&#xff1a; 题解&#xff1a; class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:low, high 0, len(nums) - 1while low < high:mid (low high) // 2mid - mid & 1if nums[mid] nums[mid 1]:low mid 2else:high midreturn nums[l…

7.2 设计模式

设计模式 7.3.1 设计模式的要素7.3.2 创建型设计模式7.3.3 结构性设计模式1. Adapter (适配器)2. Bridge(桥接)3.Composite(组合)4.Decorator(装饰)5.Facade(外观)6.Flyweight(享元)7.Proxy(代理)8. 结构型模式比较 7.3.4 行为型设计模式1 Chain of Responsibility [ &#xff…

使用ffmpeg播放rtsp视频流

获取IPC摄像机视频流一般使用GB28181或者RTSP协议&#xff0c;这两款协议是比较常见的&#xff1b;两者都有开源的库&#xff0c;下面介绍如何使用RTSP获取进行IPC视频流&#xff1b; 准备库 ffmepg是个开源的库,该库集成了rtsp协议&#xff0c;可以直接使用&#xff1b;首先…

python之数据结构与算法(数据结构篇)-- 队列

一、队列的概念 1.“队列”这个概念&#xff0c;其实可能我们在进行排队的时候是差不多的。 2.例如&#xff0c;在结账时&#xff0c;顾客按照到达顺序排队等待付款&#xff0c;这是现实生活中的一个队列示例。同样地&#xff0c;在计算机程序中&#xff0c;当多个任务需要按顺…

网卡多队列介绍

一、多队列网卡 1.1 什么是多队列网卡 多队列网卡&#xff08;Multi-Queue NIC&#xff09;支持将网络流量分发到多个处理队列中&#xff0c;以提高系统的网络处理性能和吞吐量。传统上&#xff0c;单队列网卡只有一个硬件队列用于处理所有的输入和输出流量&#xff0c;这可能…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点?

文本语义分块、RAG 系统的分块难题&#xff1a;小型语言模型如何找到最佳断点&#xff1f; 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过 RAG 里文档分块 (Chunking) 的挑战&#xff0c;也介绍了 迟分 (Late Chunking) 的概念&#xff0c;它可以在向量化的时候减…

linux 安装php扩展:xlswriter

这里以xlswriter扩展为例 进入官方扩展&#xff1a;https://pecl.php.net查询自己php对应版本的扩展包 下载扩展 wget https://pecl.php.net/get/xlswriter-1.5.5.tgz 解压扩展 tar -zxvf xlswriter-1.5.5.tgz 进入扩展目录 cd xlswriter-1.5.5 查找对应php版本的phpiz…

IPC原理

消息队列 什么是消息队列 消息队列接口 msgget msgctl ipcs -p msgsnd msgrcv code示例 发送到消息队列&#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include…

成为编程高手 day16

今天在学结构体 网上说可以用点号找到对应的地方&#xff0c;但是发现不可以&#xff0c;后来上网查资料 vs里面需要把cpp改成c才可以 我爱说实话&#xff0c;这玩意咋这么长。

U8C表体存货或编码相关的字段赋值不上

涉及到表体有存货相关字段的单据&#xff0c;如果更改源码或者客开的时候使用VO赋值&#xff0c;跟代码VO的存货字段有值&#xff0c;但是在前台不显示有值&#xff0c;或者说在前台显示没有值。 需要你在使用this.getBillCardPanel().setBillValueVO(oldVO);或者ui.getBillCa…

实战攻略 | ClickHouse优化之FINAL查询加速

【本文作者&#xff1a;擎创科技资深研发 禹鼎侯】 查询时为什么要加FINAL 我们在使用ClickHouse存储数据时&#xff0c;通常会有一些去重的需求&#xff0c;这时候我们可以使用ReplacingMergeTree引擎。这个引擎允许你存储重复数据&#xff0c;但是在merge的时候会根据order …