MATLAB运用(5)——线性代数方程组的解法

简介: MATLAB运用(5)——线性代数方程组的解法

线性代数方程组的解法

一、实验要求

分别采取Guass消元法(不选主元、手动选主元、自动选主元)、Jacobi迭代法、Guass-Seidel迭代法、超松弛迭代法计算下列矩阵的线性方程组。


(1)矩阵


image.png

(2)希尔伯特矩阵

image.png

(3)其他矩阵


二、实验过程

实验成果



主程序

1、Guass消去法主元选择函数(不选主元、手动选主元、自动选主元)和Jacobi迭代法、Guass-Seidel迭代法、超松弛迭代法的函数

   methods (Access = private)
        %主元选择所需要的函数
        function [m,l] = mymax(app,x)
            %获取数列x中绝对值最大的值及其下标
            m=x(1);
            l=1;
            n=length(x);
            for i =2:n
                if abs(x(i))>abs(m)
                    m=x(i);
                    l=i;
                end
            end
        end
        function B=zhuxuanxq(app,A,value)
            %主元选取(自动,手动,不选)
            [row,col ]=size(A);
            if value=='自动选主元'
                [m,L]=mymax(app,A(1:row));
            elseif value=='不选主元'
                m=A(1);
                L=1;
            elseif value=='手动选主元'
                A1=A(1:row);
                L=str2num(char(inputdlg('请输入最大主元所在的行:')));
                m=A1(L);
            end
            if m==0
                return
            end
            B=A;
            B(1,:)=A(L,:);
            B(L,:)=A(1,:);
            for x =2:row
                B(x,:)=B(x,:)-B(1,:)*B(x,1)/m;
            end
        end
        function B=zhuxuanbh(app,A,value)
            %主元选取变换
            [row,col]=size(A);
            B=zeros(row,col);
            for i = 1:row-1
                B(i:row,i:col)=zhuxuanxq(app,A,value);
                A=B(i+1:row,i+1:col);
            end
        end
        %计算方法选择
        function y=jacobi(app,A,b,x0,tol)
            % Jacobi迭代法
            D=diag(diag(A));
            L=tril(A,-1);
            U=triu(A,1);
            B=-D\(L+U);
            F=D\b';
            x0=x0';
            y=B*x0+F;
            n=1;
            while norm(y-x0)>=tol
                x0=y;
                y=B*x0+F;
                n=n+1;
            end
        end
        function y=guass_seidel(app,A,b,x0,tol)
            % guass_seidel迭代
            D=diag(diag(A));
            L=tril(A,-1);
            U=triu(A,1);
            G=-(D+L)\U;
            F=(D+L)\b';
            x0=x0';
            y=G*x0+F;
            n=1;
            while norm(y-x0)>=tol
                x0=y;
                y=G*x0+F;
                n=n+1;
            end
        end
        function y=sor(app,A,b,w,x0,tol)
            %超松弛迭代
            D=diag(diag(A));
            L=tril(A,-1);
            U=triu(A,1);
            lw=(D+w*L)\((1-w)*D-w*U);
            F=(D+w*L)\b'*w;
            x0=x0';
            y=lw*x0+F;
            n=1;
            while norm(y-x0)>=tol
                x0=y;
                y=lw*x0+F;
                n=n+1;
            end
        end
    end

2、【矩阵】下拉框

            global A;
            Nb = string(app.DropDown.Value);
            n=str2num(char(app.TextArea.Value));
            if Nb=='矩阵 A'
                a1=sparse(1:n,1:n,6);
                a2=sparse(1:n-1,2:n,1,n,n);
                A=a1+a2+8*a2';
                app.bEditField.Value = '7 15 15 15 15 15 15 15  15 14';
            elseif Nb=='矩阵 H'
                A=hilb(n);
            elseif Nb=='其他'
                Ans=inputdlg('请输入矩阵A:','text_6',3);
                A=str2num(Ans{1});
                app.TextArea.Enable='off';   
            end

3、【解法】下拉框

            if string(app.DropDown_2.Value)=='Gauss消去法'
                app.EditField.Enable='off';
                app.wEditField.Enable='off';
            else
                app.EditField.Enable='on';
                app.wEditField.Enable='on';
            end

4、【OK】按钮

            value=string(app.DropDown_3.Value);
            b=str2num(char(app.bEditField.Value));
            global A;
            if string(app.DropDown_2.Value)=='Gauss消去法'
                B=zhuxuanbh(app,[A b'],value);
                [row ,col]=size(B);
                X=zeros(row,1);
                X(row)=B(row,col)/B(row,row);
                for k = row-1:-1:1
                    X(k)=(B(k,col)-B(k,k+1:row)*X(k+1:row))/B(k,k);
                end
            else
                tol=str2num(char(app.EditField.Value));
                x0=str2num(char(app.EditField_3.Value));
                w=str2num(char(app.wEditField.Value));
                if isempty(x0)
                    errordlg('请输入初值x0')
                    return
                end
                if string(app.DropDown_2.Value)=='Jacobi迭代法'
                    X=jacobi(app,A,b,x0,tol);
                elseif string(app.DropDown_2.Value)=='G-S迭代法'
                    X=guass_seidel(app, A,b,x0,tol);
                elseif string(app.DropDown_2.Value)=='SOR迭代法'
                    X=sor(app,A,b,w,x0,tol);
                end
            end
            app.EditField_2.Value=num2str(X');

5、【close】按钮

            app.DropDown.Value='矩阵 A';
            app.DropDown_2.Value = 'Gauss消去法';
            app.bEditField.Value = '7 15 15 15 15 15 15 15  15 14';
            app.EditField.Enable='off';
            app.wEditField.Enable='off';
            app.EditField_3.Value='';
            app.EditField_2.Value='';


目录
相关文章
|
机器学习/深度学习 SQL 分布式计算
Spark核心原理与应用场景解析:面试经验与必备知识点解析
本文深入探讨Spark核心原理(RDD、DAG、内存计算、容错机制)和生态系统(Spark SQL、MLlib、Streaming),并分析其在大规模数据处理、机器学习及实时流处理中的应用。通过代码示例展示DataFrame操作,帮助读者准备面试,同时强调结合个人经验、行业趋势和技术发展以展现全面的技术实力。
1422 0
|
分布式计算 数据处理 MaxCompute
MaxCompute单字段拆分多行多列
数据导入MaxCompute后,需要把某个字段String类型(多键值(key-value )对 ) 拆分成多行,每行有都有key, value两列。比如“{k1:v1,k2:v2,k3:k4}” 拆成多行,每行两个值key,value 分别为k1,v1;k2,v2;k3;k4。
4433 0
|
存储 Web App开发 JSON
OpenTelemetry Log规范解读
本文主要介绍OpenTelemetry Log规范,这一规范来自于Google、Microsoft、AWS、Splunk、DataDog、ES、Fluntd等众多优秀的公司和项目成员,其中有很多点是我们在平时开发、运维需要关注的知识和经验,值得大家一观。
7052 0
OpenTelemetry Log规范解读
|
2月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
139 12
|
11月前
|
存储 机器学习/深度学习 人工智能
《高斯数据库携手人工智能,智斗数据量爆发式增长》
高斯数据库结合人工智能,为数据量爆发式增长提供创新解决方案。其AI4DB技术实现智能运维管理,自动监控与优化数据库性能;智能优化器加速复杂查询处理;库内AI引擎支持机器学习,深度挖掘数据价值;先进压缩技术节省存储空间。某电商企业应用后,性能提升显著,运维成本降低30%,商品推荐点击率提高20%。这一结合助力企业在大数据时代实现高效数据管理和业务增长。
240 15
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能土壤质量监测与管理
使用Python实现深度学习模型:智能土壤质量监测与管理
689 69
|
10月前
|
运维 Kubernetes 数据可视化
即时通讯开源项目OpenIM配置可视化-etcd配置中心
即时通讯开源项目OpenIM二次开发
491 6
|
人工智能 搜索推荐 算法
数据平台演进问题之数据库技术面临挑战如何解决
数据平台演进问题之数据库技术面临挑战如何解决
325 0
|
数据采集 前端开发 JavaScript
动态与静态网站抓取的区别:从抓取策略到性能优化
本文详细介绍了动态与静态网站抓取的区别、抓取策略及性能优化技巧,并提供了相关代码示例。静态网站抓取通过简单的HTTP请求和解析库实现,而动态网站则需使用Selenium等工具模拟浏览器执行JavaScript。文章还展示了如何使用代理IP、多线程和合理的请求头设置来提高抓取效率。
509 2
动态与静态网站抓取的区别:从抓取策略到性能优化
|
存储 缓存 运维
阿里云经济型e与通用算力型u1实例性能、适用场景及常见问题
在阿里云的众多云服务器实例类型中,经济型e和通用算力型u1实例因其高性价比和广泛的适用性而备受青睐。2024年经济型e实例2核2G3M带宽40G ESSD Entry盘99元1年,通用算力型u1实例2核4G5M带宽80G ESSD Entry盘199元1年,本文将深入解析这两种实例的性能特点、适用场景以及购买建议,以供参考。
阿里云经济型e与通用算力型u1实例性能、适用场景及常见问题