Gauss列主元消去法函数

%列主元消去法解方程组Ax=b,实现PA=LU

function [x,detA] =gauss(A,b)

n=length(b);[p,q]=size(A);

if p~=q||p~=n      fprintf(‘方阵的维数不同,请重新输!‘); %检错

end

%为提高运行速度,给L,U,x,c,d1赋初值

L=zeros(n,n);

U=zeros(n,n);

x=zeros(n,1);

c=zeros(1,n);

d1=0;

%按列选主元,并进行行交换,记录行信息

for i=1:n-1

max=abs(A(i,i));

m=i;

for j=i+1:n

if max<abs(A(j,i))

max=abs(A(j,i));

m=j;

end

end

if (m~=i)

for k=i:n

c(k)=A(i,k);

A(i,k)=A(m,k);

A(m,k)=c(k);

end

d1=b(i);

b(i)=b(m);

b(m)=d1;

end

%进行消元计算

for k=i+1:m

for j=i+1:n

A(k,j)=A(i,j)-A(i,j)*A(i,i);

end

b(k)=b(k)-b(i)*A(k,i)/A(i,i);

A(k,i)=0;

end

%回代求解

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

for i=n-1:-1:1

sum=0.0;

for j=i+1:n

sum=sum+A(i,j)*x(j);

end

x(i)=(b(i)-sum)/A(i,i);

end

%计算行列式的值

detA=1;

for k=1:n

detA=detA*A(k,k);

end

%输出PA=LU中的L,U的信息

for i=1:n

for j=1:n

if i<j

U(i,j)=A(i,j);

elseif i==j

L(i,j)=1;

U(i,j)=A(k,j);

else

L(i,j)=A(i,j);

end

end

end

end

本题方程组求解(脚本文件):

A=[-0.002 2 2

1 0.78125 0

3.996 5.5625 4];

b=[0.4;1.3816;7.4178];

%[L,U,x,detA]=myLU(A,b)

[x,detA]=gauss(A,b)

disp(‘列主元高斯消去法得到的解为:‘)

六.运行结果:

x =

1.8167

0.0527

-0.0337

detA =

798.0666

时间: 2024-10-12 22:40:58

Gauss列主元消去法函数的相关文章

用列主元消去法分别解方程组Ax=b,用MATLAB程序实现(最有效版)

数值分析里面经常会涉及到用MATLAB程序实现用列主元消去法分别解方程组Ax=b 具体的方法和代码以如下方程(3x3矩阵)为例进行说明: 用列主元消去法分别解方程组Ax=b,用MATLAB程序实现: (1) 1. 实现该方程的解的MATLAB代码可以分为两种,一种是入门级别的,只是简单地计算出这道题即可,第二种是一种通用的代码,可以实现很多3x3矩阵的方程解,写好以后只需要改不同矩阵里的元素即可算出相应的解,需要建立在对MATLAB比较熟悉的基础上,具体如下: 第一种代码实现-入门级: A=[3

线性方程组的分解法——列主元消去法

1.代码 %%列主元消去法 function ECPE = Elimination_of_column_pivot_entries(M,b) global n; [n,n] = size(M); B =[M,b]; R_A = rank(M);R_B = rank(B); if R_A ~= R_B disp('方程无解'); elseif (R_A == R_B)&&(R_A == n) disp('此方程有唯一解'); for k = 1:n-1 B = Column_pivot_tr

C# 列主元素(Gauss)消去法 计算一元多次方程组

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace zblGauss1 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 //double[,] a = { { 8.1, 2.3, -1

计算方法实验汇总

1 #include<stdio.h> 2 #include<math.h> 3 4 float lmd=2; 5 6 float fa(float x) 7 { 8 return x-lmd*(x*x*x-3*x-1)/(3*x*x-3); 9 } 10 11 main() 12 { 13 float x0,x1,x2,eps; 14 int count=0; 15 printf("请输入迭代初值:\n"); 16 scanf("%f",&

高斯消元法(Gauss Elimination)【超详解&amp;模板】

高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵.高斯消元法的原理是:若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程组. 所以我们可以用初等行变换把增广矩阵转换为行阶梯阵,然后回代求出方程的解. 1.线性方程组 1)构造增广矩阵,即系数矩阵A增加上常数向量b(A|b) 2)通过以交换行.某行乘以非负常数和两行相加这三种初等变化将原系统转化为更简单的三角形式(triangular form) 注:这里的初等变化可以通过

2014年至今的博文目录(更新至2017年06月12日)

拓扑学中凝聚点的几个等价定义(2017-06-12 07:51) 江苏省2017年高等数学竞赛本二试题(含解答)(2017-06-10 20:59) 裴礼文数学分析中的典型问题与方法第4章一元函数积分学练习(2017-06-10 11:04) 2017年厦门大学第十四届景润杯数学竞赛试卷(数学类)评分标准(2017-06-05 15:31) 2017年华东师范大学数学竞赛(数学类)试题(2017-06-05 15:28) 裴礼文数学分析中的典型问题与方法第3章一元微分学练习(2017-05-30

计算方法简介

简介: 计算方法又称“数值分析”.是为各种数学问题的数值解答研究提供最有效的算法. 笔记: 1误差与原则 (1)误差种类:模型误差.观测误差.截断误差和舍入误差. (2)法则: (a)加减运算:近似数加减时,把其中小数位数较多的数四舍五入,使其比小数位数最少的数多一位小数,计算保留的小数位数与原近似数最小数位数最少者相同. (b)乘除运算:近似数乘除时,各因子保留位数应比小数位数最少的数多一位小数,计算保留的小数位数与原近似数最小数位数最少者位数至多少一位. (c)乘方与开方运算:近似数乘方与开

高斯列主元素消去法解多元一次方程组

1.Gauss消去法及列主元素消去法算法介绍 2.c#源码 1 /******************************** 2 高斯列主元素消去法解多元一次方程组 3 * 4 * 例如 方程组 5 * x+y+z=7 6 * 2x+y-z=6 7 * x-y-2z=4 8 * 9 * 矩阵阶数N=3 10 * a[N,N]为1 1 1 11 * 2 1 -1 12 * 1 -1 -2 13 * b[N]为 7 14 * 6 15 * 4 16 **********************

Gauss消去法求线性方程组

给定线性方程组的系数,求解方程组是否有解. 1,找到系数矩阵行列为(k, k)的块绝对值最大的数作为主元,记下行和列,分别与第k列交换,与第k行交换,(行跟行交换,列跟列交换). 2,交换后,主元所在的行每一个元除以主元的值,使得主元所在的位置为1,常数列也除以主元的值. 3,进行初等行变换,使得主元所在的列的其他元为0. 4,判断系数矩阵和增广矩阵的秩是否相同,相同,有解,不相同,无解. 下面的是代码: #include <cmath> #include <iostream> #