谁可以帮忙用fortran语言编写一个程序?是求n元一次方程组的解!或者是求100!的精确解!谢谢
- 提问者网友:趣果有间
- 2021-07-24 22:49
- 五星知识达人网友:千杯敬自由
- 2021-07-24 23:27
求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)')x
end program linear
运行程序前确认你的编译器上已经装了IMSL(有的编译器有内置的)
要想自己编程来求,最简单的可以用高斯消去法,还有很多求解这类问题的方法,可以参见“数值计算原理”这类书籍,自己编出来的可能没有用IMSL里面的数值计算过程函数的执行效率高,练习一下对熟悉一门计算机语言还是很有提高的。
对于你的第二个问题可以用一个递归程序做,也可以用循环做
下面是一个用递归来演示任意整数阶乘的程序
PROGRAM SHOW
IMPLICIT NONE
INTEGER::N,M
INTEGER,EXTERNAL::FACTORIAL
PRINT *,'输入要计算的阶乘的阶数'
READ(*,*)N
M=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