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

2024-12-04 11:21:44
推荐回答(1个)
回答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