CONTOH PENYELESAIAN PERSAMAAN DIFERENSIAL DENGAN METODE NUMERIK MENGGUNAKAN BAHASA PEMROGRAMAN C

5
Dicky J Silitonga

description

Kebanyakan penyelesaian metode numerik persamaan diferensial yang beredar menggunakan FORTRAN. Artikel ini adalah contoh penyelesaian suatu persamaan diferensial dengan menggunakan C, tentunya dengan algoritma yang sama. Penulis merupakan newbie dalam metode numerik maupun pemrograman, koreksi dan komentar dari para pembaca maupun pengunduh sangat diharapkan.

Transcript of CONTOH PENYELESAIAN PERSAMAAN DIFERENSIAL DENGAN METODE NUMERIK MENGGUNAKAN BAHASA PEMROGRAMAN C

Di cky J Si l i t onga CONTOH PENYELESAIAN PERSAMAAN DIFERENSIAL BIASA DENGAN METODE NUMERIK MENGGUNAKAN BAHASA PEMROGRAMAN C Persamaan yang akan diselesaikan:

= -2x3 + 12x2 - 20x + 8.5 Penyelesaian akan dilakukan dengan metode Euler, Heun, Polygon, Ralston, dan Runge-Kutta order 3. Dari hasil perhitungan metode numerik dapat dibandingkan hasil dan error masing-masing metode terhadap nilai eksaknya. Program berikut akan menyelesaikan persamaan diatas dari x=0 sampai x=4 dengan kondisi awal pada x=0 adalah y=1. Interval x/step x (x) dapat ditentukan di awal (min. 0.08, sesuai array yang didefinisikan pada program).Di cky J Si l i t onga KODE PROGRAM #include #include main() { int i, j; char exit; float step, x[50], x1[50], x2[50], x3[50], xk3[50], k3[50], dx, yE[50], fx[50], fx1[50], fxr[50], fx2[50], fx3[50],fxr2[50], phi3[50], yEuler[50], yHeun[50], yPolygon[50], yRalston[50], yRungeKutta3[50],EEuler[50], EHeun[50], EPolygon[50], ERalston[50], ERungeKutta3[50]; printf("\nNUMERICAL METHOD FOR SOLVING ODE by DICKY SILITONGA\n\n"); printf("Equation to be solved:dy/dx = f(x,y) = -2x^3 + 12x^2 - 20x + 8.5 \n\n"); printf("step = "); scanf("%f",&step); printf("---------------------------------------------------------------------------------------------"); printf("\nxyExc yEulyHeunyPoly yRals yRuKu3EEulEHeun EPoly ERalsERuKu3\n"); printf("---------------------------------------------------------------------------------------------\n"); dx=step; i=1; do { x[i] = (i-1)*dx; x1[i] = x[i] + dx; x2[i] = x[i] + (dx/2); x3[i] = x[i] + (dx*0.75); yE[0] = 1; yE[i] = (-0.5*x1[i]*x1[i]*x1[i]*x1[i]) + (4*x1[i]*x1[i]*x1[i]) - (10*x1[i]*x1[i]) + (8.5*x1[i]) + 1; //EULER METHOD fx[i] = (-2*x[i]*x[i]*x[i]) + (12*x[i]*x[i]) - (20*x[i]) + 8.5; yEuler[0] = 1; yEuler[i] = (yEuler[i-1]) + (fx[i]*dx); EEuler[i] = (yEuler[i-1] - yE[i-1])/(yE[i-1]) * 100; //HEUN METHOD fx1[i] = (-2*x1[i]*x1[i]*x1[i]) + (12*x1[i]*x1[i]) - (20*x1[i]) + 8.5; fxr[i] = (fx[i] + fx1[i])/2; yHeun[0] = 1; yHeun[i] = (yHeun[i-1]) + (fxr[i]*dx); EHeun[i] = (yHeun[i-1] - yE[i-1])/(yE[i-1]) * 100; //POLYGON METHOD fx2[i] = (-2*x2[i]*x2[i]*x2[i]) + (12*x2[i]*x2[i]) - (20*x2[i]) + 8.5; yPolygon[0] = 1; yPolygon[i] = (yPolygon[i-1]) + (fx2[i]*dx); EPolygon[i] = (yPolygon[i-1] - yE[i-1])/(yE[i-1]) * 100; //RALSTON METHOD fx3[i] = (-2*x3[i]*x3[i]*x3[i]) + (12*x3[i]*x3[i]) - (20*x3[i]) + 8.5; Di cky J Si l i t onga fxr2[i] = (fx[i]/3) + (2*fx3[i])/3;yRalston[0] = 1; yRalston[i] = (yRalston[i-1]) + (fxr2[i]*dx); ERalston[i] = (yRalston[i-1] - yE[i-1])/(yE[i-1]) * 100; //RUNGE KUTTA ORDER 3 METHOD for (j=1; j