matlab 用列主元高斯消去法求逆矩阵
clc;clear;formatshortdisp('请输入矩阵A:');A=input('A=');[n,n]=size(A);whiledet(A)==0disp('...
clc;clear;format short
disp('请输入矩阵A:');
A=input('A=');
[n,n]=size(A);
while det(A)==0
disp('矩阵A不存在逆矩阵');
clear;
disp('请重新输入矩阵A');
A=input('A=');
[n,n]=size(A);
continue
end
s=1;P=zeros(1,n);
while s<=n
max=abs(A(s,s));
big=0;
for m=s:n
if max<abs(A(m,s))
max=abs(A(m,s));
q=m;
big=1;
else continue
end
end
if big==1
P(s)=q;
D=A(s,:);
A(s,:)=A(q,:);
A(q,:)=D;
end
for i=1:n
if i~=s
for j=1:n
if j~=s
A(i,j)=A(i,j)-A(s,j)*A(i,s)/A(s,s);
else continue
end
end
else continue
end
A(i,s)=-A(i,s)/A(s,s);
end
for k=1:n
if k<s
A(s,k)=A(s,k)/A(s,s);
end
if k==s
A(s,k)=1/A(s,s);
end
if k>s
A(s,k)=A(s,k)*A(s,s);
end
end
s=s+1;
end
P
A
for i=n:(-1):1
if P(i)~=0
p=P(i);
d=A(:,i);
A(:,i)=A(:,p);
A(:,p)=d;
else continue
end
end
A
请教一下这个M文件的主要思路(我看不懂···)以及加上主要语句的注释~~ 展开
disp('请输入矩阵A:');
A=input('A=');
[n,n]=size(A);
while det(A)==0
disp('矩阵A不存在逆矩阵');
clear;
disp('请重新输入矩阵A');
A=input('A=');
[n,n]=size(A);
continue
end
s=1;P=zeros(1,n);
while s<=n
max=abs(A(s,s));
big=0;
for m=s:n
if max<abs(A(m,s))
max=abs(A(m,s));
q=m;
big=1;
else continue
end
end
if big==1
P(s)=q;
D=A(s,:);
A(s,:)=A(q,:);
A(q,:)=D;
end
for i=1:n
if i~=s
for j=1:n
if j~=s
A(i,j)=A(i,j)-A(s,j)*A(i,s)/A(s,s);
else continue
end
end
else continue
end
A(i,s)=-A(i,s)/A(s,s);
end
for k=1:n
if k<s
A(s,k)=A(s,k)/A(s,s);
end
if k==s
A(s,k)=1/A(s,s);
end
if k>s
A(s,k)=A(s,k)*A(s,s);
end
end
s=s+1;
end
P
A
for i=n:(-1):1
if P(i)~=0
p=P(i);
d=A(:,i);
A(:,i)=A(:,p);
A(:,p)=d;
else continue
end
end
A
请教一下这个M文件的主要思路(我看不懂···)以及加上主要语句的注释~~ 展开
4个回答
展开全部
程序如下
function x=gauss(A,b) %高斯求解方程组
%x=gauss(A,b)
n=length(A);
a=[A,b];
for k=1:n-1
maxa=max(abs(a(k:n,k)));
if maxa==0
return;
end
for i=k:n
if abs(a(i,k))==maxa
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;
end
end
for i=k+1:n
l(i,k)=a(i,k)/a(k,k);
a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1);
end
end
%回代
if a(n,n)==0
return
end
x(n)=a(n,n+1)/a(n,n);
for i=n-1:-1:1
x(i)=(a(i,n+1)-sum(a(i,i+1:n).*x(i+1:n)))/a(i,i);
end
调用示例如下:
A=[2,-1,3;4,2,5;1,2,0];
b=[1;4;7];
x=gauss(A,b)
x =
9 -1 -6
function x=gauss(A,b) %高斯求解方程组
%x=gauss(A,b)
n=length(A);
a=[A,b];
for k=1:n-1
maxa=max(abs(a(k:n,k)));
if maxa==0
return;
end
for i=k:n
if abs(a(i,k))==maxa
y=a(i,k:n+1);a(i,k:n+1)=a(k,k:n+1);a(k,k:n+1)=y;
break;
end
end
for i=k+1:n
l(i,k)=a(i,k)/a(k,k);
a(i,k+1:n+1)=a(i,k+1:n+1)-l(i,k).*a(k,k+1:n+1);
end
end
%回代
if a(n,n)==0
return
end
x(n)=a(n,n+1)/a(n,n);
for i=n-1:-1:1
x(i)=(a(i,n+1)-sum(a(i,i+1:n).*x(i+1:n)))/a(i,i);
end
调用示例如下:
A=[2,-1,3;4,2,5;1,2,0];
b=[1;4;7];
x=gauss(A,b)
x =
9 -1 -6
推荐于2017-10-04 · 知道合伙人教育行家
关注
展开全部
matlab 用列主元高斯消去法求逆矩阵:
a=input('请输入线性方程组的系数矩阵'); b=input('请输入线性方程组的右端列向量'); [Row,Col]=size(a); if Row ~= Col
'线性方程组的系数矩阵非方阵,程序终止'
return
end
if det(a)==0
'线性方程组的系数矩阵行列式为0'
return
end
%Gauss消元法 for k=1:n-1
if a (k,k) ==0
'对角线元素a(%1d,%1d)为零,程序终止'
return
end
for i =k+1:n
l(i,k) = a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-l(i,j)*a(k,j);
end
b(i)=b(i)-l(i,k)*b(k);
end
end
%回代过程 if a(n,n)==0
'对角线元素a(%1d,%1d)为零,程序终止'
return
end
x(n)=b(n)/a(n,n);
'线性方程组解为' x(n)
for i = n-1:-1:1
x(i)=b(i);
for j=k+1:n
x(i)= x(i)-a(i,j)*x(j);
end
x(i)=x(i)/a(i,i);
x(i)
end
a=input('请输入线性方程组的系数矩阵'); b=input('请输入线性方程组的右端列向量'); [Row,Col]=size(a); if Row ~= Col
'线性方程组的系数矩阵非方阵,程序终止'
return
end
if det(a)==0
'线性方程组的系数矩阵行列式为0'
return
end
%Gauss消元法 for k=1:n-1
if a (k,k) ==0
'对角线元素a(%1d,%1d)为零,程序终止'
return
end
for i =k+1:n
l(i,k) = a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-l(i,j)*a(k,j);
end
b(i)=b(i)-l(i,k)*b(k);
end
end
%回代过程 if a(n,n)==0
'对角线元素a(%1d,%1d)为零,程序终止'
return
end
x(n)=b(n)/a(n,n);
'线性方程组解为' x(n)
for i = n-1:-1:1
x(i)=b(i);
for j=k+1:n
x(i)= x(i)-a(i,j)*x(j);
end
x(i)=x(i)/a(i,i);
x(i)
end
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议楼主先弄明白高斯法求逆的思路,再回过来看这个程序,应该问题不大
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询