gauss

行列式求解,列主元高斯消元法

北城余情 提交于 2020-04-15 16:45:09
【推荐阅读】微服务还能火多久?>>> 高斯消元法的弊端就是针对系数矩阵A,当遇到A(n,n)=0的情况时边无法处理(出现除0错误),以及有效减少计算机在处理浮点运算时出现舍入误差。 列主消元法代码: function [x]=ext_gauss(A,b) n=size(A,1); for k=1:n-1 [value,index]=min(abs(A(k:n,k))); index+=k-1; if value==0 break endif A([k,index],:)=A([index,k],:); b([k,index])=b([index,k]); %%gause m=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)-=m*A(k,k+1:n); A(k+1:n,k)=zeros(n-k,1); b(k+1:n)-=m*b(k); %%end gauss endfor 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); endfor endfunction 解决了高斯消元法中存在不能消元的现象。 本程序只能处理满秩系数矩阵。 来源: oschina 链接: https://my.oschina.net/u/870108/blog

行列式求解,高斯消元法

☆樱花仙子☆ 提交于 2020-04-15 16:44:49
【推荐阅读】微服务还能火多久?>>> 程序部分 gauss.m function [x]=gauss(A,b) n=size(A,1); for k=1:n-1 m=A(k+1:n,k)/A(k,k); A(k+1:n,k+1:n)-=m*A(k,k+1:n); A(k+1:n,k)=zeros(n-k,1); b(k+1:n)-=m*b(k); endfor 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); endfor endfunction 参数: A 输入系数矩阵 b 右端项 程序原理就是利用基础行列式变换构造一个三角形矩阵,然后三角形矩阵按照逆序分别求出x4 x3 x2 x1得到原始解。 示例 输入 A = 1 1 1 1 -1 2 -3 1 3 -3 6 -2 -4 5 2 -3 b = 10 -2 7 0 输出 ans = 1 2 3 4 局限性是 :高斯消去法无法处理输入矩阵A(i,i)=0的情况,而且使用过程中不稳定因素也比较大,属于基本的求值法。另外一种改进版的高斯消元方法是将主元进行排序然后再消元,可以解决传统方法的弊端。 列主元高斯消元法 来源: oschina 链接: https://my.oschina.net/u/870108