Download - CONTOH PENYELESAIAN PERSAMAAN DIFERENSIAL DENGAN METODE NUMERIK MENGGUNAKAN BAHASA PEMROGRAMAN C

Transcript

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