計算機語言運用--數值計算9-方程的計算機處理92-2_Fortran
數值計算
方程的計算機處理
這裡說的方程,是以實數域為計算範圍。
這裡說的方程:是含有未知數的等式。
可以是a+5=8,或X+A=B,或ax2+bx+c=0,或ax+by=c與dx-ey=f,或ax"+bx=c,或
,或
……、……
計算機如何處理這些問題呢?,問題的描述是什麼樣子的,才能充分利用計算機呢?
當然是代數形式的。便於計算機發揮特長,便於程序軟體的重用性。通過用戶交互,決定將什麼樣的具體問題交給計算機進行數值處理。
方程的計算機處理:
MATLAB語言及其平臺、
Fortran 語言及其平臺
先來看一下最簡單的,再逐級複雜,以便體會程序編寫、方程的手工預處理及其人機互動。
按照自然習慣,應該該是……是這樣
按照計算機習慣,在Fortran中是這樣(換一個想法—符合計算機的處理模式)
對於問題方程a+5=8,在計算機中運行,需要改造為:
a=8-5
X+a=b型的方程也需要進行改造:
成為----X=b-a的樣式;
計算機是進行數值計算的好幫手,因此需要對a,b預先賦值,再進行計算;
那麼對於一元二次方程呢?也是如此。當然,最好是用求解方程的兩個根的公式來進行處理—也就是,用它們作為計算機語言描述的基礎。當然,需要計算機語言描述判別開平方中的虛數—複數根的問題。這樣,便有了方程處理的前期工作,手工處理。
有數學家推導的求根公式可以直接利用
由於負數的開平方問題,需要判斷b2-4ac=(>0兩個不相等的實根;=0兩個相等的實根;<0兩個不相等的共軛複數根;三種情況)
接下來是說:Fortran是編譯型語言,因此需要將所做工作用計算機語言編製程序,再交給計算機來處理。作為靜態數據的模式,與MATLAB不同,需要對計算的數據—數值或代數預先聲明變量,以便申請到內存來放置。
可以用Fortran語言編寫為文件形式,接著編譯成*.exe文件,再運行—人機互動。
程序文件
!一元二次方程--quadratic equation
program QuadraticEquation
implicit none
! Variables
integer j,N
REAL a,b,c
REAL q1,x1,x2,x11,x12
character name_out*10
! Body of QuadraticEquation
!input data
PRINT*,"請輸入想要計算方程的個數,N"
READ*,N
DO j=1,N,1
PRINT*,"請輸入一元二次方程的係數,用空格分開"
READ*,a,b,c
!data processing
q1=b*b-4*a*c
IF(q1>0)THEN
x1=(-b+sqrt(q1))/(2*a);
x2=(-b-sqrt(q1))/(2*a);
PRINT*,"蜘蛛網計算機語言的計算結果為,兩個不相等的實根:"
PRINT*,'x1=',x1
PRINT*,'x2=',x2
PRINT*,"蜘蛛網計算機語言--計算完畢"
ELSE
if(q1==0) then
x1=(-b)/(2*a);
x2=(-b)/(2*a);
PRINT*,"蜘蛛網計算機語言的計算結果為,兩個相等的實根:"
PRINT*,'x1=x2=',x1
PRINT*,'x2=x1=',x2
PRINT*,"蜘蛛網計算機語言--計算完畢"
else
PRINT*,"方程有一對共軛複數根"
x11=sqrt(-q1)/(2*a);
x12=-sqrt(-q1)/(2*a);
PRINT*,'x1=',-b/(2*a),'+i',x11
PRINT*,'x2=',-b/(2*a),'+i',x12
PRINT*,"蜘蛛網計算機語言--計算完畢,請核對!"
end if
ENDIF
!save result
if(q1>=0) then
PRINT*,"輸入保存的文件名:*.txt"
read *, name_out
OPEN(2,FILE=name_out)
WRITE(2,*) "鍵盤讀入數據 :"
WRITE(2,30) a,b,c
WRITE(2,*) "方程求解結果,兩個實根 :"
WRITE(2,60) x1,x2
30 FORMAT(<3>F6.2)
60 FORMAT(<2>F6.2)
CLOSE(2)
else
PRINT*,"輸入保存的文件名:*.txt"
read *, name_out
OPEN(2,FILE=name_out)
WRITE(2,*) "鍵盤讀入數據 :"
WRITE(2,10) a,b,c
WRITE(2,*) "方程求解結果,一對共軛複數根 :"
WRITE(2,*) 'x1=',-b/(2*a),'+i',x11
WRITE(2,*) 'x2=',-b/(2*a),'+i',x12
10 FORMAT(<3>F6.2)
end if
CLOSE(2)
PRINT*,"蜘蛛網計算機語言提請注意:"
PRINT*,"需要計算請重新運行程序。"
ENDDO
end program QuadraticEquation
求解過程
請輸入想要計算方程的個數,N
3
請輸入一元二次方程的係數,用空格分開
2 4 8
方程有一對共軛複數根
x1= -1.000000 +i 1.732051
x2= -1.000000 +i -1.732051
蜘蛛網計算機語言--計算完畢,請核對!
輸入保存的文件名:*.txt
1.txt
蜘蛛網計算機語言提請注意:
需要計算請重新運行程序。
請輸入一元二次方程的係數,用空格分開
3 12 5
蜘蛛網計算機語言的計算結果為,兩個不相等的實根:
x1= -0.4724748
x2= -3.527525
蜘蛛網計算機語言--計算完畢
輸入保存的文件名:*.txt
2.txt
蜘蛛網計算機語言提請注意:
需要計算請重新運行程序。
請輸入一元二次方程的係數,用空格分開
1 -2 1
蜘蛛網計算機語言的計算結果為,兩個相等的實根:
x1=x2= 1.000000
x2=x1= 1.000000
蜘蛛網計算機語言--計算完畢
輸入保存的文件名:*.txt
3.txt
蜘蛛網計算機語言提請注意:
需要計算請重新運行程序。
Press any key to continue
求解結果
咱不是要說明實際數學問題怎麼變成計算機處理嗎!就是數學方程的預先處理問題、計算機語言描述問題嘛。
在C、C++、C#、Fortran等語言中,你能看到複數的處理問題與描述。