cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 11968|回复: 5

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

[复制链接]
发表于 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[1:i,1:i])   →这一块儿不太会处理了
    if w=0 then
        disp"矩阵的顺序主子式为零,无法作LU分解,程序中止"
    endif
endfor




matlab 完整程序
clear
a=[1/4 1/5 1/6; 1/3 1/4 1/5; 1/2 1 2];
b=[9;8;8]
[m,n]=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
这样是否就对了?
发表于 2011-12-29 20:36:40 | 显示全部楼层
直接把lu函数放在try里面
 楼主| 发表于 2011-12-29 22:09:59 | 显示全部楼层
直接把lu函数放在try里面
imath 发表于 2011-12-29 20:36

lu函数没有过程,我要计算机的做题过程,所以只好自己写一个
而且题目要求有用LU的有选主元的LU的,计算器自带的是选主元有置换矩阵的
发表于 2011-12-31 12:42:35 | 显示全部楼层
把整个function放在try else之间,else和endtry中间弄个stop就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-4-24 13:20 , Processed in 0.071925 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表