Matlab中Gauss全主元消元法求解线性方程组的程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Matlab中Gauss全主元消元法求解线性方程组的程序

function [x,qa]=gaussq(a,b) %输出想x为解,qa为全主元变换后的a矩阵d=[a b];

RA=rank(a);RD=rank(a);L=length(b);n=size(a);pos=1:n(1);

if RA~=RD

fprintf('无解')

else

if RA~=L

fprintf('有无数多个解')

else

fprintf('有唯一解')

for q=1:n

big=max(max(abs(a(q:n,q:n))));

for r=q:n

for t=q:n

if big==abs(a(r,t))

zhuh=r;

zhul=t;

end

end

end

p=a(q,:); %换主行

a(q,:)=a(zhuh,:);

a(zhuh,:)=p;

bb=b(q);

b(q)=b(zhuh);

b(zhuh)=bb;

p=a(:,q); %换主列

a(:,q)=a(:,zhul);

a(:,zhul)=p;

p=pos(q); %记录由于换主列而造成的解的位置的变化 pos(q)=pos(zhul);

pos(zhul)=p;

end

c=[a b];

for j=1:L-1 %化为上三角阵

for i=(j+1):L

m=c(i,j)/c(j,j);

c(i,:)=c(i,:)-c(j,:)*m;

end

end

x(L,1)=c(L,L+1)/c(L,L);

for k=L-1:-1:1 %求解x

x(k,1)=(c(k,L+1)-c(k,k+1:L)*x(k+1:L))/c(k,k);

end

y=[1:n(1)]'; %交换被列调换时打乱的解的位置

for w=1:n

for v=1:n

if (pos(v)==w)

y(w)=x(v);

end

end

end

x=y;

end

end qa=a;

相关文档
最新文档