int main () { int N, M = 10; N = 10; double h, Cx = 1.0, k = 0.6; h = 2.0/N; //Piece size double tau; tau = k*h/Cx; int i; double x[11]; for (i = 0; i < (N+1); i++) { x[i] =i*h - 1; } double U[11]; for (i = 0; i < (N+1); i++) { U[i] = 0; if ((x[i]>=(-0.5))&&(x[i]<=0.5)) { U[i] = 1; } } double a; for (i = 0; M > 0; i++) { if (i == 0) { a = (U[i] - U[N])/(x[i]-x[N]); } else { a = (U[i] - U[i-1])/(x[i]-x[i-1]); } // y=ax+b; U[i-1] U[i]=(x[i] - Cx*tau)*a + U[i-1]-a*x[i-1]; DM_plot_1d(x, U, N, "Test 1", 1); M--; printf("%f ", U[i]); if (i == N) { //M--; i = 0; //DM_plot_1d(x, U, N, "Test 1", 1); //DM_plot_1d(x, U, N, "Test 1", 0); printf("\n"); } } return 0; }
int main(){ const double Cx = 1; const double k = 0.5; int N, M; double x[100] = {0}; double y[100] = {0}; double previous_y[100] = {0}; double previous_der[100] = {0}; double der[100] = {0}; double h, t; scanf("%d", &N); h = 2.0 / N; t = (k * h) / Cx; M = 2.0 / (Cx * t)+1; // amount of steps int i; for (i = 0; i < N; i++) { x[i] = (i * h) - 1; y[i] = previous_y[i] = init (x[i]); }; double A, B, C, D, tg, b; int j = 0; while (j < M) { for (i = 1; i < N; i++) { D = y[i]; C = der[i]; A = (((previous_der[i-1] - C)/h) + 2 * (previous_y[i-1] - D + C * h)/(h*h))/h; B = (previous_y[i-1] - D + C * h)/(h*h) + A*h; y[i] = A * (-Cx*t) * (-Cx*t) * (-Cx*t) + B * (-Cx*t) * (-Cx*t) + C * (-Cx*t) + D; der[i] = 3 * A * (-Cx*t) * (-Cx*t) + 2 * B * (-Cx*t) + C; }; D = y[0]; C = der[0]; A = (((previous_der[N - 1] - C)/h) + 2 * (previous_y[N-1] - D + C * h)/(h*h))/h; B = (previous_y[N-1] - D + C * h)/(h*h) + A*h; y[0] = A * (-Cx*t) * (-Cx*t) * (-Cx*t) + B * (-Cx*t) * (-Cx*t) + C * (-Cx*t) + D; der[0] = 3 * A * (-Cx*t) * (-Cx*t) + 2 * B * (-Cx*t) + C; for (i = 0; i < N; i++){ previous_y[i] = y[i]; previous_der[i] = der[i]; } j++; } //build plot DM_plot_1d(x, y, N, "Test 1", 0); DM_plot_1d(x, y, N, "Test 1", 1); return 0; }
int main() { int i; int N = 100;//N is the number of nodes double cx = 1.0; double k = 0.6; double *current = (double *)malloc(N*sizeof(double)); double *next = (double *)malloc(N*sizeof(double)); double *current_der = (double *)malloc(N*sizeof(double)); double *next_der = (double *)malloc(N*sizeof(double)); double *x = (double *)malloc(N*sizeof(double)); //initialization double tau, h; h = 2.0/N; tau = k*h/cx; float eps = 0.0000001; for (i = 0; i < N; i++) { if ( ((-1.0 + i*h) >= -0.5 ) && ((-1.0 + i*h) <= 0.5 ) ) current[i] = 1.0; else current[i] = 0.0; next[i] = 0.0; current_der[i] = 0.0; next_der[i] = 0.0; x[i] = -1.0 + i*h; } DM_plot_1d(x, current, N, "Text", 1); // print(N, current); //main loop int j; double a, b, c, d, A, B, C, D, E, F, x0; double xm, xm_1, um, um_1, dum, dum_1; //here um stands for a u(xm), dum for derivative of u in xm //extrapolation as a polinom ax^3+bx^2+cx+d i = 0; while (i < 2/(cx*tau)) //1 period { for (j = 0; j < N-1; j++) { //description of new values um = current[j+1]; um_1 = current[j]; dum = current_der[j+1]; dum_1 = current_der[j]; xm_1 = -1.0 + j*h; xm = -1.0 + (j+1)*h; x0 = xm - cx*tau; if ( (fabs(xm-0.0) > eps) && (fabs(xm_1-0.0) > eps) ) { //calculation of coefficients A = -0.5*(xm_1*xm_1*xm_1 - xm*xm*xm); B = 0.5*(xm_1 - xm); C = um_1 - um +0.5*(xm*dum - xm_1*dum_1); D = -3.0*xm_1*xm*(xm - xm_1); E = xm - xm_1; F = dum_1*xm - dum*xm_1; a = (C*E - F*B)/(A*E - D*B); c = (A*F - D*C)/(A*E - D*B); b = (dum - 3.0*a*xm*xm - c)/(2.0*xm); d = um - c*xm - b*xm*xm - a*xm*xm*xm; } if (fabs(xm_1-0.0) < eps) { d = um_1; c = dum_1; A = um-c*xm-d; B = dum-c; a = -(A*2.0-B*xm)/(xm*xm*xm); b = -(xm*B-3.0*A)/(xm*xm); } if (fabs(xm-0.0) < eps) { d = um; c = dum; A = um_1-c*xm_1-d; B = dum_1-c; a = -(A*2.0-B*xm_1)/(xm_1*xm_1*xm_1); b = -(xm_1*B-3.0*A)/(xm_1*xm_1); } //recalculation of function and its derivative next[j+1] = a*x0*x0*x0 + b*x0*x0 + c*x0 + d; next_der[j+1] = 3.0*a*x0*x0 + 2.0*b*x0 + c; } //the same for the border layer um = current[0]; um_1 = current[N-1]; dum = current_der[0]; dum_1 = current_der[N-1]; xm_1 = -1.0 + (N-1)*h; xm = -1.0 + N*h; x0 = xm - cx*tau; A = -0.5*(xm_1*xm_1*xm_1 - xm*xm*xm); B = 0.5*(xm_1 - xm); C = um_1 - um +0.5*(xm*dum - xm_1*dum_1); D = -3.0*xm_1*xm*(xm - xm_1); E = xm - xm_1; F = dum_1*xm - dum*xm_1; a = (C*E - F*B)/(A*E - D*B); c = (A*F - D*C)/(A*E - D*B); b = (dum - 3.0*a*xm*xm - c)/(2.0*xm); d = um - c*xm - b*xm*xm - a*xm*xm*xm; next[0] = a*x0*x0*x0 + b*x0*x0 + c*x0 + d; next_der[0] = 3.0*a*x0*x0 + 2.0*b*x0 + c; //current arrays update for (j = 0; j < N; j++) { current[j] = next[j]; current_der[j] = next_der[j]; } DM_plot_1d(x, current, N, "Text", 1); i++; }