【发布时间】:2015-06-26 12:56:12
【问题描述】:
我必须编写一个程序,用 Cramer 方法求解线性方程组,并专门要求用拉普拉斯展开式找到行列式。
det A = sum on i=1...N:(-1)**(i+1) a_i1 det ||A||_i1
其中||A||_i1 是A 的辅因子矩阵,n-1 X n-1 矩阵是通过消除i 行和 1 列创建的。
这就是我卡住的地方。
这是我到目前为止写的内容
integer, parameter :: rk= selected_real_kind(6)
end module prec
module lap
use prec
implicit none
contains
recursive function det(a,n) result (d)
real(kind=rk), intent(in), dimension(n,n) :: a
real(kind=rk), dimension(n-1,n-1) :: b
real(kind=rk) :: d
integer ::i
integer, intent(in)::n
if (size(a) > 4) then
do i=1,n
b(1:(i-1),:) = a(1:(i-1),:)
b(i:n,:) = a((i+1):n,:)
b(:,:) = a(:,2:n)
d= ((-1)**(i+1))*a(i,1)*det(b,n)
end do
else
d = a(1,1)*a(2,2)-a(1,2)*a(2,1)
end if
end function det
end module lap
program sistema
它一直告诉我我有不符合要求的数组,即使我正在使用子集(我的教授说使用子集很容易获得 |A|)。
【问题讨论】:
-
编译器在哪里抱怨?我还会注意到,您的示例中似乎缺少一些内容。
-
到目前为止,您编写的似乎是名为
prec的模块的最后两行、名为lap的模块和名为sistema的程序的第一行。您需要更清楚您的代码是什么,并准确了解编译器发出的错误消息。以及在源代码的哪几行。