当前位置:文档之家› 列主元消去法求解线性方程组_matlab代码

列主元消去法求解线性方程组_matlab代码

列主元消去法求解线性方程组_matlab代码
列主元消去法求解线性方程组_matlab代码

function [rA,rB,n,X] = zhuyuan(A,b)

%用列主元消去法求解线性方程Ax=b

%输入:系数矩阵A,方程组右端项向量b

%输出:系数矩阵A与增广阵B的秩,方针A的阶数,方程组的解X

B=[A b];

n=length(b);

rA=rank(A);

rB=rank(B);

if rB>rA,%判断方程组是否有解

disp('The equation set has no solution.')

end

if rA==rB,

if rA==n,%满秩,方程组的解唯一

disp('The equation set has only one solution.')

X=zeros(n,1);

C=zeros(1,n+1);

for p=1:n-1

[~,j]=max(abs(B(p:n,p)));%选出第p列中绝对值最大的元素,其行数为j

C=B(p,:);

B(p,:)=B(j+p-1,:);

B(j+p-1,:)=C;%通过初等行变换把绝对值最大的元素换到主对角元位置上

for k=p+1:n%消元计算

m=B(k,p)/B(p,p);

B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1);

end

end

b=B(1:n,n+1);

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

X(n)=b(n)/A(n,n);%回代求解

for q=n-1:-1:1

X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);

end

end

else%A不满秩,方程组有无穷多解

disp('The equation set has countless solutions.')

end

end

数值分析列主元消去法的实验报告

实验一 列主元消去法 【实验内容】 1.掌握列主元消去法的基本思路和迭代步骤 2.并能够利用列主元的高斯消去法解任意阶数的线性方程组; 3、从课后题中选一题进行验证,得出正确结果,交回实验报告与计算结果。 【实验方法与步骤】 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =-L (1) 选主元,找{},1,,k i k k n ∈+L 使得 ,max k i k ik k i n a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3); (3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ?, ,,1j k n =+L ; (4) 消元,对,,i k n =L ,计算/,ik ik kk l a a =对1,,1j k n =++L ,计算 .ij ij ik kj a a l a =- 步骤 2:回代过程: (1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2); (2) ,1/;n n n nn x a a +=对1,,2,1i n =-L ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑

[实验程序] #include #include #include #include #define NUMBER 20 #define Esc 0x1b #define Enter 0x0d using namespace std; float A[NUMBER][NUMBER+1] ,ark; int flag,n; void exchange(int r,int k); float max(int k); void message(); void main() { float x[NUMBER]; int r,k,i,j; char celect; void clrscr(); printf("\n\nUse Gauss."); printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc."); celect=getch(); if(celect==Esc) exit(0); printf("\n\n input n="); scanf("%d",&n); printf(" \n\nInput matrix A and B:"); for(i=1;i<=n;i++) { printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i); for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]); } for(k=1;k<=n-1;k++) { ark=max(k); if(ark==0) { printf("\n\nIt’s wrong!");message();

利用高斯列主元消去法求如下线性方程组的解

%利用高斯列主元消去法求如下线性方程组的解 clear all; A=[3 -2 1 -1;4 0 -1 2;0 0 2 3;0 0 0 5]; b=[8;-3;11;15]; function [X,XA] = UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 N=size(A); n=N(1); index=0; for i=1:(n-1) me=max(abs(A(1:n,i)));%选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb;%交换主行 for j=(i+1):n if(a(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m;

end; X=UpTriangleFun(A,b); XA=A; ----------------------------------------------------------------------------------------------------------------------------- % 函数定义 function [X,XA]= UpGaussFun(A,b) %利用高斯列主元消去法求如下线性方程组的解 %A为一个n阶上三角非奇异矩阵 %b为线性方程组的阐述向量 %X为线性方程组AX=b的解 %XA为消元后的系数矩阵 [N,M]=size(A); %N=sizes(A); n=N; index=0; for i=1:(n-1) me=max(abs(A(1:n,i))); %选列主元 for k=i:n if(abs(A(k,i))==me) index=k; break; end; end; temp=A(i,1:n); A(i,1:n)=A(index,1:n); A(index,1:n)=temp; bb=b(index); b(index)=b(i); b(i)=bb; %交换主行 for j=(i+1):n if(A(i,i)==0) disp('?????a???a0£?'); return; end; l=A(j,i); m=A(i,i); A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; b(j)=b(j)-l*b(i)/m; end; end;

Gauss列主元消去法

贵州师范大学数学与计算机科学学院学生实验报告 课程名称:数值分析班级:数本(一)班实验日期:年月日 学号: 0098(81)姓名:吴胜指导教师:杨一都 实验成绩:一、实验名称 实验五:线性方程组的数值解法 二、实验目的及要求 1. 让学生掌握用列主元gauss消去法、超松弛迭代法求解线性方程组. 2. 培养Matlab编程与上机调试能力. 三、实验环境 每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、(或. 四、实验内容 1. 编制逐次超松弛迭代(SOR迭代)函数(子程序),并用于求解方程组

???????=-++=+-+=++-=+++-1 4141414432143214 3214321x x x x x x x x x x x x x x x x 取初始向量T x )1,1,1,1()0(=,迭代控制条件为 5)1()(102 1 ||||--?≤-k k x x 请绘制出迭代次数与松弛因子关系的函数曲线,给出最佳松弛因子.SOR 迭代的收敛速度是否一定比Gauss-Seidel 迭代快 2. 编制列主元 Gauss 消去法函数(子程序),并用于解 ??? ??=++-=-+-=+-6 15318153312321 321321x x x x x x x x x 要求输出方程组的解和消元后的增广矩阵. 注:题2必须写实验报告 五、算法描述及实验步骤 Gauss 消去法: 功能 解方程组b Ax = . 输入 n ,n n ij a A ?=)(,T n b b b b ),,,(21 =. 输出 方程组的解T n x x x x ),,,(21 =或失败信息. 步1 对1,,2,1-=n k 执行步2→步4 . 步2 调选列主元模块 .

Guass列主元消去法及其应用

一、实验目的与要求 了解Guass列主元消去法及其应用,掌握利用Guass列主元消去法解方程,解决实际问题 二、模型求解 0.x+0.4y+0.3z+60000=x 0.3x+0.1y+0.2z+30000=y 0.2x+0.1y+0.2z+50000=z 三、源代码: #include #include #include #define N 20 #define EPS 1.0e-4 double a[N][N],b[N],c[N][N],d[N][N];

void swap(double &a,double &b)//换行 { double temp; temp=a; a=b; a=temp; } void gauss(double a[][N],double b[N],int n)//gauss求解 { int i,j,k,l; double temp,m; for(k=0;k<=n-2;k++) { temp=fabs(a[k][k]); //选主元 l=k; for(i=k+1;itemp))//fabs为取绝对值函数。包含在头文件math.h中 {

temp=fabs(a[i][k]); l=i; } } if(fabs(a[l][k])

高斯列主元消元法解线性方程组

高斯列主元消元法解线性方程组 一、题目:用Gauss 列主元消去法解线性方程组Ax b =,其中, A=17.031 -0.615 -2.991 1.007 -1.006 0.000-1.000 34.211 -1.000 -2.100 0.300 -1.7000.000 0.500 13.000 -0.500 1.000 -1.5004.501 3.110 -3.907 -61.705 12.170 8.9990.101 -8.012 -0.017 -0.910 4.918 0.1001.000 2.000 3.000 4.500 5.000 21.803?? ? ? ? ? ? ? ? ??? 0.230 -52.322 54.000 240.236 29.304 -117.818b ?? ? ? ?= ? ? ? ? ??? T X=(0.907099 -1.961798 3.293738 -4.500708 3.029344 -5.255068) 二、原理及步骤分析 设 n n ij R a A ?∈=][)1(,n n R b b b b ∈=],,,[)1()2(2)1(1 。若约化主元素 ),,2,1(0)(n k a k kk =≠,则通过高斯消元法将方程b AX =约化为三角形方程组求解。 如果在消元过程中发现某个约化主元0) (=k kk a , 则第K 次消元就无法进行。此外,即 使所有约化主元全不为零,虽然可以完成方程组的求解,但也无法保证结果的可靠性,因为计算过程中存在舍入误差。 为减少计算过程中的舍入误差对解的影响,在每次消元前,应先选择绝对值尽可能大的元作为约元的主元,如果在子块的第一列中选取主元,则相应方法称为列主元消元法。相应过程为: (1)选主元:在子块的第一列中选择一个元) (k k i k a 使) (max k ik n i k k k i a a k ≤≤= 并将第k 行元与第k i 行元互换。 (2)消元计算:对k=1,2,……n-1依次计算 ()()()?? ?? ?????++=-=++=-=++==++n k k i b m b b n k k j i a m a a n k k i a a m k k ik k i k i k kj ik k ij k ij k kk k ik k ik ,,2,1,,2,1,,,2,1) ()()1() ()()1()() ()( (3)回代求解

列主元消去法

实验一 列主元消去法 【实验内容】1. 掌握列主元消去法的基本思路和迭代步骤 2. 并能够利用列主元的高斯消去法解任意阶数的线性方程组; 【实验方法与步骤】列主元消去法编写程序 1.列主元消去法基本思路 设有线性方程组Ax b =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]|B A b =,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 2.列主元高斯消去法算法描述 将方程组用增广矩阵[]()(1)|ij n n B A b a ?+==表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,max k i k ik k i n a a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3); (3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ?, ,,1j k n =+ ; (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 .ij ij ik kj a a l a =- 步骤 2:回代过程: (1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2); (2) ,1/;n n n nn x a a +=对1,,2,1i n =- ,计算 ,11/n i i n ij j ii j i x a a x a +=+??=- ??? ∑ 习题3第一题程序如下

#include #include #define N 3 int I; float max_value(float a[N][N+1],int n,int k) { float max; int i; max=a[k][k]; for(i=k+1;i

实验三高斯列主元消去法

实验三 高斯列主元消去法 一、实验目的: 1、掌握高斯消去法的基本思路和迭代步骤。 2、 培养编程与上机调试能力。 二、高斯列主元消去法的基本思路与计算步骤: 设有方程组Ax b =,设A 是可逆矩阵。高斯消去法的基本思想就是僵局真的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。 列主元高斯消去法计算步骤: 将方程组用增广矩阵[]()(1)ij n n B A b a ?+== 表示。 步骤1:消元过程,对1,2,,1k n =- (1) 选主元,找{},1,,k i k k n ∈+ 使得 ,max k i k ik k i n a a ≤≤= (2) 如果 ,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3)。 (3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ?,,,1j k n =+ 。 (4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算 . ij ij ik kj a a l a =- 步骤 2:回代过程: (1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2)。 (2) ,1/;n n n nn x a a +=对1,,2,1i n =- ,计算,11/n i i n ij j ii j i x a a x a +=+??=- ???∑ 三:程序流程图

四:程序清单: function X=uptrbk(A,b) % A是一个n阶矩阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 [N N]=size(A); X=zeros(1,N+1); Aug=[A b]; for p=1:N-1 [Y,j]=max(abs(Aug(p:N,p)));%返回向量的最大值存入y,最大值的序号存入j。 C=Aug(p,:); Aug(p,:)=Aug(j+p-1,:); Aug(j+p-1,:)=C; if Aug(p,p)==0 'A是奇异阵,方程无惟一解' break end for k=p+1:N m=Aug(k,p)/Aug(p,p); Aug(k,p:N+1)=Aug(k,p:N+1)-m*Aug(p,p:N+1); end end % 这里用到程序函数backsub来进行回代。 X=backsub(Aug(1:N,1:N),Aug(1:N,N+1)); function X=backsub(A,b) % A是一个n阶上三角非奇异阵。 % b是一个n维向量。 % X是线性方程组AX=b的解。 n=length(b);%取b向量的个数。 X=zeros(n,1); X(n)=b(n)/A(n,n); for k=n-1:-1:1 X(k)=(b(k)-A(k,k+1:n)*X(k+1:n))/A(k,k); End 五、测试数据与结果: 测试数据:(第8章习题三第2题)求解线性方程组: 解:建立一个主程序gs.m clc clear A=[1,2,3;5,4,10;3,-0.1,1]; b=[1;0;2];

Gauss列主元消去法程序设计

《Gauss列主元消去法》实验报告 实验名称:Gauss列主元消去法程序设计???成绩:_________ 专业班级:数学与应用数学1202班?姓名:王晓阳???学号: 实?验?日?期:?2014?年11月10日 实验报告日期:?2014年?11月10日 一.实验目的 1. 学习Gauss消去法的基本思路和迭代步骤. 2. 学会运用matlab编写高斯消去法和列主元消去法程序,求解线性方程组. 3. 当绝对值较小时,采用高斯列主元消去法? 4. 培养编程与上机调试能力. 二、实验内容 用消去法解线性方程组的基本思想是用逐次消去未知数的方法把原线性方程组Ax二b 化为与其等价的三角形线性方程组,而求解三角形线性方程组可用回代的方法求解 1. 求解一般线性方程组的高斯消去法? (1) 消元过程: 设a kk k-0 ,第i个方程减去第k个方程的m ik Tk k倍,("k 1^1, n),得到 A k1x=b k1.

经过n-1次消元,可把方程组A1^b1化为上三角方程组A n x=b n. ⑵回代过程: 以解如下线性方程组为例测试结果 2. 列主元消去法 由高斯消去法可知,在消元过程中可能出现a kk k =0的情况,这是消去法将无法进行, 即使主元素a kk k-0但很小时,用其作除数,会导致其他元素数量级的严重增长和舍入误差的扩散,最后也使得计算解不可靠.这时就需要选取主元素,假定线性方程组的系数矩阵A是菲奇异的. (1)消元过程: 对于k =1,2,川,n -1,进行如下步骤: 1) 按列选主元,记 2) 交换增广阵A的p,k两行的元素 A(k,j)=A(p,j) ( j=k,…,n +1) 3) 交换常数项b的p,k两行的元素。 b(k)=b(p) 4) 计算消元 (2) 回代过程 (3) 以解如下线性方程组为例测试结果 三、实验环境 MATLAB R2014a 四、实验步骤

数值计算方法实验报告一gass列主元消去法解线性方程组

实验课程名称计算机数值方法 实验项目名称Guass列主元素消去法 年级 专业 学生姓名 学号 理学院 实验时间:2012 年月日

学生实验室守则 一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。 二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。 三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。 四、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。 五、实验中要节约水、电、气及其它消耗材料。 六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。 七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。 八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。 九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经批准后,方可补做。 十、自选实验,应事先预约,拟订出实验方案,经实验室主任同意后,在指导教师或实验技术人员的指导下进行。 十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。

使用列主元消元法解方程组 c语言代码

使用列主元消元法解方程组c语言代码 # include # include # define N 3 main(){ int i,j,k,h,s,m,n,z; float max(float *y); float A[N][N+1],B[N],ma,t,M[N]={0},X; float x[N]; /*输入系数矩阵*/ for(i=0;i

t=A[i][h]; A[i][h]=A[k][h]; A[k][h]=t; } } } else { printf("A是非奇异矩阵!\n"); break; } /* 消去过程*/ for (m=i+1;m0 || i==0;i--) { for(j=N-1;j>i;j--) X=X+A[i][j]*x[j]; x[i]=(A[i][N]-X)/A[i][i]; X=0; } /* 将方程的解输出

列主元高斯消去法和列主元三角分解法解线性方程

计算方法实验报告1 【课题名称】 用列主元高斯消去法和列主元三角分解法解线性方程 【目的和意义】 高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。 用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为 32(1)(1)(21)(1)(1)262233n n n n n n n n n n n MD n ----+= +++=+-,加减运算步骤为 (1)(21)(1)(1)(1)(25) 6226n n n n n n n n n n AS -----+= ++= 。相比之下,传统的克莱姆 法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19 510?次乘法,而用高斯消去法只需要3060次乘除法。 在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。 2、列主元三角分解法 高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。回带过程就是求解上三角方程组Ux=y 。所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法 采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度 【计算公式】 1、 列主元高斯消去法 设有线性方程组Ax=b ,其中设A 为非奇异矩阵。方程组的增广矩阵为 第1步(k=1):首先在A 的第一列中选取绝对值最大的元素 1 l a ,作为第一步的主元素: 111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ?????? ?? =?????? ?? ????a b

高斯列主元消去法

数值分析大作业 --――(高斯列主元消去法求解线性方程组) 课程名称:数值分析 授课老师:宋国乡 指导导师:丁振国 学生:王伟伟 学号:0425121523 日期:2004/11/20

高斯列主元消去法解线性方程组 一:问题的提出 我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。实际运算的时候因为只能有限小数去计算,因此只能得到近似值。在实际运算的时候,我们很多时候也常用高斯消去法。但是高斯消去法在计算机中运算的时候常会碰到两个问题。 1.一旦遇到某个主元等于0,消元过程便无法进行下去。 2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。 为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。其中又可以分为列选主元和全面选主元两种方法。目前计算机上常用的按列选主元的方法。因此我在这里做的也是列选主元高斯消去法。 二、算法的基本思想 大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。高斯消元法的目的就是把一般线性方程组简化成上三角方程组。于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程

列主元消去法MATLAB程序

列主元消去法MATLAB程序: function [RA,RB,n,X]=liezhu(A,b) B=[A b]; n=length(b); RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('??×¢òa£oòò?aRA~=RB£??ùò?′?·?3ì×é?T?a.') return end if RA==RB if RA==n disp('??×¢òa£oòò?aRA=RB=n£??ùò?′?·?3ì×éóD?¨ò??a.') X=zeros(n,1); C=zeros(1,n+1); for p= 1:n-1 [Y,j]=max(abs(B(p:n,p))); C=B(p,:); B(p,:)= B(j+p-1,:); B(j+p-1,:)=C; for k=p+1:n m= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n); for q=n-1:-1:1 X(q)=(b(q)- sum(A(q,q+1:n)*X(q+1:n)))/A(q,q); end else disp('??×¢òa£oòò?aRA=RB

列主元消除法,M文件 a=[2.51 1.48 4.53;1.48 0.93 -1.30 ;2.68 3.04 -1.48]; b=[0.05;1.03;-0.53]; [RA,RB,n,X]=liezhu(a,b) 运行结果;

LU分解高斯消元列主元高斯消元matlab代码

数学实验作业 一、矩阵LU分解: function [L,U,p]=lutx(A) [n,n]=size(A); p=(1:n)'; for k=1:n-1 [r,m]=max(abs(A(k:n,k))); m=m+k-1; if (A(m,k)~=0) if (m~=k) A([k m],:)=A([m k],:); p([k m])=p([m k]); end i=k+1:n; A(i,k)=A(i,k)/A(k,k); j=k+1:n; A(i,j)=A(i,j)-A(i,k)*A(k,j); end end L=tril(A,-1)+eye(n,n) U=triu(A) p end 高斯消元法求解方程: n=3; a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19]; l=eye(n); y=1; for i=1:(n-1) for j=1:(n-i) if a(j+(i-1)*n+y)~=0 l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j) for k=1:(n-i+1) a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j)*l(j+(i-1)*n+y) end b(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y); end end y=y+1;

end sum=0; for j=1:n sum=sum+x(j)+a(k,j); end sum=0; for j=1:n x(j)=0; end for k=n:-1:1 for j=1:n sum=sum+x(j)*a(k,j) end x(k)=(b(k)-sum)/a(k,k) sum=0; end 列主元高斯消元法代码: n=3; a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19]; l=eye(n); p=eye(n); ma=0 for i=1:(n-1) for j=i:n if a(j,i)>ma; ma=a(j,i) end end for k=i:n if a(k,i)==ma m=k; end end for j=1:n a1=a(m,j); a(m,j)=a(i,j);

列主元消去法解方程组实验报告

实验名称:列主元消去法解方程组 1引言 我们知道,高斯消去法是一个古老的解线性方程组的方法。而在用高斯消去法解Ax=b 时,其中设A为非奇异矩阵,可能出现a kk)0的情况,这时必须进行带行交换的高斯消去法。但在实际计算中即使a kk)0但其绝对值很小时,用a;:〉作除数,会导致中间结果矩阵A(k)元素数量级严重增长和舍入误差的扩散,使得最后的结果不可靠。因此,小主元可能导致计算的失败,我们应该避免采用绝对值很小的主元素。为此,我们在高斯消去法的每一步应该在系数矩阵或消元后的低阶矩阵中选取绝对值最大的元素作为主元素,保持乘数1,以便减少计算过程中舍入误差对计算解的影响。 一种方式是完全主元消去法,这种消去法是在每次选主元时,选择a(二k max a j k)0 kJ k k in」 k j n 为主元素。这种方法是解低阶稠密矩阵方程组的有效方法,但这种方法在选取主元时要花费一定的计算机时间。实际计算中我们常采用部分选主元的的消去法。列主元消去法即在每次 选主元时,仅依次按列选取绝对值最大的元素作为主元素,且仅交换两行,再进行消元计算 2实验目的和要求 运用matlab编写一个.m文件,要求用列主元消去法求解方程组(实现PA=L) 111111 2 11111 3 2 1111 4 3 2 1 1 1 5 4 3 2 1 1 6 5 4 3 2 1 7 6 5 4 3 2 要求输出以下内容: (1) 计算解x; x. 117 1x28 1x310 1x413 1x517 1 x6 22 128 x 7

(2) L,U ; (3) 整形数组IP (i ) (i=1,2,…,n-1 )(记录主行信息) 3算法原理与流程图 (1) 算法原理 设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为 an a12L L a1n M bi a21a22L L a2n M b2 [代口 M M M M a i1 M M M M a n1a n2L L a nn M b n 第1步(k=1):首先在A的第一列中选取绝对值最大的元素a^,作为第一步的主元素3in max 耳!0,然后交换(A,b)的第1行与第i1行元素,再进行消元计算。 1 1 i n 设列主元素消去法已经完成第1步到第k-1步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组A(k)x b(k) J1) c ⑴ an ai2 L a(k)a1(n)M ⑵ L (2)⑵ M a22a2k a2n b2() O M M M [A,b] [A(k),b(k)]a kk)L a kk)M.(k)bk a k k)u a k k)1,n M(k) d 1 M M M M a nk)L a(k)叫 n M 第k步计算如下: 对于k=1,2,…,n-1 (1)按列选主元:即确定ik使 时max无0

数值分析实验二(列主元Gauss消去法)

《数值分析》实验报告 实验编号:实验二 课题名称:列主元Gauss消去法 一、算法介绍 1、输入矩阵的阶数n,方程组的增广矩阵A; 2、对k=0,1,…,n-2,循环:选取列中绝对值最大的元素,将主元所在的行的元素保存在 数组temp[n+1]中。若主元为零,则系数矩阵奇异,计算停止;否则,顺序进行。如果绝对值最大的元素就在矩阵的对角线上,则进行普通高斯消元法的第一大步,否则将方程组系数换行之后再进行普通高斯消元法的第一大步; 3、然后利用回代法求解线性方程组。 二、程序代码 #include #include #include using namespace std; int main() { int n=0,k=0,i=0,j=0,h=0,g=0,flag=0,i1,j1; double max=0,m=0; cout<<"***利用列主元Gauss消元法求解线性方程组***"<>n; double a[n][n+1]; double t[n+1]; double x[n]; memset(a,0,sizeof(a)); memset(x,0,sizeof(x)); cout<<"请输入方程组的增广矩阵:"<>a[i][j]; } } for(k=0;kmax) { max=fabs(a[i][k]); i1=i; j1=k; } } if(max==0)

数值分析计算实习题列主元高斯消去法解线性方程组

数值分析计算实习题 第5章解线性方程组的直接方法 【选题 列主元高斯消去法解线性方程组。 书上的计算实习题1、2、3都要求用列主元高斯消去法解线性方程组,所以考虑写一个普适的程序来实现。 对于线性方程组Ax二b,程序允许用户从文件读入矩阵数据或直接在屏幕输入数据。 文件输入格式要求: (1)第一行为一个整数n (2<=n<=100),表示矩阵阶数。 (2)第2~n+l行为矩阵A各行列的值。 (3)第n+2~n+n+2行为矩阵b各行的值。 屏幕输入:按提示输入各个数据。 输出:A. b、det(A).列主元高斯消去计算过程、解向量X。

【算法说明】 设有线性方程组Ax=b,其中设A为非奇异矩阵。方程组的增广矩阵为 ?12 ?21 [Nb] = 第1步(k=l ):首先在A的第一列中选取绝对值最大的元素?I,作为第一步的主元素: ?|| H0 然后交换(A, b)的第1行与第I行元素,再进行消元计算。 设列主元素消去法已经完成第1步到第k?l步的按列选主元,交换两行,消元计算得到与原方程组等价的方程组 A(k)x=b(k) 4? …4;) …唸) ? 忒 ? ? 輕 ■ [A.b]T[A ⑹,b")] = ??■ 咲■ ■ ■ ■ ■ * *■ 〃伏) ?? - % ■ 第k步计算如下: 对于 k=l, 2, ?…,0-1 (1)按列选主元:即确定t使 (2)如果tHk,则交换[A, b]第t行与第k行元素。(3)消元计算

5 4* J 叫=一鱼(=^ + 1,…,H) % 吗 <-?y + 〃如伽 (fJ = R + l,…/) b- <-勺+加汝仇, (i = /c + l,…,《) 消元乘数mik 满足: n (%-D 内) X1 < ------ -- ---- 9(j = ? 一 1,?一2■…J)tk M 1,(,=斤 +1, ???,?) fet e (4)回代求解

Gauss列主元消去法的C程序

#include #include #define N 20 #define EPSILON 0.000000001 void main() { int i,j,k,n,i0; double a[N][N]; double b[N]; double l[N][N]; double t; printf("数组的维数n\n"); scanf("%d",&n); printf("输入a[i][j]\n"); for(i=0;i

for(j=k;j-1;i--) { for(j=i+1;j

实验二:列主元消元法实验报告

《数值分析》实验报告 实验序号:实验二题目名称: 列主元Gauss消元法解n阶线性代数方程组 学号: 姓名: 任课教师: 马季骕专业班级:计算机科学与技术(非师范) 1、实验目的:用列主元Gauss消元法解n阶线性代数方程组 编写一个程序实现用列主元消元法实现解方程组的问题。 2、算法分析: 其基本做法是把上述方程组通过列主元Gauss消元转化为一个等价的三角形方程组,然后再进行回代就可以求出方程组的解。列主元消元的基本做法是选取系数矩阵的每一列中绝对值最大的作为主元,然后采取和顺序Gauss 消元法相同的步骤进行,求得方程组的解。 1. 列主元Gauss消元法的算法思想: 1.输入系数矩阵A,右端项b,阶n。 2.对k=1,2,…,n,循环: (a)按列选主元保存主元所在行的指标。 (b)若a=0,则系数矩阵奇异,计算停止;否则,顺序进行。 (c)若=k则转向(d);否则换行 (d)计算乘子 (e)消元: 3. 回代:用右端项b来存放解。 3、实验分析: 建立两个数组a和b,通过循环语句将n阶增广矩阵输入进去,通过对列的循环对每一列进行消去未知数,通过n小步n大步把矩阵化简成上三角形矩阵,最后通过迭代法解得方程组得解。 3、函数分析: 具体程序设计:

for(i=1;i<=n;i++) //消元的第一重循环 { p=0; q=0; for(m=i;m

相关主题
文本预览
相关文档 最新文档