导航:首页 > 源码编译 > fortran常用数值算法集

fortran常用数值算法集

发布时间:2023-02-04 18:05:49

⑴ fortran中阶乘算法

因为,integer类型默认为四字节整数,最大值为2^31-1=2147483647。而13的阶乘为6227020800,已经超出integer上限。
可以改用real*8双精度类型,这样n=33就不会溢出了。双精度类型的上限是10的308次方,最大可以计算到n=170,即170的阶乘。

⑵ Fortran数组运算

1.实际不会超过50次。你为什么认为超过了50次?

2.你的数组搞错了。REAL,DIMENSION(m,n)::dat 说明 dat(m,n) 形状。

READ(2,*)((dat(a,b),a=1,n),b=1,m)
这里的要求貌似是 dat(n,m) 因为 a 从 1,n。而b从1,m
你再确定一下,自己是什么需求,dat 的两个维度,再琢磨琢磨,应该是 m,n 还是 n,m
我没有你的数据文件,没法给你测试。欢迎追问。

另外,根据你的算法来看,dat((i+1),3)-dat(i,3) 这样的话,你没法从 1 循环到 50。因为当 i = 50 时,i+1 = 51。是否只能循环到 49 呢?也就是说 REAL,DIMENSION(49)::dy

最后,循环变量 i,尽量定义为 integer,不要定义为 real,况且它还是数组的下标。
一般很少说 某个数组的第 1.0 个元素吧?

⑶ fortran语言矩阵求逆

! aa为原矩阵,b为存放aa的逆矩阵,n为矩阵aa的维数
subroutine nizhen(aa,b,n)
integer n,i,j,k
real:: aa(n,n),b(n,n),a(n,n)
a=aa
do i=1,n
b(i,i)=1
enddo
do i=1,n
b(i,:)=b(i,:)/a(i,i)
a(i,i:n)=a(i,i:n)/a(i,i)
do j=i+1,n
do k=1,n
b(j,k)=b(j,k)-b(i,k)*a(j,i)
enddo
a(j,i:n)=a(j,i:n)-a(i,i:n)*a(j,i)
enddo
enddo
do i=n,1,-1
do j=i-1,1,-1
do k=1,n
b(j,k)=b(j,k)-b(i,k)*a(j,i)
enddo
enddo
enddo
end

⑷ 哪一种语言适合工程计算、科学计算编程

FORTRAN 是最好的科学计算语言。专门为科学计算设计的。Fortran 90 内置的操作数组的命令可以让你简单直接的完成别的语言需要多次循环判断的任务。
Fortran + IMSL数学库+ Unix服务器,效率最高,计算速度最快。
你说了经常涉及科学计算、工程计算、数理统计、线形代数、高等数学等,那Fortran就是最合适你的了,买一本 清华算法程序 或者Visual Fortran常用数值算集,估计你需要的都已经包括了。这2本书西单都有的卖。

世界上现在最好的计算机上面运行的是什么程序?是倭人的 地球实验室程序吧,Fortran写的。

Visual BASIC/Visual C 那叫语言吗,纯粹在学一个软件。
C++设计系统的程序不错,要数学计算就不如Fortran了。我大学的bbs有好事者,专门测试了Fortran,C/C++,C#的计算的速度,无一例外的是Fortran最快,效率最高,代码最短。
SQL 我感觉和科学计算真的粘不上边。
VFP 已经死了,而且本来也不合适计算。
至于有些人说的matlab,一个公司的产品,而且很混乱。我实在看不出来7.0不能编译(事实是解释)6.5的一个软件有什么值得学习的。
我会经常去的Fortran吧,有问题继续讨论。

⑸ fortran如何计算大量数据的平均值

由于对于这个问题的数据来源你没有给清是自己手动输入还是直接通过读取文本数据,所以,我们在写程序的时候有两种程序思路:
最常用的是通过直接读取文本的数据,要用到open语句。
程序如下:
Program main4
integer n
real *8 sum,p
real *8 NUM(1000)
INTEGER C
PARAMETER ( C = 10 )
C *******************************************************************

OPEN ( UNIT = C, FILE = 'file.txt',
$ STATUS = 'OLD', FORM = 'UNFORMATTED' )
READ ( C ) NUM
p=sum(NUM)/size(NUM)
CLOSE ( UNIT = C )

write(*,*) '得到的总数',sum(NUM)
write(*,*) '求得的平均值',p
end
而对于直接输入再求平均的相对比较简单,程序如下:
Program main4
integer n
real *8 sum,p
read(*,*) u(1:1000)

sum=0.d0
p=0.d0
DO 10,i=1,1000
sum=sum+u(i)
10 continue
p=real(sum/1000)

write(*,*) '得到的总数',sum
write(*,*) '求得的平均值',p
end
希望对你有点帮助!

⑹ 求fortran实现FFT(快速傅里叶变换)程序。

徐士良的《fortran常用算法程序集》中有fft代码,直接可以用的那种

⑺ FORTRAN完全自学手册的第四篇应用篇

第14章基本数值算法举例
14.1常用数值积分算法373
14.1.1矩形法374
14.1.2梯形法374
14.1.3Simpson法376
14.1.4数值积分计算子程序的应用378
14.2简单线性代数问题380
14.2.1Gauss消去法求解线性方程组380
14.2.2GaussJordan消去法求解线性方程组384
14.3非线性函数求解387
14.3.1迭代法387
14.3.2牛顿迭代法388
14.3.3二分法390
14.3.4弦截法392
14.3.5非线性函数求解子程序的应用394
14.4常微分方程的基本解法400
14.5插值与拟合406
14.5.1拉格朗日多项式插值法407
14.5.2牛顿前向插值法409 15.1临时文件的应用414
15.1.1主程序414
15.1.2随机数生成子程序415
15.1.3素数挑选和文件重写子程序415
15.1.4素数判断子程序416
15.2多个文件的处理417 16.1搜索算法420
16.1.1顺序搜索420
16.1.2二分搜索423
16.1.3散列搜索426
16.2排序算法429
16.2.1冒泡法429
16.2.2选择排序法433
16.2.3快速排序法436
……

⑻ 谁又Fortran常用函数列表

ABS, AIMAG, AINT, AMAX0, AMIN0, ANINT, CEILING, CMPLX, CONJG, DBLE, DCMPLX, DFLOAT, DIM, DPROD, DREAL, FLOAT, FLOOR, IFIX, IMAG, INT, MAX, MAX1, MIN, MIN1, MOD, MODULO, NINT, QCMPLX, QEXT, QFLOAT, QREAL, RAN, REAL, SIGN, SNGL, ZEXT

EXPONENT, FRACTION, NEAREST, RRSPACING, SCALE, SET_EXPONENT, SPACING

DIGITS, EPSILON, HUGE, ILEN, MAXEXPONENT, MINEXPONENT, PRECISION, RADIX, RANGE, SIZEOF, TINY

DOT_PRODUCT, MATMUL

PROCESSORS_SHAPE, NWORKERS, NUMBER_OF_PROCESSORS, SECNDS

KIND, SELECTED_INT_KIND, SELECTED_REAL_KIND

ACOS, ACOSD, ASIN, ASIND, ATAN, ATAND, ATAN2, ATAN2D, COS, COSD, COSH, COTAN, COTAND, EXP, LOG, LOG10, SIN, SIND, SINH, SQRT, TAN, TAND, TANH
AND, BTEST, IAND, IBCHNG, IBCLR, IBITS, IBSET, IEOR, IOR, ISHA, ISHC, ISHFT, ISHFTC, ISHL, LSHIFT, NOT, OR, RSHIFT, XOR
BIT_SIZE
LEADZ, POPCNT, POPPAR, TRAILZ
LGE, LGT, LLE, LLT
ACHAR, CHAR, IACHAR, ICHAR
ADJUSTL, ADJUSTR, INDEX, LEN_TRIM, REPEAT, SCAN, TRIM, VERIFY
LEN
MERGE, PACK, SPREAD, UNPACK
ALLOCATED, LBOUND, SHAPE, SIZE, UBOUND
MAXLOC, MINLOC
CSHIFT, EOSHIFT, RESHAPE, TRANSPOSE
ALL, ANY, COUNT, MAXVAL, MINVAL, PRODUCT

常用数学函数使用方法

Y=INT(X) 转换为整数 ALL(所有型态) INTEGER
Y=REAL(X) 转换为实数 INTEGER REAL
Y=DREAL(X) 取复数实部(倍精度) COMPLEX*16 REAL*8
Y=DIMAG(X) 取复数虚部(倍精度) COMPLEX*16 REAL*8
Y=CONJG(X) 共轭复数 COMPLEX COMPLEX
Y=DCONJG(X) 共轭倍精度复数 COMPLEX*16 COMPLEX*16
Y=DBLE(X) 转换为倍精度实数 ALL REAL*8
Y=CMPLX(X1,X2) 转换为复数 ALL,ALL COMPLEX
Y=DCMPLX(X1,X2) 转换为倍精度复数 ALL,ALL COMPLEX*16
Y=IABS(X) 整数绝对值 INTEGER INTEGER
Y=DABS(X) 倍精度实数绝对值 REAL*8 REAL*8
Y=CDABS(X) 倍精度复数绝对值 COMPLEX*16 REAL*8
Y=MOD(X1,X2) 整数X1/X2之余数 INTEGER,INTEGER INTEGER
Y=DMOD(X1,X2) 倍精度实数X1/X2之余数 REAL*8,REAL*8 REAL*8
Y=ISIGN(X1,X2) 取X1之值与X2之正负号 INTEGER,INTEGER INTEGER
Y=SIGN(X1,X2) 取X1之值与X2之正负号 REAL,REAL REAL
Y=DSIGN(X,Y) 取X1之值与X2之正负号 REAL*8,REAL*8 REAL*8
Y=DSQRT(X) X的倍精度平方根 REAL*8 REAL*8
Y=CDSQRT(X) X的倍精度复数平方根 COMPLEX*16 COMPLEX*16
Y=DEXP(X) X的倍精度指数 REAL*8 REAL*8
Y=CDEXP(X) X的倍精度复数指数 COMPLEX*16 COMPLEX*16
Y=DLOG(X) X的倍精度自然对数 REAL*8 REAL*8
Y=CDLOG(X) X的倍精度复数自然对数 COMPLEX*16 COMPLEX*167
Y=DLOG10(X) X的倍精度常用对数 REAL*8 REAL*8
Y=DSIN(X) X的倍精度正弦函数 REAL*8 REAL*8
Y=DCOS(X) X的倍精度余弦函数 REAL*8 REAL*8
Y=DTAN(X) X的倍精度正切函数 REAL*8 REAL*8
Y=DASIN(X) X的倍精度正弦反函数 REAL*8 REAL*8
Y=DACOS(X) X的倍精度余弦反函数 REAL*8 REAL*8
Y=DATAN(X) X的倍精度正切反函数 REAL*8 REAL*8
Y=DSINH(X) X的倍精度双曲正弦函数 REAL*8 REAL*8
Y=DCOSH(X) X的倍精度双曲余弦函数 REAL*8 REAL*8
Y=DTANH(X) X的倍精度双曲正切函数 REAL*8 REAL*8

⑼ 用fortran软件编制程序,计算矩阵的行列式。要求使用子程序进行模块化编程

求矩阵行列式是一个复杂的过程。有很多很多算法来做,但是各有适用性。有的不适合病态矩阵等等。

以下是一个简单的全选主元高斯消去法。

摘自徐世良的《Fortran常用算法集》

Program Main
Implicit None
Real(8) :: rm(3,3) = reshape( (/1,2,4,5,7,3,13,5,7/) , (/3,3/) )
Real(8) :: rDet
call BSDet( rm , 3 , rDet )
write(*,*) rDet
End Program Main

SUBROUTINE BSDET(A,N,DET)
DIMENSION A(N,N)
DOUBLE PRECISION A,DET,F,D,Q
F=1.0
DET=1.0
DO 100 K=1,N-1
Q=0.0
DO 10 I=K,N
DO 10 J=K,N
IF (ABS(A(I,J)).GT.Q) THEN
Q=ABS(A(I,J))
IS=I
JS=J
END IF
10 CONTINUE
IF (Q+1.0.EQ.1.0) THEN
DET=0.0
RETURN
END IF
IF (IS.NE.K) THEN
F=-F
DO 20 J=K,N
D=A(K,J)
A(K,J)=A(IS,J)
A(IS,J)=D
20 CONTINUE
END IF
IF (JS.NE.K) THEN
F=-F
DO 30 I=K,N
D=A(I,JS)
A(I,JS)=A(I,K)
A(I,K)=D
30 CONTINUE
END IF
DET=DET*A(K,K)
DO 50 I=K+1,N
D=A(I,K)/A(K,K)
DO 40 J=K+1,N
40 A(I,J)=A(I,J)-D*A(K,J)
50 CONTINUE
100 CONTINUE
DET=F*DET*A(N,N)
RETURN
END

⑽ Fortran矩阵求逆(复矩阵、实矩阵)

ZuoZhihua
哈尔滨工程大学 船舶工程学院
2020/8/13 星期四 午 永新 ThinkPad E485 Elementary os 5.0
QQ:1325686572

[1] 徐士良,Fortran常用算法集。
[2] 白海波,Fortran程序设计权威指南。
[3] zuohua, Fortran复数矩阵相乘 。

阅读全文

与fortran常用数值算法集相关的资料

热点内容
程序员创业接到小程序订单 浏览:391
java复用反编译代码 浏览:551
qq聊天发送的文件在哪个文件夹 浏览:819
代理服务器地址格式是什么意思 浏览:443
苏e行app为什么会有登录过期 浏览:800
杰森坐牢 下象棋是什么电影 浏览:408
苹果相机也么加密 浏览:891
java图片打印 浏览:173
恶魔小丑电影 浏览:548
apriori算法软件 浏览:24
波利亚怎样解题pdf 浏览:570
法国电影耽美 浏览:642
java调用迅雷 浏览:423
开发云服务器cvm需要做些什么 浏览:259
程序员长期变胖 浏览:629
平板怎么创建图标文件夹 浏览:220
alphafrance制作的影片 浏览:281
小电影网站有那些 浏览:191
护工韩国伦理电影 浏览:899
母乳人妻伦理片 浏览:844