1. 分别用Gauss消去法、列主元Gauss消去法、三角分解方法求解方程组

程序:

1Guess消去法:

function x=GaussXQByOrder(A,b)

%Gauss消去法

N = size(A);

n = N(1);

x = zeros(n,1);

for i=1:(n-1)

for j=(i+1):n

if(A(i,i)==0)

disp('对角元不能为0');

return;

end

m = A(j,i)/A(i,i);

A(j,i:n)=A(j,i:n)-m*A(i,i:n);

b(j)=b(j)-m*b(i);

end

end

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

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

end

命令行输入:

A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];

b=[1 3 5 7];

b=b';

x=GaussXQByOrder(A,b)

运算结果:

x =

-8.000000000000000

0.333333333333333

3.666666666666667

2.000000000000000

(2)列主元Gauss消去法

程序:

function x=GaussXQLineMain(A,b)

%列主元Gauss消去法

N = size(A);

n = N(1);

x = zeros(n,1);

zz=zeros(1,n);

for i=1:(n-1)

[~,p]=max(abs(A(i:n,i)));

zz=A(i,:);

A(i,:)=A(p+i-1,:);

A(p+i-1,:)=zz;

temp=b(i);

b(i)=b(i+p-1);

b(i+p-1)=temp;

for j=(i+1):n

m = A(j,i)/A(i,i);

A(j,i:n)=A(j,i:n)-m*A(i,i:n);

b(j)=b(j)-m*b(i);

end

end

x(n)=b(n)/A(n,n);

for i=n-1:-1:1

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

end

命令行:

A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];

b=[1 3 5 7];

b=b';

x=GaussXQLineMain(A,b)

运行结果:

x =

-8.000000000000005

0.333333333333332

3.666666666666668

2.000000000000000

(3)三角分解方法

程序:

function x = LU(A,b)

%三角分解

N = size(A);

n = N(1);

L = eye(n,n);

U = zeros(n,n);

x = zeros(n,1);

y = zeros(n,1);

U(1,1:n) = A(1,1:n);

L(1:n,1) = A(1:n,1)/U(1,1);

for k=2:n

for i=k:n

U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i);

end

for j=(k+1):n

L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k);

end

end

y(1)=b(1)/L(1,1);

for i=2:n

y(i)=b(i)-sum(L(i,1:i-1)*y(1:i-1));

end

x(n)=y(n)/U(n,n);

for i=n-1:-1:1

x(i)=(y(i)-sum(U(i,i+1:n)*x(i+1:n)))/U(i,i);

end

命令行:

A=[1 -1 2 1;-1 3 0 -3 ;2 0 9 -6;1 -3 -6 19];

b=[1 3 5 7];

b=b';

x=LU(A,b)

运行结果:

x =

-8.000000000000000

0.333333333333333

3.666666666666667

2.000000000000000

程序:function [times,wucha]=zhuiganfa(a,b,c,f)

%追赶法:x为所求解,times为所有乘除运算次数(即时间),wucha为误差的2-范数。

n=length(f);

x=zeros(n,1);

y=zeros(n,1);

times=0;

alpha=zeros(1,n);

p=zeros(1,n-1);

alpha(1)=b(1);

for i=2:n

p(i-1)=c(i-1)/alpha(i-1);

alpha(i)=b(i)-a(i-1)*p(i-1);

times=times+1;

end

y(1)=f(1)/b(1);

for i=2:n

y(i)=(f(i)-a(i-1)*y(i-1))/alpha(i);

times=times+1;

end

x(n)=y(n);

for i=n-1:-1:1

x(i)=y(i)-p(i)*x(i+1);

times=times+1;

end

A=zeros(n,n);

A=diag(b,0)+diag(a,-1)+diag(c,1);

wucha=norm((A*x-f'),2);

命令行(n=20):

a=repmat(11,1,19);

b=repmat(-19,1,20);

c=repmat(7,1,19);

f1=repmat(1.1,1,18);

f=[0 f1 1];

[times,wucha]=zhuiganfa(a,b,c,f)

运行结果:

times =

57

wucha =

8.009010697694412e-15

n=50

命令行:

a=repmat(11,1,49);

b=repmat(-19,1,50);

c=repmat(7,1,49);

f1=repmat(1.1,1,48);

f=[0 f1 1];

[times,wucha]=zhuiganfa(a,b,c,f)

运行结果:

times =

147

wucha =

1.292635294609912e-14

命令行(n=100)

a=repmat(11,1,99);

b=repmat(-19,1,100);

c=repmat(7,1,99);

f1=repmat(1.1,1,98);

f=[0 f1 1];

[times,wucha]=zhuiganfa(a,b,c,f)

结果:

times =

297

wucha =

2.599344850768740e-14

程序:function [count,wucha] = zhouqisanduijaiozhuiganfa(a,b,c,f)

%x为所求解,count为所有乘除运算次数

n=length(f);

x=zeros(n,1);

y=zeros(n,1);

count=0;

l=zeros(1,n-2);

s=zeros(1,n-1);

u=zeros(1,n);

t=zeros(1,n-1);

u(1)=b(1);t(1)=1;

s(1)=1/u(1);y(1)=f(1);

for i=2:n-1

l(i-1)=a(i-1)/u(i-1);

u(i)=b(i)-l(i-1)*c(i-1);

t(i)=-l(i-1)*t(i-1);

s(i)=-s(i-1)*c(i-1)/u(i);

y(i)=f(i)-l(i-1)*y(i-1);

count=count+4;

end

st=0;

for k=1:n-1

st=st+s(k)*t(k);

count=count+1;

end

sy=0;

for k=1:n-2

sy=sy+s(k)*y(k);

count=count+1;

end

u(n)=b(n)-st-s(n-1)*(c(n-1)+t(n-1));

y(n)=f(n)-sy;

x(n)=y(n)/u(n);

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1)-t(i)*x(n))/u(i);

count=count+1;

end

A=zeros(n,n);

A=diag(b,0)+diag(a,-1)+diag(c,1);

A(n,1)=1;

A(1,n)=1;

wucha=norm((A*x-f'),2);

命令行:

n=10;

a=repmat(11,1,n-1);b=repmat(-19,1,n);

c=repmat(7,1,n-1);f1=repmat(1.1,1,n-2);f=[0 f1 1];

[count,wucha]= zhouqisanduijaiozhuiganfa(a,b,c,f)

运行结果:

count =

58

wucha =

4.525439045433075

n=30

count =

198

wucha =

5.951269557941316

n=100

count =

688

wucha =

5.993271932634396

高斯消去、追赶法 matlab的更多相关文章

  1. 高斯混合模型(GMM)及MATLAB代码

    之前在学习中遇到高斯混合模型,卡了很长一段时间,在这里记下学习中的一些问题以及解决的方法.希望看到这篇文章的同学们对高斯混合模型能有一些基本的概念.全文不废话,直接上重点. 本文将从以下三个问题详解高 ...

  2. matlab 求解线性方程组之LU分解

    线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积.常见的有如下分解: LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵 QR分解: 秩分解 ...

  3. [zz] 混合高斯模型 Gaussian Mixture Model

    聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...

  4. matlab中fft快速傅里叶变换

    视频来源:https://www.bilibili.com/video/av51932171?t=628. 博文来源:https://ww2.mathworks.cn/help/matlab/ref/ ...

  5. 【原创】开源Math.NET基础数学类库使用(16)C#计算矩阵秩

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 上个月 ...

  6. C++线性方程求解

    介绍 程序SolveLinearEquations解决联立方程.该方案需要一个文本文件,其中包含输入和输出方程解决.这个项目是几年前我写在C#中http://www.codeproject.com/A ...

  7. Libsvm学习

        本篇博客转自 http://www.cppblog.com/guijie/archive/2013/09/05/169034.html     在电脑文件夹E:\other\matlab 20 ...

  8. 开源Math.NET基础数学类库使用(16)C#计算矩阵秩

    原文:[原创]开源Math.NET基础数学类库使用(16)C#计算矩阵秩                本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4 ...

  9. minimize.m:共轭梯度法更新BP算法权值

    minimize.m:共轭梯度法更新BP算法权值 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ Carl Edward Rasmussen在高斯机器学 ...

随机推荐

  1. Hibernate杂问

    1 谈谈你对ORM框架的基本思想的了解? 首先 ORM是 对象关系映射,是为了解决类似于JDBC实现对象持久化的问题开发的. 框架的基本特征:完成面向对象的编程语言到关系数据库之间的映射. 他的映射分 ...

  2. zoj 2104 Let the Balloon Rise(map映照容器的应用)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2104 题目描述: Contest time again! Ho ...

  3. NPOI 之导入导出

    转自https://www.cnblogs.com/zuowj/archive/2015/05/04/4475663.html转别人的,做了一点点改动 using NPOI.HSSF.UserMode ...

  4. Linux中用HttpWebRequest或WebClient访问远程https路径

    要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo ...

  5. Linux下安装SQL Server 2016(准备篇SQL Server on linux)

    要在Linux安装sql server,首先的先有linux,下面会讲下载,然后安装Linux. 一.下载centos 7.2 : Centos 7.2下载 大概4G左右,这个链接的下载速度还是非常快 ...

  6. javaBean分析

    package com.ldf.domain; /** * 实体bean */ import java.io.Serializable; import java.util.Date; public c ...

  7. Linux创建用户等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  8. 新建hadoop用户以及用户组,给予sudo权限

    1.首先新建用户,adduser命令 sudo adduser hadoop passwd hadoop 输入密码之后,一路 y 确定. 2.添加用户组 在创建hadoop用户的同时也创建了hadoo ...

  9. java队列Queue及阻塞队列

    java队列 接口Queue类在java.util包,定义了以下6个方法 详细查看官方文档https://docs.oracle.com/javase/7/docs/api/java/util/Que ...

  10. 你不知道的JavasScript上篇·第五章·原型·下

    5.差异继承 继承意味着复制操作: 差异继承: 基本原则是在描述对象行为时,使用其不同于普遍描述的特制. (我的理解是只用对象自身的而不用普遍继承的像是toString(),valueOf()这种方法 ...