列主元消去法例題詳解 Gauss列主元消去法函式

2021-10-16 14:02:29 字數 1475 閱讀 9768

%列主元消去法解方程組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

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

m=j;

endend

if (m~=i)

for k=i:n

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

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

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

endd1=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);

endb(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);

endx(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

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);

endend

endend

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

列主元Gauss消去法 C 實現

原理 列主元素消去法是為控制捨入誤差而提出來的一種演算法,列主元素消去法計算基本上能控制捨入誤差的影響,其基本思想是 在進行第 k k 1,2,n 1 步消元時,從第k列的 akk及其以下的各元素中選取絕對值最大的元素,然後通過行變換將它交換到主元素akk的位置上,再進行消元。列主元消去法的基本思想...

Gauss列主元消去法(封裝函式)

高斯列主元消去法 封裝函式一 include include windows.h using namespace std intsolvereqguass double a,double b,int n,double eps,double x m n 賦值 for i 0 i a i n b i i...

實驗八Gauss列主元素消去法

實驗八gauss列主元素消去法 實驗目的 掌握gauss列主元素消去法求解線性方程組的過程。實驗內容 用gauss消去法求解線性方程組 先來看一下不選主元的方法 include include define n 3 void main float temp,m,x n int i,j,k,q,p f...