%老师要求做一个函数
%此函数功能与rref函数功能一样
%查看了matlab内嵌的rref代码,简单!
%这里用常见逻辑加嵌套等去完成这个功能
%存在一定的缺点
function fun=easy3(x)
a=size(x,1);
b=size(x,2);
flag=0;
flbg=1;
kk=1;
while kk<=a
nn = kk;
if flbg==0 %当非第一个元素的右下对角线元素其中一个为0的时候 列号应加1
nn=nn+1;
end
min=1000; %每一趟结束后初始化为1000
for ii=kk:a
if flag==1 && nn+1<=b
nn=nn+1;
flbg=0;
flag=0;
end
if nn<=b && x(ii,nn)<min && x(ii,nn)~=0 %x(1,1)不要0
min=x(ii,nn); %找出一行中首元素的最小值
jj=ii; %记录横坐标
mm=nn; %记录纵坐标
end
end
if min==1000 %一行中全为0的情况
if kk==a %如果到了最后一行 而且‘那个’元素为0
break;
end
flag=1; %标记
continue;
else
x([kk,jj],:)=x([jj,kk],:); %行与行交换
x(kk,:)=x(kk,:)/x(kk,mm); %把此行第一个非零元素变为1
end
if kk+1<=a %判断是否为1——(a-1)行
for ii=(kk+1):a %向下相加减
x(ii,:)=x(ii,:) - x(ii,mm)*x(kk,:);
end
end
if kk-1>=1 %判断是否为2——a行
for ii=(kk-1):-1:1 %向上相加减
x(ii,:)=x(ii,:) - x(ii,mm)*x(kk,:);
end
end
kk=kk+1;
end
fun = x;
%还望朋友们帮忙验证一下,若有漏解的情况,麻烦告知一下,或者有不对的地方也可指出,谢谢。