线性方程组求解Matlab程序Word格式文档下载.docx

上传人:b****2 文档编号:15174136 上传时间:2022-10-28 格式:DOCX 页数:31 大小:21.61KB
下载 相关 举报
线性方程组求解Matlab程序Word格式文档下载.docx_第1页
第1页 / 共31页
线性方程组求解Matlab程序Word格式文档下载.docx_第2页
第2页 / 共31页
线性方程组求解Matlab程序Word格式文档下载.docx_第3页
第3页 / 共31页
线性方程组求解Matlab程序Word格式文档下载.docx_第4页
第4页 / 共31页
线性方程组求解Matlab程序Word格式文档下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

线性方程组求解Matlab程序Word格式文档下载.docx

《线性方程组求解Matlab程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《线性方程组求解Matlab程序Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。

线性方程组求解Matlab程序Word格式文档下载.docx

1%回代

b(k)=b(k)—a(k,j)*x(j);

x(k)=b(k)/a(k,k);

Example:

〉〉A=[1.0170—0.00920.0095;

—0。

00920.99030.0136;

0.00950.01360.9898];

〉〉b=[101]'

>

〉x=DelGauss(A,b)

x=

0。

9739

—0。

0047

1。

0010

列主元Gauss消去法:

functionx=detGauss(a,b)

%Gauss列主元消去法

[n,m]=size(a);

det=1;

x=zeros(n,1);

n-1

amax=0;

%选主元

fori=k:

ifabs(a(i,k))>

amax

amax=abs(a(i,k));

r=i;

ifamax〈1e-10

return;

ifr>

k%交换两行

forj=k:

z=a(k,j);

a(k,j)=a(r,j);

a(r,j)=z;

z=b(k);

b(k)=b(r);

b(r)=z;

det=—det;

fori=k+1:

n%进行消元

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

a(i,j)=a(i,j)-m*a(k,j);

det=det*a(k,k);

det=det*a(n,n);

forj=k+1:

b(k)=b(k)-a(k,j)*x(j);

x(k)=b(k)/a(k,k);

Example:

〉x=detGauss(A,b)

0.9739

-0。

Gauss-Jordan消去法:

functionx=GaussJacobi(a,b)

%Gauss-Jacobi消去法

[n,m]=size(a);

x=zeros(n,1);

amax=0;

fori=k:

amax=abs(a(i,k));

ifamax<

1e-10

ifr〉k%交换两行

forj=k:

a(k,j)=a(r,j);

a(r,j)=z;

z=b(k);

b(k)=b(r);

%进行消元

b(k)=b(k)/a(k,k);

a(k,j)=a(k,j)/a(k,k);

fori=1:

ifi~=k

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

b(i)=b(i)—a(i,k)*b(k);

x(i)=b(i);

〉〉x=GaussJacobi(A,b)

1.0010

LU分解法:

function[l,u]=lu(a)

%LU分解

n=length(a);

l=eye(n);

u=zeros(n);

fori=1:

u(1,i)=a(1,i);

fori=2:

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

forr=2:

%%%%

fori=r:

uu=0;

fork=1:

r—1

uu=uu+l(r,k)*u(k,i);

u(r,i)=a(r,i)-uu;

%%%%

fori=r+1:

ll=0;

r-1

ll=ll+l(i,k)*u(k,r);

l(i,r)=(a(i,r)—ll)/u(r,r);

%%%%

End

functionx=lusolv(a,b)

%LU分解求解线性方程组aX=b

iflength(a)~=length(b)

error('

Errorininputing!

'

n=length(a);

[l,u]=lu(a);

y

(1)=b

(1);

fori=2:

z=0;

i—1

z=z+l(i,k)*y(k);

y(i)=b(i)-z;

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

fori=n—1:

—1:

1

fork=i+1:

z=z+u(i,k)*x(k);

x(i)=(y(i)-z)/u(i,i);

〉x=lusolv(A,b)

9739—0.00471.0010

对称正定矩阵之Cholesky分解法:

functionL=Cholesky(A)

%对对称正定矩阵A进行Cholesky分解

n=length(A);

L=zeros(n);

fork=1:

delta=A(k,k);

forj=1:

k—1

delta=delta—L(k,j)^2;

ifdelta〈1e—10

return;

L(k,k)=sqrt(delta);

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

k-1

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

L(i,k)=L(i,k)/L(k,k);

functionx=Chol_Solve(A,b)

%利用对称正定矩阵之Cholesky分解求解线性方程组Ax=b

n=length(b);

l=Cholesky(A);

x=ones(1,n);

y=ones(1,n);

fori=1:

z=0;

fork=1:

i-1

y(i)=(b(i)-z)/l(i,i);

fori=n:

-1:

fork=i+1:

z=z+l(k,i)*x(k);

x(i)=(y(i)—z)/l(i,i);

〉〉a=[9—3630;

-36192-180;

30-180180];

〉〉b=[111]’;

〉x=Chol_Solve(a,b)

83331。

08330。

7833

对称正定矩阵之LDL’分解法:

function[L,D]=LDL_Factor(A)

%对称正定矩阵A进行LDL'

分解

n=length(A);

L=eye(n);

D=zeros(n);

d=zeros(1,n);

T=zeros(n);

d(k)=A(k,k);

d(k)=d(k)—L(k,j)*T(k,j);

ifabs(d(k))〈1e-10

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

forj=1:

T(i,k)=T(i,k)—T(i,j)*L(k,j);

L(i,k)=T(i,k)/d(k);

D=diag(d);

functionx=LDL_Solve(A,b)

%利用对对称正定矩阵A进行LDL'

分解法求解线性方程组Ax=b

[l,d]=LDL_Factor(A);

y

(1)=b

(1);

z=z+l(i,k)*y(k);

y(i)=b(i)-z;

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

fori=n—1:

z=z+l(k,i)*x(k);

x(i)=y(i)/d(i,i)—z;

〉x=LDL_Solve(a,b)

2。

迭代法

Richardson迭代法:

function[x,n]=richason(A,b,x0,eps,M)

%Richardson法求解线性方程组Ax=b

%方程组系数矩阵:

A

%方程组之常数向量:

b

%迭代初始向量:

X0

%e解的精度控制:

eps

%迭代步数控制:

M

%返回值线性方程组的解:

x

%返回值迭代步数:

if(nargin==3)

eps=1。

0e-6;

M=200;

elseif(nargin==4)

I=eye(size(A));

x1=x0;

x=(I-A)*x0+b;

n=1;

while(norm(x-x1)〉eps)

x1=x;

x=(I-A)*x1+b;

n=n+1;

if(n>

=M)

disp('

Warning:

迭代次数太多,现在退出!

);

〉>

A=[1.0170-0。

00920.0095;

00920.99030。

0136;

0。

00950。

01360.9898];

〉b=[101]’;

x0=[000]’;

〉[x,n]=richason(A,b,x0)

—0.0047

n=

5

Jacobi迭代法:

function[x,n]=jacobi(A,b,x0,eps,varargin)

ifnargin==3

eps=1.0e—6;

elseifnargin〈3

error

elseifnargin==5

M=varargin{1};

end

D=dia

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1