In g++, the compiled program didn't give complete output.

Asked by Pavlushka on 2012-01-26

I did a c++ code for solving a third order D.E. as follows:

/*By this program we will find out the initial condition.

/*The initial condition (when t=0) of the third order nonlinear ODE*/

/*Date: 23.01.2012*/

#include <stdio.h>

#include <math.h>

// FILE *fp;

 #define N 3

 int rk();

 int sub();

 int i, m;

 float F[N], K[4][N], temp[N],V[N], T_limit=5.1, h=0.5, T=0., e=0.1, c1, c2, c3, lm=.8, x, x0, x1, x2;

   // Y[N] is the initial value of the dependent variable of our original equation.

   // T (time) is the independent variable of our original equation.

   // K is used for iteration of Runge Katta Method.

   // T_limit is used as the final value of T (time)

int main()

 {

 float a0=0.4, b0=0.2, c0=0.1;

        float y0, y1, y2, z0, z1, z2;

 float k,j;

 float r, m1, m2, m3, m4, m5, m6, m7, m8, m9;

 float p1, p2, p3;

 float q1, q2;

 for (j=2.5;j<=10;j=j+0.2)

 {

 printf("\n");

 k=j;

// printf("Enter a +ve value of the root, k=");

      //k means lamda

// scanf("%f", &k);

  //r=-1/(k*k);

         //m1=2/(k*k*k);

   m2=18/pow(k,4);

   m3=72/pow(k,5);

   m4=120/pow(k,6);

   //m5=1/pow(k,3);

   //m6=12/pow(k,4);

   m7=m3;

   m8=240/pow(k,6);

   m9=360/pow(k,7);

             p1=-1/(k*k);

           p2=-6/pow(k,3);

           p3=-12/pow(k,4);

     q1=-2/pow(k,2);

     q2=-6/pow(k,3);

 y0=a0;

 z0=e*(b0*c0*m4+c0*c0*m9);

 x0=y0+z0;

 y1=-k*a0+e*(a0*a0*p1+a0*b0*p2+(b0*b0+2*c0*a0)*p3)+b0;

 z1=e*(-2*k*(b0*c0*m4+c0*c0*m9)+b0*c0*m3+c0*c0*m8);

 x1=y1+z1;

 y2=k*k*a0-3*e*k*(a0*a0*p1+a0*b0*p2+(b0*b0+2*c0*a0)*p3)-2*k*b0+2*e*(a0*b0*q1+(b0*b0+2*c0*a0)*q2)+2*c0;

 z2=e*(4*k*k*(b0*c0*m4+c0*c0*m9)-4*k*(b0*c0*m3+c0*c0*m8)+2*b0*c0*m2+2*c0*c0*m7);

        x2=y2+z2;

 printf("\n\t\t x0=%f \n\t\t x1=%f \n\t\t x2=%f", x0, x1, x2);

 printf("\n");

 printf("\n");

 sub();

 }

return 0;

}

 int sub()

 {

 c1=-3.0*lm; //sum of the A.U. roots.

 c2=3.0*lm*lm; //sum of the product of the roots taken two at a time

 c3=-lm*lm*lm; //product of the roots

// fp=fopen("learn1.dat", "w");

 V[0]=x0;

 V[1]=x1;

 V[2]=x2;

// printf("initial value\n");

// for (i=0; i<N; i++)

// {

// printf("Y[%d]=",i);

// scanf("%f", (Y+i));

// }

 do

 {

 printf ("%.2f\t",T);

// fprintf(fp, "%.2f\n", T);

 x=V[0];

 for(i=0; i<N; i++)

 {

 temp[i]=V[i];

 printf("%f\t",V[i]);

 }

 printf("%f\n",x);

// fprintf(fp, "%f\n", x);

 for(m=0; m<4; m++)

 {

 F[0]=V[1];

 F[1]=V[2];

 F[2]=-c3*V[0]-c2*V[1]-c1*V[2]-e*V[0]*V[0]*V[0];

 rk();

 }

 } while(T<T_limit+h);

 return 0;

 }

 int rk()

 {

 for(i=0; i<N; i++)

 {

 K[m][i]=F[i];

 if (m==0 || m==1)

 V[i]=temp[i]+.5*h*K[m][i];

 else if(m==2)

 V[i]=temp[i]+h*K[m][i];

 else V[i]=temp[i]+(K[0][i]+2*K[1][i]+2*K[2][i]+K[3][i])*h/6.;

 }

 if (m==0 || m==2)

 T=T+.5*h;

 return 0;

 }

But the compiled program gave me this

   x0=0.401573
   x1=-0.814725
   x2=1.773615

0.00 0.401573 -0.814725 1.773615 0.401573
0.50 0.369061 1.085164 6.471668 0.369061
1.00 2.058680 6.524188 16.426159 2.058680
1.50 7.990735 18.327394 27.232946 7.990735
2.00 18.454220 7.876439 -167.319901 18.454220
2.50 -28.053253 -251.635757 -664.048889 -28.053253
3.00 556.427917 14110.076172 153872.875000 556.427917
3.50 -71204488.000000 -11171593216.000000 1046708024770560.000000 -71204488.000000
4.00 24474019397295355228848128.000000 -inf -inf 24474019397295355228848128.000000
4.50 -nan -nan -nan -nan
5.00 -nan -nan -nan -nan
5.50 -nan -nan -nan -nan

   x0=0.400964
   x1=-0.890924
   x2=2.096703

6.00 0.400964 -0.890924 2.096703 0.400964

   x0=0.400612
   x1=-0.968352
   x2=2.455168

6.50 0.400612 -0.968352 2.455168 0.400612

   x0=0.400401
   x1=-1.046550
   x2=2.847923

7.00 0.400401 -1.046550 2.847923 0.400401

   x0=0.400270
   x1=-1.125250
   x2=3.274284

7.50 0.400270 -1.125250 3.274284 0.400270

   x0=0.400187
   x1=-1.204286
   x2=3.733802

8.00 0.400187 -1.204286 3.733802 0.400187

   x0=0.400131
   x1=-1.283556
   x2=4.226174

8.50 0.400131 -1.283556 4.226174 0.400131

   x0=0.400094
   x1=-1.362993
   x2=4.751190

9.00 0.400094 -1.362993 4.751190 0.400094

   x0=0.400069
   x1=-1.442549
   x2=5.308702

9.50 0.400069 -1.442549 5.308702 0.400069

   x0=0.400051
   x1=-1.522195
   x2=5.898601

10.00 0.400051 -1.522195 5.898601 0.400051

   x0=0.400039
   x1=-1.601908
   x2=6.520808

10.50 0.400039 -1.601908 6.520808 0.400039

   x0=0.400029
   x1=-1.681673
   x2=7.175263

11.00 0.400029 -1.681673 7.175263 0.400029

   x0=0.400023
   x1=-1.761478
   x2=7.861919

11.50 0.400023 -1.761478 7.861919 0.400023

   x0=0.400018
   x1=-1.841314
   x2=8.580742

12.00 0.400018 -1.841314 8.580742 0.400018

   x0=0.400014
   x1=-1.921176
   x2=9.331702

12.50 0.400014 -1.921176 9.331702 0.400014

   x0=0.400011
   x1=-2.001059
   x2=10.114779

13.00 0.400011 -2.001059 10.114779 0.400011

   x0=0.400009
   x1=-2.080957
   x2=10.929955

13.50 0.400009 -2.080957 10.929955 0.400009

   x0=0.400007
   x1=-2.160870
   x2=11.777213

14.00 0.400007 -2.160870 11.777213 0.400007

   x0=0.400006
   x1=-2.240794
   x2=12.656545

14.50 0.400006 -2.240794 12.656545 0.400006

   x0=0.400005
   x1=-2.320727
   x2=13.567937

15.00 0.400005 -2.320727 13.567937 0.400005

   x0=0.400004
   x1=-2.400669
   x2=14.511384

15.50 0.400004 -2.400669 14.511384 0.400004

   x0=0.400003
   x1=-2.480617
   x2=15.486879

16.00 0.400003 -2.480617 15.486879 0.400003

   x0=0.400003
   x1=-2.560571
   x2=16.494415

16.50 0.400003 -2.560571 16.494415 0.400003

   x0=0.400002
   x1=-2.640530
   x2=17.533987

17.00 0.400002 -2.640530 17.533987 0.400002

   x0=0.400002
   x1=-2.720493
   x2=18.605595

17.50 0.400002 -2.720493 18.605595 0.400002

   x0=0.400002
   x1=-2.800460
   x2=19.709229

18.00 0.400002 -2.800460 19.709229 0.400002

   x0=0.400001
   x1=-2.880430
   x2=20.844889

18.50 0.400001 -2.880430 20.844889 0.400001

   x0=0.400001
   x1=-2.960402
   x2=22.012573

19.00 0.400001 -2.960402 22.012573 0.400001

   x0=0.400001
   x1=-3.040378
   x2=23.212278

19.50 0.400001 -3.040378 23.212278 0.400001

   x0=0.400001
   x1=-3.120355
   x2=24.444002

20.00 0.400001 -3.120355 24.444002 0.400001

   x0=0.400001
   x1=-3.200335
   x2=25.707743

20.50 0.400001 -3.200335 25.707743 0.400001

   x0=0.400001
   x1=-3.280316
   x2=27.003500

21.00 0.400001 -3.280316 27.003500 0.400001

   x0=0.400001
   x1=-3.360298
   x2=28.331272

21.50 0.400001 -3.360298 28.331272 0.400001

   x0=0.400001
   x1=-3.440282
   x2=29.691055

22.00 0.400001 -3.440282 29.691055 0.400001

   x0=0.400000
   x1=-3.520268
   x2=31.082853

22.50 0.400000 -3.520268 31.082853 0.400000

   x0=0.400000
   x1=-3.600254
   x2=32.506660

23.00 0.400000 -3.600254 32.506660 0.400000

   x0=0.400000
   x1=-3.680242
   x2=33.962475

23.50 0.400000 -3.680242 33.962475 0.400000

   x0=0.400000
   x1=-3.760230
   x2=35.450302

24.00 0.400000 -3.760230 35.450302 0.400000

But every iteration should give me a little more detailed output like the first one, for instance:

   x0=0.401573
   x1=-0.814725
   x2=1.773615

0.00 0.401573 -0.814725 1.773615 0.401573
0.50 0.369061 1.085164 6.471668 0.369061
1.00 2.058680 6.524188 16.426159 2.058680
1.50 7.990735 18.327394 27.232946 7.990735
2.00 18.454220 7.876439 -167.319901 18.454220
2.50 -28.053253 -251.635757 -664.048889 -28.053253
3.00 556.427917 14110.076172 153872.875000 556.427917
3.50 -71204488.000000 -11171593216.000000 1046708024770560.000000 -71204488.000000
4.00 24474019397295355228848128.000000 -inf -inf 24474019397295355228848128.000000
4.50 -nan -nan -nan -nan
5.00 -nan -nan -nan -nan
5.50 -nan -nan -nan -nan.

Question information

Language:
English Edit question
Status:
Answered
For:
Ubuntu gcc-defaults Edit question
Assignee:
No assignee Edit question
Last query:
2012-01-26
Last reply:
2012-01-26
Pavlushka (pavelsayekat) said : #1

I need to get through this with satisfactory result.

I suggest you post on a coding forum too, its the subject you are having issue with

Can you help with this problem?

Provide an answer of your own, or ask Pavlushka for more information if necessary.

To post a message you must log in.