当前位置: 代码迷 >> Oracle开发 >> n阶方阵行列式的计算有关问题
  详细解决方案

n阶方阵行列式的计算有关问题

热度:45   发布时间:2016-04-24 06:33:43.0
n阶方阵行列式的计算问题
create or replace function
 deal_det(two_array test_package.two_array_type)
return float
as
  two_array1 test_package.two_array_type;
  p number:=0;
  q number:=0;
  summ number:=0;
  cnt number;
  m number;
  n number;
begin
  cnt:=two_array.count;
  if cnt=1 then return two_array(1)(1);end if;
  for i in 1..cnt loop
    for c in 1..cnt-1 loop
      if c<i then p:=0;
      else p:=1;
      end if;
      for j in 1..cnt-1 loop
        m:=c+p;
        n:=j+1;
        two_array1(c)(j)=two_array(m)(n);
 --将n阶方阵two_array剔除第i行第1列转换为n-1阶方阵two_array1
      end loop;
    end loop;
    if mod(i,2)=1 then q:=1;
    else q:=-1;
    end if;
    summ:=summ+two_array(i)(1)*q*deal_det(two_array1);
  end loop;
  return summ;
end deal_det;
       
//上面这个函数是用来计算矩阵two_array的行列式的,计算方法是通过对原始矩阵two_array按

第一列进行拆分,不断递归条调用函数deal_det,最后算得two_array的行列式值。
two_array是我在包test_package中定义的数据类型,类似于二维数组,定义方式如下: 
  type one_array_type is table of number index by binary_integer;
  type two_array_type is table of one_array_type index by binary_integer;

现在这个函数运行2阶方阵时没问题,但3阶及以上通痛都是0,希望各位大神帮我看看问题出在哪?
拜谢!








------解决思路----------------------
感觉我的行列式已经全部还给老师了,汗
------解决思路----------------------
用递归的思想计算任意n阶方阵的行列式
http://peghoty.blog.163.com/blog/static/49346409200711791143393/

可以参考一下
  相关解决方案