回 帖 发 新 帖 刷新版面

主题:每次调用三对角矩阵之后系数矩阵的值会变么?

为什么每次调用三对角矩阵之后系数矩阵的值会改变?调用每次后都得将系数矩阵还原成原始值么?

回复列表 (共4个回复)

沙发


请结合代码提问!

板凳

我没有完全明白您的意思,姑且做如下提示:

比如,IMSL 中很多子程序,改变输入矩阵的值(为了节省内存);为此,我们可以再声明另外一个矩阵,传入子程序中。

3 楼


你是指这段代码么?对于不同问题,每次调用前修改数组a,b,c,f的值即可。
program main
implicit none
integer,parameter::n=3    !变量x的个数 
integer:: i,s
real(8):: a(2:n),b(n),c(n-1),f(n)
a=(/6,3/)
b=(/5,2,3/)
c=(/6,3/) 
f=(/4,5,3/)

call sdj(n,a,b,c,f)

contains 
!追赶法 
subroutine sdj(n,a,b,c,f)
implicit none
integer:: n,i
real(8):: a(2:n),b(n),c(n-1),d(n-1),e(n-1),f(n)
real(8):: x(n)
 
!追赶法的核心 
d(1)=f(1)/b(1)
e(1)=c(1)/b(1)
do i=2,n-1
 e(i)=c(i)/(b(i)-a(i)*e(i-1))
 d(i)=(f(i)-a(i)*d(i-1))/(b(i)-a(i)*e(i-1))
enddo
x(n)=(f(n)-a(n)*d(n-1))/(b(n)-a(n)*e(n-1))
do i=n-1,1,-1
 x(i)=d(i)-e(i)*x(i+1)
end do
 write(*,*) 'The roots is:'
 write(*,*) x
return
end subroutine

end program

4 楼

我那个朋友的程序弄错了~谢谢以上的各位了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册