主题:每次调用三对角矩阵之后系数矩阵的值会变么?
LELEMA
[专家分:0] 发布于 2010-10-12 09:47:00
为什么每次调用三对角矩阵之后系数矩阵的值会改变?调用每次后都得将系数矩阵还原成原始值么?
回复列表 (共4个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-10-12 10:21:00
请结合代码提问!
板凳
asymptotic [专家分:16630] 发布于 2010-10-12 11:01:00
我没有完全明白您的意思,姑且做如下提示:
比如,IMSL 中很多子程序,改变输入矩阵的值(为了节省内存);为此,我们可以再声明另外一个矩阵,传入子程序中。
3 楼
jstzhurj [专家分:4680] 发布于 2010-10-12 11:34:00
你是指这段代码么?对于不同问题,每次调用前修改数组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 楼
LELEMA [专家分:0] 发布于 2010-10-20 14:36:00
我那个朋友的程序弄错了~谢谢以上的各位了!
我来回复