Приближенное интегрирование дифференциальных уравнений, страница 5

      FILE *out;

      out=fopen("out5.dan","w");

      x[0]=0; y[0]=1;

      q[0]=f(x[0],y[0])*h;

      do

      {     x[k]=x[0]+k*h;

            y[1]=y[0]+q[0];

            if (k>1)

                  y[1]+=dq[0]*0.5;

            if (k>2)

                  y[1]-=ddq[0]/12 ;

            dy[0]=y[1]-y[0];

            q[1]=f(x[1],y[1])*h;

            dq[0]=q[1]-q[0];

            if (k>1)

            {     y[2]=y[1]+q[1]+0.5*dq[0];

                  if (k>2)

                        y[2]+=5*ddq[0]/12;

                  dy[1]=y[2]-y[1];

                  if (k<3)

                  {     q[2]=f(x[2],y[2])*h;

                        dq[1]=q[2]-q[1];

                        ddq[0]=dq[1]-dq[0];

                  }

            }

            k++;

      }

      while (k<4);

      for(k=4;k<N;k++)

             x[k]=x[0]+k*h;

      for(k=2;k<N-1;k++)

      {     q[k]=f(x[k],y[k])*h;

            dq[k-1]=q[k]-q[k-1];

            ddq[k-2]=dq[k-1]-dq[k-2];

            y[k+1]=y[k]+q[k]+0.5*dq[k-1]+5*ddq[k-2]/12;

            dy[k]=y[k+1]-y[k];

            dyk[k-1]=(q[k]+q[k-1])/2;

      }

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

            fprintf(out,"x=%g  y=%f \n",x[k],y[k]);

 }

 float f(float x,float y)

 {    return (x*y/2);

 }

Результаты

Приведем результаты выполнения вышеприведенных алгоритмов

     X

Ф.Ад. с I разност. (нач.таб.-м.Эйлерас уравн.)

Ф.Ад. с I разност. (нач.таб.-метод Крылова)

Ф.Ад.соII разност. (нач.таб.-м.Эйлерас уравн.)

Ф.Ад.сoII разност. (нач.таб.-метод Крылова)

Метод Адамса-Крылова

0

y=1.0000

y=1.0000

y=1.0000

y=1.0000

y=1.0000

y=1.0000

0.1

y=1.0526

y=1.0076

y=1.0526

y=1.0076

y=1.0025

y=1.0025

0.2

y=1.0605

y=1.0151

y=1.1108

y=1.0126

y=1.0101

y=1.0100

0.3

y=1.0738

y=1.0276

y=1.1321

y=1.0320

y=1.0227

y=1.0227

0.4

y=1.0927

y=1.0459

y=1.1498

y=1.0482

y=1.0408

y=1.0408

0.5

y=1.1174

y=1.0696

y=1.1759

y=1.0720

y=1.0644

y=1.0645

0.6

y=1.1484

y=1.0992

y=1.2087

y=1.1018

y=1.0940

y=1.0942

0.7

y=1.1861

y=1.1353

y=1.2485

y=1.1382

y=1.1301

y=1.1303

0.8

y=1.2311

y=1.1784

y=1.2962

y=1.1816

y=1.1733

y=1.1735

0.9

y=1.2842

y=1.2293

y=1.3524

y=1.2329

y=1.2242

y=1.2244

1

y=1.3463

y=1.2887

y=1.4181

y=1.2928

y=1.2837

y=1.2840

Отклоне-   ния (max)

1

(1  знак)

5

(3 знак)

2

(1 знак)

1

(2 знак)

3

(4 знак)


Метод Эйлера с уравниванием

x=0  y=1.0000

x=0.1  y=1.0526

x=0.2  y=1.1108

Метод Крылова

x=0 y=1.0000

x=0.1 y=1.0076

x=0.2 y=1.0126


На основе полученных результатов можно сделать следующие умозаключения:

Наиболее точные результаты дает метод Адамса-Крылова.

Среди формул Адамса следует отметить формулу с первыми разностями, причем использование метода А.Н.Крылова для составления начала таблицы значительно приблизило результаты к точным данным (от выбора метода для составления начала таблицы зависит окончательный результат).

Вычисления с удвоенным шагом ухудшают результаты (максимальное отклонение – 1).