谁可以帮忙用fortran语言编写一个程序?是求n元一次方程组的解!或者是求100!的精确解!谢谢

谁可以帮忙用fortran语言编写一个程序?是求n元一次方程组的解!或者是求100!的精确解!谢谢,第1张

求n元一次方程组的解现在已经有很好用的链接库可以用了,很多fortran编译器厂商现在都提供了IMSL(数学与统计链接库),IMSL是一套在数值方法上经常用到的商业链接库,visual fortran 专业版的编译器就内置IMSL。下面是一个求解三元一次方程组的例子(n元也一样)program linear

use imsl

implicit none real::a(3,3)=(/1,3,2,&

1,2,1,&

2,1,3/)

real::b(3,1)=(/4,6,6/)

real::x(3,1) call lin_so_gen(a,b,x)!用于求解a*x=b这样一个三元一次方程组

write(*,'(3f5.2)')xend program linear运行程序前确认你的编译器上已经装了IMSL(有的编译器有内置的)要想自己编程来求,最简单的可以用高斯消去法,还有很多求解这类问题的方法,可以参见“数值计算原理”这类书籍,自己编出来的可能没有用IMSL里面的数值计算过程函数的执行效率高,练习一下对熟悉一门计算机语言还是很有提高的。 对于你的第二个问题可以用一个递归程序做,也可以用循环做下面是一个用递归来演示任意整数阶乘的程序PROGRAM SHOWIMPLICIT NONEINTEGER::N,MINTEGER,EXTERNAL::FACTORIAL PRINT *,'输入要计算的阶乘的阶数'READ(*,*)NM=FACTORIAL(N)PRINT * ,N,'!=',M END !FACTORIAL函数用于计算N!RECURSIVE INTEGER FUNCTION FACTORIAL(N) RESULT(B)

IMPLICIT NONE !INTEGER,SAVE::MUL=0

INTEGER::N

!INTEGER::I,J IF(N<0)THEN

B=-1

RETURN

ELSE IF(N==0)THEN

B=1

RETURN

END IF

B=N*INITIALIZE(N-1)

!RETURN

END FUNCTION INITIALIZE

在一个程序中实现你的要求:

dimension no(100),score(100)

integer no,score

n=10

c 读数据

do 10 i=1,n

read(*,*) no(i),score(i)

10 continue

c 将数据输出到屏幕

do 12 i=1,n

write(*,*) no(i),score(i)

12 continue

write(*,*)

c 将数据写入文件cj.out

open(99,file='cj.out',status='unknown')

do 15 i=1,n

write(99,*) no(i),score(i)

15 continue

close(99)

c 读刚生成的cj.out文件

open(1,file='cj.out')

do 18 i=1,n

read(1,*) no(i),score(i)

18 continue

close(1)

m=0

do 19 i=1,n

if (score(i).lt.60) then

m=m+1

write(*,*) no(i),score(i)

endif

19 continue

write(*,*) '不及格人数=',m

write(*,*)

m=0

do 20 i=1,n

if (score(i).ge.60.and.score(i).lt.70) then

m=m+1

write(*,*) no(i),score(i)

endif

20 continue

write(*,*) '60~70之间人数=',m

write(*,*)

m=0

do 21 i=1,n

if (score(i).ge.70.and.score(i).lt.80) then

m=m+1

write(*,*) no(i),score(i)

endif

21 continue

write(*,*) '70~80之间人数=',m

write(*,*)

m=0

do 22 i=1,n

if (score(i).ge.80) then

m=m+1

write(*,*) no(i),score(i)

endif

22 continue

write(*,*) '80以上人数=',m

write(*,*)

pause

end

好吧,大概的程序如下:

program outcar

implicit none

real, dimension(:,:), allocatable :: coor, diff

character(len=128) :: line

integer :: num, ios, i

real :: frac

open(unit=12, file='OUTCARf', status='old')

open(unit=13, file='Result', status='new')

do

read(12,'(a)', iostat=ios) line

if (ios /= 0) exit

if (index(line, 'f/i') /= 0) then

read (12, '(a)') line

exit

end if

end do

num = 0

do

read (12, '(a)') line

! write(*,*) trim(line)

if (len_trim(line) == 0) exit

num = num + 1

end do

write (*,*) num

rewind 12

allocate(coor(num,3), diff(num,3))

write(*,*) 'please input the frac: '

read(*,*) frac

do

read(12,'(a)', iostat=ios) line

if (ios /= 0) exit

if (index(line, 'f/i') /= 0) then

read (12, '(a)') line

do i=1,num

read (12, *) coor(i,1:3), diff(i,1:3)

write(13,'(3F11.6)') coor(i,1:3) + diff(i,1:3) * frac

end do

write(13,*)

end if

end do

end program outcar


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11524496.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存