導航:首頁 > 源碼編譯 > 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常用數值演算法集相關的資料

熱點內容
小鹿情感app怎麼打不開了 瀏覽:325
可自編譯的C 瀏覽:62
vfl90壓縮機是哪個廠家 瀏覽:676
安卓系統游戲怎麼開發 瀏覽:410
抖助力app綁定的銀行卡怎麼辦 瀏覽:466
我的電腦文件夾打開方式 瀏覽:931
東莞加密u盤公司 瀏覽:137
graphvizlinux 瀏覽:438
智能手錶藍牙怎麼下載app 瀏覽:293
女程序員下班菜譜 瀏覽:260
加密貨幣買什麼比較靠譜 瀏覽:277
用圖片的地圖再編譯的地方 瀏覽:462
python監控系統進程 瀏覽:236
群暉怎麼取消照片共享文件夾 瀏覽:156
程序員那麼可愛第幾集陸璃懷孕 瀏覽:615
西門子st編程手冊 瀏覽:59
mt4編程書籍 瀏覽:21
單片機模擬實驗設置電壓 瀏覽:948
如何用電腦打開安卓手機內存 瀏覽:860
java數據訪問層 瀏覽:181