alexa-tracking

Ada yang tahu program untuk menyederhanakan persamaan diferensial gak?

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/53a8368414088d5d6d8b4582/ada-yang-tahu-program-untuk-menyederhanakan-persamaan-diferensial-gak
Ada yang tahu program untuk menyederhanakan persamaan diferensial gak?
Agan agan ada yang tahu gak program untuk menyederhanakan persamaan diferensial ?
Ane kuliah di sipil ada matakuliah persamaan diferansial yang soalnya gak nyampe sebaris tapi jawabannya panjangnya minta ampun.
Cuma buat ngecek hasil kerjaan aja.
Trus ada gak yang programnya tu bisa ngejabarin soalnya dulu baru nemu jawaban?
Quote:


penyelesaian persamaan diferensial secara analitik pasti sudah pernah dibahas di perkuliahan. Kalo penyelesaian secara numerik, biasanya ane menggunakan metoda Runge-Kutta. Berikut ini ane berikan program sumber yang ane susun dengan bahasa fortran powerstation,

Code:

PROGRAM RUNGE_KUTTA
!UNTUK ORDER 1 ATAU 2 SAJA

CHARACTER*2 PILIHAN,PIL
OPEN (9,FILE='RUNGE.TXT',STATUS='UNKNOWN')
WRITE(*,*)'1 = PERSAMAAN DIFERENSIAL ORDER 1'
WRITE(*,*)'2 = PERSAMAAN DIFERENSIAL ORDER 2'
DO WHILE(PILIHAN.NE.'1'.OR.PILIHAN.NE.'2')
WRITE(*,'(1X,BN,A,\)')'PILIHAN ANDA ? '
READ(*,*)PILIHAN
TORO:SELECT CASE (PILIHAN)
CASE('1')
WRITE(*,*)
DO WHILE(PIL.NE.'1'.OR.PIL.NE.'2')
WRITE(*,*)'1 = KASUS INITIAL CONDITION'
WRITE(*,*)'2 = KASUS BOUNDARY CONDITION'
WRITE(*,'(1X,BN,A,\)')'MANA YANG ANDA PILIH ? '
READ(*,*)PIL
WRITE(*,*)
YUGI:SELECT CASE (PIL)
CASE('1')
CALL ORDER1
EXIT
CASE('2')
CALL BVPOR1
EXIT
CASE DEFAULT
WRITE(*,*)
WRITE(*,*)'PILIH ANTARA 1 ATAU 2'
END SELECT YUGI
END DO
EXIT
CASE('2')
WRITE(*,*)
DO WHILE(PIL.NE.'1'.OR.PIL.NE.'2')
WRITE(*,*)'1 = KASUS INITIAL CONDITION'
WRITE(*,*)'2 = KASUS BOUNDARY CONDITION'
WRITE(*,'(1X,BN,A,\)')'PILIHAN ANDA ? '
READ(*,*)PIL
TASIK:SELECT CASE (PIL)
CASE('1')
CALL ORDER2
EXIT
CASE('2')
CALL BVPOR2
EXIT
CASE DEFAULT
WRITE(*,*)
WRITE(*,*)'PILIH ANTARA 1 ATAU 2'
END SELECT TASIK
END DO
EXIT
CASE DEFAULT
WRITE(*,*)
WRITE(*,*)'PILIH ANTARA 1 ATAU 2'

END SELECT TORO
END DO
STOP 'EKSEKUSI TELAH SELESAI......FILE OUTPUT DI....RUNGE.TXT'
ENDFILE(9)
END PROGRAM RUNGE_KUTTA

!########################################################################3
SUBROUTINE ORDER1
IMPLICIT REAL*8 (A-H,O-Z)
DOUBLE PRECISION K0,K1,K2,K3

!KONDISI BATAS ADALAH :
CALL INPUT_RUNGE_KUTTA_ORDER1(X,Y,JUMLAH)
H=0.01D0
N=0

!PROSES PERHITUNGAN DAN PENULISAN HASIL
DO I=1,JUMLAH+1
WRITE(9,'(I3,E12.4,E12.4,E12.4)')I,X,Y,FUNGSI(X,Y)
K0=H*FUNGSI(X,Y)
K1=H*FUNGSI(X+H/2.,Y+K0/2.)
K2=H*FUNGSI(X+H/2.,Y+K1/2.)
K3=H*FUNGSI(X+H,Y+K2)
Y=Y+(K0+2.*K1+2.*K2+K3)/6.D0
X=X+H
N=N+1
END DO
WRITE(*,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'AKHIR DARI FILE RUNGE.TXT............'
WRITE(*,'(1X,A)')'DIEKSEKUSI PADA ORDER 1 UNTUK KASUS INITIAL CONDITIONS'
RETURN
END SUBROUTINE
!--------------------------------------------------------------------------------
SUBROUTINE BVPOR1
DOUBLE PRECISION A,B,X0,Y0,XNA,YNA,Y(1000),K(1000,1000),R(1000),ABSIS(1000),DELTAX
CALL INPUT_BVP(NA,X0,Y0,XNA,YNA)
CALL SEGMEN(NA,X0,XNA,DELTAX,ABSIS)

!MERAKIT MATRIK KEKAKUAN
DO I=1,NA-1
K(I,I)=2.D0*A(ABSIS(I))*DELTAX
K(I,I+1)=1.D0 ! KELEBIHAN SATU TEMPAT DARI MATRIK K(I,J) ....
IF (I.EQ.1) CYCLE
K(I,I-1)=-1.D0
END DO

!MERAKIT MATRIK R(J)
DO J=1,NA-1
R(J)=2.D0*B(ABSIS(J))*DELTAX
IF (J.EQ.1) R(J)=R(J)+Y0
IF (J.EQ.NA-1) R(J)=R(J)-YNA
END DO

!LAKUKAN ELEMINASI GAUSS UNTUK MENCARI NILAI Y(I)
CALL GAUSSBVP(NA,K,R,Y)

! MENULISKAN HASIL
WRITE(9,'(3X,A,E9.3,E12.3)')'0',X0,Y0
DO I=1,NA-1
WRITE(9,'(I4,E9.3,E11.3)')I,ABSIS(I),Y(I)
END DO
WRITE(9,'(I4,E9.3,E11.3)')NA,XNA,YNA
WRITE(9,*)
WRITE(9,*)'AKHIR DARI FILE UNTUK ORDER 1..........RUNGE.TXT'
WRITE(*,'(1X,A)')'DIEKSEKUSI PADA BOUNDARY VALUE PROBLEM ORDER 1'
RETURN
END
!--------------------------------------------------------------------------------
SUBROUTINE ORDER2
IMPLICIT REAL*8 (A-H,O-Z,K,M)
WRITE(*,*)
!MASUKKAN KONDISI BATAS
CALL INPUT_RUNGE_KUTTA_ORDER2(X,Y,V,JUMLAH)
H=0.01D0
N=0
DO I=1,JUMLAH+1
WRITE(9,'(I3,E12.4,E12.4,E12.4,E12.4)')I,X,Y,V,FUNGSI3(X,Y,V)
K0=H*FUNGSI2(X,Y,V) ! INGAT V=Y'
M0=H*FUNGSI3(X,Y,V)
K1=H*FUNGSI2(X+H/2.,Y+K0/2.,V+M0/2.) ! INGAT V=Y'
MI=H*FUNGSI3(X+H/2.,Y+K0/2.,V+M0/2.)
K2=H*FUNGSI2(X+H/2.,Y+K1/2.,V+M1/2.) ! INGAT V=Y'
M2=H*FUNGSI3(X+H/2.,Y+K1/2.,V+M1/2.)
K3=H*FUNGSI2(X+H,Y+K2,V+M2)
M3=H*FUNGSI3(X+H,Y+K2,V+M2)
Y=Y+SUKU(K0,K1,K2,K3)
V=V+SUKU(M0,M1,M2,M3)
X=X+H
N=N+1
END DO
WRITE(*,*)
WRITE(*,'(1X,A)')'DIEKSEKUSI PADA ORDER 2 UNTUK KASUS INITIAL CONDITIONS'
WRITE(9,*)
WRITE(9,'(1X,A)')'AKHIR DARI FILE RUNGE.TXT............'
RETURN
END SUBROUTINE
!--------------------------------------------------------------------------------
SUBROUTINE BVPOR2
REAL*8 A,B,C,Y(1000),ABSIS(1000),K(1000,1000),R(1000),X0,Y0,XNA,YNA,DELTAX
WRITE(*,*)
CALL INPUT_BVP(NA,X0,Y0,XNA,YNA)
CALL SEGMEN(NA,X0,XNA,DELTAX,ABSIS)

!MERAKIT MATRIK KEKAKUAN
DO I=1,NA-1
K(I,I)=-4.D0+2.D0*B(ABSIS(I))*DELTAX*DELTAX
K(I,I+1)=2.D0+A(ABSIS(I))*DELTAX ! KELEBIHAN SATU TEMPAT DARI MATRIK K(I,J) ....
IF (I.EQ.1) CYCLE
K(I,I-1)=2.D0-A(ABSIS(I))*DELTAX
END DO

!MERAKIT MATRIK R(J)
DO J=1,NA-1
R(J)=2.D0*C(ABSIS(I))*DELTAX*DELTAX
IF (J.EQ.1) R(J)=R(J)+(A(ABSIS(0))*DELTAX-2.D0)*Y0
IF (J.EQ.NA-1) R(J)=R(J)-(2.D0+A(ABSIS(I))*DELTAX)*YNA
END DO

!LAKUKAN ELEMINASI GAUSS UNTUK MENCARI NILAI Y(I)
CALL GAUSSBVP(NA,K,R,Y)

! MENULISKAN HASIL
WRITE(9,'(3X,A,E9.3,E12.3)')'0',X0,Y0
DO I=1,NA-1
WRITE(9,'(I4,E9.3,E11.3)')I,ABSIS(I),Y(I)
END DO
WRITE(9,'(I4,E9.3,E11.3)')NA,XNA,YNA
WRITE(9,*)
WRITE(9,*)'AKHIR DARI FILE UNTUK ORDER 2..........RUNGE.TXT'
WRITE(*,'(1X,A)')'DIEKSEKUSI PADA BOUNDARY VALUE PROBLEM ORDER 2'
RETURN
END
!--------------------------------------------------------------------------------
SUBROUTINE INPUT_BVP(NA,X0,Y0,XNA,YNA)
IMPLICIT REAL*8 (X,Y)
WRITE(9,'(1X,A)')'DATA INPUT DARI PERSAMAAN DIFERENSIAL BIASA'
WRITE(9,'(1X,A)')'==========================================='
WRITE(9,*)
WRITE(9,*)
WRITE (*,'(1X,A,\)')'BERAPA SEGMEN PEMBAGIAN X ? '
READ(*,'(BN,I3)')NA
WRITE (*,'(1X,A,\)')'X AWAL ? '
READ(*,'(BN,F9.4)')X0
WRITE (*,'(1X,A,\)')'Y AWAL ? '
READ(*,'(BN,F9.4)')Y0
WRITE (*,'(1X,A,\)')'X AKHIR ? '
READ(*,'(BN,F9.4)')XNA
WRITE (*,'(1X,A,\)')'Y AKHIR ? '
READ(*,'(BN,F9.4)')YNA

WRITE (9,'(1X,A,I3)')'SEGMEN X : ',NA
WRITE (9,'(1X,A,F9.3)')'X AWAL : ',X0
WRITE (9,'(1X,A,F9.3)')'Y AWAL : ',Y0
WRITE (9,'(1X,A,F9.3)')'X AKHIR : ',XNA
WRITE (9,'(1X,A,F9.3)')'Y AKHIR : ',YNA
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'DATA OUTPUT DARI PERSAMAAN DIFERENSIAL BIASA PADA KASUS BVP'
WRITE(9,'(1X,A)')'==========================================================='
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(2X,A,4X,A,7X,A)')' I','X(I)','Y(I)'
WRITE(9,*)'------------------------'
RETURN
END
!--------------------------------------------------------------------------------
SUBROUTINE INPUT_RUNGE_KUTTA_ORDER1(X,Y,JUMLAH)
IMPLICIT REAL*8 (A-H,O-Z)
WRITE(9,'(1X,A)')'PERSAMAAN DIFERENSIAL BIASA DENGAN METODA RUNGE-KUTTA'
WRITE(9,'(1X,A)')'UNTUK ORDER 1'
WRITE(9,'(1X,A)')'====================================================='
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'DATA INPUT'
WRITE(9,'(1X,A)')'##########'
WRITE(*,*)
WRITE (*,'(1X,A,\)')'X AWAL ? '
READ(*,'(BN,F9.4)')X
WRITE (*,'(1X,A,\)')'Y AWAL ? '
READ(*,'(BN,F9.4)')Y
WRITE (*,'(1X,A,\)')'BANYAKNYA NILAI YANG DIAMATI ? '
READ(*,'(BN,I3)')JUMLAH
WRITE(9,*)
WRITE (9,'(1X,A,F9.4)')'X AWAL = ',X
WRITE (9,'(1X,A,F9.4)')'Y AWAL = ',Y
WRITE (9,'(1X,A,I3)')'BANYAKNYA NILAI YANG DIAMATI ',JUMLAH
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'DATA OUTPUT'
WRITE(9,'(1X,A)')'###########'
WRITE(9,*)
WRITE(9,'(2X,A,6X,A,8X,A,8X,A)')'I','X(I)','Y(I)','Y''(I)'
WRITE(9,'(1X,A)')'-------------------------------------'
RETURN
END
!-------------------------------------------------------------------------------- INTEGER
SUBROUTINE SEGMEN(NA,XA,XB,DELTAX,ABSIS)
REAL*8 ABSIS(1000),XA,XB,DELTAX,PANJANG
PANJANG=ABS(XA-XB)
DELTAX=PANJANG/DFLOAT(NA)

DUM_X=0.D0
DO I=1,NA-1
ABSIS(I)=XA+DUM_X
DUM_X=DUM_X+DELTAX
END DO
RETURN
END
!--------------------------------------------------------------------------------
SUBROUTINE GAUSSBVP(NA,K,R,U)
INTEGER BARIS
REAL*8 K(1000,1000),R(1000),U(1000)
!REAL*8 K((NA-1)*(NH-1),(NA-1)*(NH-1)+1),R((NA-1)*(NH-1)),U((NA+1)*(NH+1))

BARIS=(NA-1) !BARIS DARI MATRIKS AUGMENTED
KOLOM=BARIS+1

!MEMASUKKAN NILAI MATRIK R KE DALAM MATRIK K YANG DIPERLUAS
DO I=1,NA-1
K(I,KOLOM)=R(I)
END DO

I_BARU=2
J_BARU=2
DO WHILE (I_BARU.NE.KOLOM)
DO I=I_BARU,BARIS
DO J=J_BARU,KOLOM
K(I,J)=-K(I,I_BARU-1)/K(I_BARU-1,I_BARU-1)*K(I_BARU-1,J)+K(I,J)
END DO
END DO
DO I=I_BARU,BARIS
K(I,I_BARU-1)=0.D0
END DO
I_BARU=I_BARU+1
J_BARU=J_BARU+1
END DO
U(BARIS+1)=0.D0
U(BARIS)=K(BARIS,KOLOM)/K(BARIS,BARIS)
DO I=BARIS-1,1,-1
DUMMY=0.D0
DO J=I+1,BARIS
DUMMY=DUMMY+K(I,J)*U(J)
END DO
U(I)=(K(I,KOLOM)-DUMMY)/K(I,I)
END DO

RETURN
END
!--------------------------------------------------------------------------------
SUBROUTINE INPUT_RUNGE_KUTTA_ORDER2(X,Y,V,JUMLAH)
IMPLICIT REAL*8 (A-H,O-Z)
WRITE(9,'(1X,A)')'PERSAMAAN DIFERENSIAL BIASA DENGAN METODA RUNGE-KUTTA'
WRITE(9,'(1X,A)')'UNTUK ORDER 2'
WRITE(9,'(1X,A)')'====================================================='
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'DATA INPUT'
WRITE(9,'(1X,A)')'##########'
WRITE (*,'(1X,A,\)')'X AWAL ? '
READ(*,'(BN,F9.4)')X
WRITE (*,'(1X,A,\)')'Y AWAL ? '
READ(*,'(BN,F9.4)')Y
WRITE (*,'(1X,A,\)')'Y'' AWAL ? '
READ(*,'(BN,F9.4)')V
WRITE (*,'(1X,A,\)')'BANYAKNYA NILAI YANG DIAMATI ? '
READ(*,'(BN,I3)')JUMLAH
WRITE(9,*)
WRITE (9,'(1X,A,F9.4)')'X AWAL = ',X
WRITE (9,'(1X,A,F9.4)')'Y AWAL = ',Y
WRITE (9,'(1X,A,F9.4)')'Y'' AWAL = ',V
WRITE (9,'(1X,A,I3)')'BANYAKNYA NILAI YANG DIAMATI ',JUMLAH
WRITE(9,*)
WRITE(9,*)
WRITE(9,'(1X,A)')'DATA OUTPUT'
WRITE(9,'(1X,A)')'###########'
WRITE(9,*)
WRITE(9,'(2X,A,6X,A,8X,A,8X,A,8X,A)')'I','X(I)','Y(I)','Y''(I)','V(I)'
WRITE(9,'(1X,A)')'--------------------------------------------------'
RETURN
END
!--------------------------------------------------------------------------------
REAL(8) FUNCTION FUNGSI(X,Y)
DOUBLE PRECISION X,Y
FUNGSI=(X*0.-10.*Y)
RETURN
END
!--------------------------------------------------------------------------------
REAL*8 FUNCTION FUNGSI2(X,Y,Z) ! FUNGSI UNTUK BENTUK Y'
DOUBLE PRECISION X,Y,Z ![ini untuk kasus ayunan non linear]
FUNGSI2=0.D0*X+0.D0*Y+Z
RETURN
END
!--------------------------------------------------------------------------------
REAL*8 FUNCTION FUNGSI3(X,Y,Z) ! FUNGSI UNTUK BENTUK Y"=FUNGSI3(X,Y,Y')
DOUBLE PRECISION X,Y,Z ![ini untuk kasus ayunan non linear]
FUNGSI3=X*0.D0-DSIN(Y)-0.3D0*Z
RETURN
END
!--------------------------------------------------------------------------------
REAL*8 FUNCTION SUKU(A0,A1,A2,A3)
REAL*8 A0,A1,A2,A3
SUKU=(A0+2.*A1+2.*A2+A3)/6.D0
RETURN
END
!--------------------------------------------------------------------------------
REAL(8) FUNCTION A(X) ! DIGUNAKAN PADA BVP ORDER 2 UNTUK KOEFISIEN Y'
DOUBLE PRECISION X ! ATAU PADA BVP ORDER 1 UNTUK KOEFISIEN Y
A=2.*X*X+9
RETURN
END
!--------------------------------------------------------------------------------
REAL(8) FUNCTION B(X) ! DIGUNAKAN PADA BVP ORDER 2 UNTUK KOEFISIEN Y
DOUBLE PRECISION X ! ATAU PADA BVP ORDER 1 UNTUK KOEFISIEN FUNGSI NON HOMOGEN
B=2.*DTANH(X*X)-9
RETURN
END
!--------------------------------------------------------------------------------
REAL(8) FUNCTION C(X) ! DIGUNAKAN PADA BVP ORDER 2 UNTUK KOEFISIEN FUNGSI NON HOMOGEN
DOUBLE PRECISION X
C =1.+3.*X*X-DSIN(X)
RETURN
END
!--------------------------------------------------------------------------------
ane baru tahu ada yg bisa bikin seperti di atas emoticon-Matabelo
Quote:


Mau lihat yg lebih ribet lagi? FINITE ELEMENT..... emoticon-Big Grin
Quote:


santai saja, gan.
Finite element method, finite difference method, boundary element method adalah hal biasa untuk pemodelan permasalahan teknik. Menyusun program sampai ribuan baris udah jadi makanan buat tugas kuliah. Kalo program di atas sih, sekedar intermezo...
emoticon-Ngakak
ane taunya wolfram alpha doang gan emoticon-Berduka (S)

Code:

http://www.wolframalpha.com/input/?i=integrate+sin+x+dx+from+x%3D0+to+pi&lk=3
Quote:


Wolframalpha hanya bisa menuliskan/mencari solusi satu kalimat terbuka matematika yang dibatasi jumlah penulisan karakternya. Untuk bisa pemrograman tanpa pembatasan karakternya berikut semua toolboxnya, agan harus membeli produk dari wolfram inc, yaitu mathematica (versi 9 adalah yang terakhir). Program ini setara dengan matlab atau sejenisnya.
×