零下一度 发表于 2011-12-29 13:42:19

求改编一个判断矩阵顺序主子式是否为零的程序

matlab代码
for i=1:n
    w=det(a(1:i,1:i));
    if w==0
      error('矩阵的顺序主子式为零,无法作LU分解,程序中止');
    end
end
这一段怎么改成CX CAS的程序?

for i,1,n
    w:=det(a)   →这一块儿不太会处理了
    if w=0 then
      disp"矩阵的顺序主子式为零,无法作LU分解,程序中止"
    endif
endfor




matlab 完整程序
clear
a=;
b=
=size(a);
if m~=n
    error('矩阵非方阵,程序中止')
end
%计算a的各阶顺序主子式,判断能否进行LU分解
for i=1:n
    w=det(a(1:i,1:i));
    if w==0
      error('矩阵的顺序主子式为零,无法作LU分解,程序中止');
    end
end
%作LU分解
u(1,1:n)=a(1,1:n);%给出U的第一行
l(1,1)=1;%给出L的第一列
l(2:n,1)=a(2:n,1)/u(1,1);
for r=2:n%计算U的第r行、L的第r列
    for i=r:n
      u(r,i)=a(r,i);%计算U的第r行
      for k=1:r-1
            u(r,i)=u(r,i)-l(r,k)*u(k,i);
      end
    end
    l(r,r)=1;%计算L的第r列   
    if r~=n
      for i=r+1:n
             l(i,r)=a(i,r);
             for k=1:r-1
                   l(i,r)=l(i,r)-l(i,k)*u(k,r);
             end
             l(i,r)=l(i,r)/u(r,r);
         end
    end
end
fprintf('方阵为\n')
disp(a)
fprintf('单位下三角阵L为\n')
disp(l)
fprintf('单位上三角阵U为\n')
disp(u)
y=l\b
x=u\y

零下一度 发表于 2011-12-29 13:48:02

貌似有点眉目了。。。
subMat(Matrix1[, startRow] [, startCol] [, endRow] [, endCol])
把这个给忘了。。

零下一度 发表于 2011-12-29 13:52:20

for i,1,n
    w:=det(submat(a,1,1,i,i))
    if w=0 then
      disp"矩阵的顺序主子式为零,无法作LU分解,程序中止"
    endif
endfor
这样是否就对了?

imath 发表于 2011-12-29 20:36:40

直接把lu函数放在try里面

零下一度 发表于 2011-12-29 22:09:59

直接把lu函数放在try里面
imath 发表于 2011-12-29 20:36 http://www.cncalc.org/images/common/back.gif
lu函数没有过程,我要计算机的做题过程,所以只好自己写一个
而且题目要求有用LU的有选主元的LU的,计算器自带的是选主元有置换矩阵的

imath 发表于 2011-12-31 12:42:35

把整个function放在try else之间,else和endtry中间弄个stop就好了
页: [1]
查看完整版本: 求改编一个判断矩阵顺序主子式是否为零的程序