78169

Программирование искусственной нейронной сети

Лабораторная работа

Информатика, кибернетика и программирование

Пусть дано прямоугольное изображение, каждый пиксел которого характеризуется своей яркостью. Изображение разбивается на p прямоугольных кадров размером каждый. Кадр сжимается в вектор данных размерностью , который затем восстанавливается (например, после хранения или передачи по медленным каналам связи) в кадр того же размера

Русский

2017-10-18

217 KB

2 чел.

   Московский Государственный Технический Университет

им. Н.Э. Баумана

кафедра РК6 (САПР)

Отчёт

по лабораторной работе №4

по курсу "Интеллектуальные подсистемы САПР"

Группа: РК6-102

Студентка: Митина Е.В.

Преподаватель: Федорук В.Г.

Москва

2011

Программирование искусственной нейронной сети

Вариант 1

Пусть дано прямоугольное изображение, каждый пиксел которого характеризуется своей яркостью. Изображение разбивается на p прямоугольных кадров размером  каждый. Кадр сжимается в вектор данных размерностью , который затем восстанавливается (например, после хранения или передачи по медленным каналам связи) в кадр того же размера .

Решение этой задачи возможно с использованием сети, структурная схема которой представлена на рис.1.

Рис. 1.  Структурная схема сети для сжатия и восстановления изображения

Здесь , ,  — значение яркости -ого пикселя в -ом кадре, .

Сжатие (компрессия) данных осуществляется первым слоем нейронов, а восстановление (декомпрессия) — выходным. Сеть является автоассоциативной, поскольку ее выходной вектор  должен совпадать с входным .

Веса первого слоя нейронов в матричной форме обозначаются , а выходного слоя — . Вследствие линейности функций активации и однонаправленности распространения сигналов имеем: 

Обучение сети, состоящее в оптимальном подборе весов, составляющих матрицы  и , подразумевает минимизацию целевой функции в виде: 

Для отыскания минимума этой целевой функции будем использовать метод обратного распространения ошибки в режиме онлайн. В рамках данного метода уточнение весовых коэффициентов производится формулой метода градиента: 

Частные производные целевой функции по весам нейронов выходного слоя имеют следующий вид:

С учетом линейности функций активации выходного слоя нейронов  выражения для частных производных упрощаются: 

Компоненты вектора градиента для весов первого слоя нейронов определяются более сложно: 

Опять линейность функций активации и для первого слоя нейронов позволяет упростить выражения до следующего вида: 

Результаты работы программы

Обучение сети проводилось на следующем изображении:

Рис. 1. Изображение для обучения

Результаты работы сети приNv=4,Nh=4,L=2 (степень сжатия 8).

Рис. 2. Восстановленное изображение, степень сжатия 8.

Результаты работы сети приNv=4,Nh=4,L=6 (степень сжатия 2.7).

Рис. 3. Восстановленное изображение, степень сжатия 2.7.

Результаты работы сети приNv=2,Nh=2,L=2 (степень сжатия 2).

Рис. 4. Восстановленное изображение, степень сжатия 2.

Текст программы

//---------------------------------------------------------------------------

#include <math.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <png.h>

#define PNG_BYTES_TO_CHECK 4

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused

int N_nu, N_h, L;

char f_obuch[256], f_rab[256], f_rez[256];

double x[100];

double h[100];

double **w2;

double **w1;

double *g;

double **w_nach2;

double **w_nach1;

double **w_new2;

double **w_new1;

 png_structp png_read_ptr;

 png_infop info_read_ptr;

 png_structp png_write_ptr;

 png_infop info_write_ptr;

 png_uint_32 width, height;

 int bit_depth, color_type, interlace_type;

 int compression_type, filter_method;

 int row, col;

 png_bytep *row_pointers;

 char sigBuf[PNG_BYTES_TO_CHECK];

 double mas[65550];

 FILE *fpIn;

 FILE *fpOut;

 FILE *fp;

int main(int argc, char* argv[])

{

void vvod_dann(void);

void obuchenie(void);

void dekom(double *per, int *k);

void decompres(double *per, int k);

void obuchenie2_of(void);

void obuchenie2(void);  // ìåòîä RPROP

 double per[65550];

 int k, pp,i,j;

  fp = fopen("rez.txt","w");

  vvod_dann();

  fprintf(fp,"Ishodnie dannie:\n");

  fprintf(fp," N_nu %d\n",N_nu);

  fprintf(fp," N_h %d\n",N_h);

  fprintf(fp," L %d\n",L);

  fprintf(fp," F_obuch %s\n",f_obuch);

  fprintf(fp," F_ishodn %s\n",f_rab);

  fprintf(fp," F_rezult %s\n",f_rez);

  printf("test1");

// obuchenie();

// obuchenie2();  // ìåòîä RPROP

obuchenie2_of();

  printf("test2");

  fprintf(fp,"Vesa 1go sloya:\n");

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

  {

   for (j=0; j<N_nu*N_h; j++)

    {

     fprintf(fp," % 10.4f",w1[i][j]);

    }

   fprintf(fp,"\n");

  }

  fprintf(fp,"Vesa 2go sloya:\n");

  for (i=0; i<N_nu*N_h; i++)

  {

   for (j=0; j<L; j++)

    {

     fprintf(fp," % 10.4f",w2[i][j]);

    }

   fprintf(fp,"\n");

  }

  dekom(per, &k);

  decompres(per, k);

  fclose(fp);

 return 0;

}

void vvod_dann(void)

{

 printf("N_nu=");

 scanf("%d", &N_nu);

 printf("N_h=");

 scanf("%d", &N_h);

 printf("L=");

 scanf("%d", &L);

 printf("F_obuch ");

 scanf("%s", f_obuch);

 printf("F_ishodn ");

 scanf("%s", f_rab);

 printf("F_rezult ");

 scanf("%s", f_rez);

/*

N_nu=4; N_h=4; L=2;

 strcpy(f_obuch,"bug.png");

 strcpy(f_rab,"beat.png");

 strcpy(f_rez,"k2.png");

*/

}

void obuchenie(void)

{

  void podsch_g(int i);

  void podsch_h(int i);

  void readf_fom(char *fname, double *mas, int *n);

   int i, j, n, kol,l,t, sch=0;

  double nu=0.5, dl, porog=30;

  double E_pr1=0;

  double E_pr2=0;

  double E, E_new, nu_min=0.0000000001, nu_kon, eps=0.01;

 readf_fom(f_obuch, mas, &n);

g = calloc(L, sizeof(double));

w1 = calloc(L, sizeof(double));

w2 = calloc(N_h*N_nu, sizeof(double));

w_nach1 = calloc(L, sizeof(double));

w_nach2 = calloc(N_h*N_nu, sizeof(double));

w_new1 = calloc(L, sizeof(double));

w_new2 = calloc(N_h*N_nu, sizeof(double));

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

 {w1[i] = calloc(N_h*N_nu, sizeof(double));

               w_nach1[i] = calloc(N_h*N_nu, sizeof(double));

               w_new1[i] = calloc(N_h*N_nu, sizeof(double));

               }

        for (i=0; i<N_h*N_nu; i++)

 {w2[i] = calloc(L, sizeof(double));

               w_nach2[i] = calloc(L, sizeof(double));

               w_new2[i] = calloc(L, sizeof(double));

               }

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

  {

    for (j=0; j<N_nu*N_h; j++)

    {

    w_nach1[i][j]= -2.0/sqrt(L)+(double)(rand()%10)/10*(4.0/sqrt(L));

//      w_nach1[i][j]= (double)(rand()%10)/10*(2/sqrt(N_nu*N_h));

//       w_nach1[i][j]=1;

     w_new1[i][j]=w_nach1[i][j];

     w1[i][j]=w_nach1[i][j];

    w_nach2[j][i]= -2.0/sqrt(L)+(double)(rand()%10)/10*(4.0/sqrt(L));

//    w_nach2[j][i]= (double)(rand()%10)/10*(2/sqrt(L));

//       w_nach2[j][i]=1;

     w_new2[j][i]=w_nach2[j][i];

     w2[j][i]=w_nach2[j][i];

    }

  }

kol=0;

      t=0;nu=0.5;

      do

      {

          for (i=0;i<N_nu*N_h;i++)

            {

             x[i] = mas[kol+i];

            }

          kol += N_nu*N_h;

           if (kol>=n) kol=0;

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

        {

          podsch_g(i);

        }

        for (i=0;i<N_nu*N_h;i++)

        {

          podsch_h(i);

        }

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

       {

        for (j=0; j<N_nu*N_h; j++)

          {

           E_pr2=(h[j]-x[j])*g[i];

           w2[j][i]=w_new2[j][i]-nu*E_pr2;

          }

        }

     for(l=0; l<L; l++)

       {

        for (j=0; j<N_nu*N_h; j++)

          {

           dl=0;

           for(i=0; i<N_nu*N_h;i++)

           dl+=(h[i]-x[i])*w2[i][l];

           E_pr1=dl*x[j];

           w1[l][j]=w_new1[l][j]-nu*E_pr1;

          }

        }

     E=0;

     for (i=0; i<N_nu*N_h; i++)

     {

      E+=(1.0/2)*(h[i]-x[i])*(h[i]-x[i]);

     }

     E_new=0;

     for (i=0; i<N_nu*N_h; i++)

     {

      podsch_h(i);

      E_new+=(1.0/2)*(h[i]-x[i])*(h[i]-x[i]);

     }

     fprintf(fp,"E %f E_new %f kol %d nu %f\n",E, E_new, kol, nu);

           if (E_new<E)

               {

                  for(l=0; l<L; l++)

                      {

                          for (j=0; j<N_nu*N_h; j++)

                               {

                                 w_new1[l][j]=w1[l][j];

                                 w_new2[j][l]=w2[j][l];

                                }

                      }

                sch+=1;

                if (sch>porog) {nu=nu*2; sch=0;}

               }

          if (E_new>=E)

              { nu=0.1*nu;

                sch=0;

              for(l=0; l<L; l++)

                  {

                      for (j=0; j<N_nu*N_h; j++)

                           {

                             w1[l][j]=w_new1[l][j];

                             w2[j][l]=w_new2[j][l];

}

                  }

              }

           t+=1;

        // } while (fabs(E_new-E)> eps);

       } while (nu>nu_min);

        nu_kon=nu;

  fprintf(fp," Kol-vo iteracij %d k-t obucheniya %e kadr %d \n", t, nu, kol/N_nu/N_h);

}

void obuchenie2(void)  // ìåòîä RPROP

{

  void podsch_g(int i);

  void podsch_h(int i);

  void readf_fom(char *fname, double *mas, int *n);

   int i, j, n, kol,l,t;

  double nu_max=50.0, nu_min=1e-6, al=1.2, bet=0.5, nu;

  double **q1m1, **q1m0, **q2m1, **q2m0;

  double **nu1m1, **nu1m0, **nu2m1, **nu2m0;

  double E, E_new, eps=0.005, dl;

   double mas[65550];

 readf_fom(f_obuch, mas, &n);  // ôîðìèðîâàíèå ìàññèâà äëÿ îáó÷åíèÿ èç ñïåöèàëüíîãî ôàéëà

g = calloc(L, sizeof(double));

w1 = calloc(L, sizeof(double));

w2 = calloc(N_h*N_nu, sizeof(double));

w_nach1 = calloc(L, sizeof(double));

w_nach2 = calloc(N_h*N_nu, sizeof(double));

w_new1 = calloc(L, sizeof(double));

w_new2 = calloc(N_h*N_nu, sizeof(double));

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

 {w1[i] = calloc(N_h*N_nu, sizeof(double));

               w_nach1[i] = calloc(N_h*N_nu, sizeof(double));

               w_new1[i] = calloc(N_h*N_nu, sizeof(double));

               }

        for (i=0; i<N_h*N_nu; i++)

 {w2[i] = calloc(L, sizeof(double));

               w_nach2[i] = calloc(L, sizeof(double));

               w_new2[i] = calloc(L, sizeof(double));

               }

q1m1 = calloc(L, sizeof(double));

q1m0 = calloc(L, sizeof(double));

nu1m1 = calloc(L, sizeof(double));

nu1m0 = calloc(L, sizeof(double));

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

 {

                q1m1[i] = calloc(N_h*N_nu, sizeof(double));

                q1m0[i] = calloc(N_h*N_nu, sizeof(double));

                nu1m1[i] = calloc(N_h*N_nu, sizeof(double));

                nu1m0[i] = calloc(N_h*N_nu, sizeof(double));

               }

q2m1 = calloc(N_h*N_nu, sizeof(double));

q2m0 = calloc(N_h*N_nu, sizeof(double));

nu2m1 = calloc(N_h*N_nu, sizeof(double));

nu2m0 = calloc(N_h*N_nu, sizeof(double));

        for (i=0; i<N_h*N_nu; i++)

 {

                q2m1[i] = calloc(L, sizeof(double));

                q2m0[i] = calloc(L, sizeof(double));

                nu2m1[i] = calloc(L, sizeof(double));

                nu2m0[i] = calloc(L, sizeof(double));

               }

 // íà÷àëüíûå âåñà

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

  {

    for (j=0; j<N_nu*N_h; j++)

    {

    w_nach1[i][j]= -2.0/sqrt(L)+(double)(rand()%10)/10*(4.0/sqrt(L));

//      w_nach1[i][j]= (double)(rand()%10)/10*(2/sqrt(N_nu*N_h));

//       w_nach1[i][j]=1;

     w_new1[i][j]=w_nach1[i][j];

     w1[i][j]=w_nach1[i][j];

//     w_nach2[j][i]= -2.0/sqrt(L)+(double)(rand()%10)/10*(4.0/sqrt(L));

//    w_nach2[j][i]= (double)(rand()%10)/10*(2/sqrt(L));

           w_nach2[j][i]=1;

     w_new2[j][i]=w_nach2[j][i];

     w2[j][i]=w_nach2[j][i];

    }

  }

 // Çíà÷åíèÿ íà ïðåäûäóùåì øàãå (âîëþíòàðèñêèå)

 nu=0.5;

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

  {

    for (j=0; j<N_nu*N_h; j++)

    {

     q1m1[i][j] = 1000.0;

     nu1m1[i][j] = nu;

     q2m1[j][i] = 1000.0;

     nu2m1[j][i] = nu;

    }

  }

/* âíåøíèé öèêë îáó÷åíèÿ ïî êàäðàì */

kol=0;

      t=0;

      do          /* âíóòðåííèé öèêë îáó÷åíèÿ */

      {

          for (i=0;i<N_nu*N_h;i++)

            {

             x[i] = mas[kol+i];

            }

          kol += N_nu*N_h;

           if (kol>=n) kol=0;

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

        {

          podsch_g(i);

        }

        for (i=0;i<N_nu*N_h;i++)

        {

          podsch_h(i);

        }

     for(i=0; i<L; i++)       // 2

       {

        for (j=0; j<N_nu*N_h; j++)

          {

           q2m0[j][i]=(h[j]-x[j])*g[i];

           nu2m0[j][i] = nu2m1[j][i];         // =

           if ( q2m0[j][i]*q2m1[j][i] > 0.0)  // >0

            {

             nu2m0[j][i] = al*nu2m1[j][i];

             if (nu2m0[j][i]>nu_max)  nu2m0[j][i]=nu_max;

            }

           if ( q2m0[j][i]*q2m1[j][i] < 0.0)  // <0

            {

             nu2m0[j][i] = bet*nu2m1[j][i];

             if (nu2m0[j][i]<nu_min)  nu2m0[j][i]=nu_min;

            }

           w2[j][i]=w_new2[j][i]-nu2m0[j][i]*q2m0[j][i]/fabs(q2m0[j][i]);

           nu2m1[j][i] = nu2m0[j][i];

           q2m1[j][i] = q2m0[j][i];

          }

        }

     for(l=0; l<L; l++)           // 1

       {

        for (j=0; j<N_nu*N_h; j++)

          {

           dl=0;

           for(i=0; i<N_nu*N_h;i++)

           dl+=(h[i]-x[i])*w2[i][l];

           q1m0[l][j]=dl*x[j];

           nu1m0[l][j] = nu1m1[l][j];         // =

           if ( q1m0[l][j]*q1m1[l][j] > 0.0)  // >0

            {

             nu1m0[l][j] = al*nu1m1[l][j];

             if (nu1m0[l][j]>nu_max)  nu1m0[l][j]=nu_max;

            }

           if ( q1m0[l][j]*q1m1[l][j] < 0.0)  // <0

            {

             nu1m0[l][j] = bet*nu1m1[l][j];

             if (nu1m0[l][j]<nu_min)  nu1m0[l][j]=nu_min;

            }

           if (fabs(q1m0[l][j])>0.0) w1[l][j]=w_new1[l][j]-nu1m0[l][j]*q1m0[l][j]/fabs(q1m0[l][j]);

           nu1m1[l][j] = nu1m0[l][j];

           q1m1[l][j] = q1m0[l][j];

          }

        }

     E=0;

     for (i=0; i<N_nu*N_h; i++)

     {

      E+=(1.0/2)*(h[i]-x[i])*(h[i]-x[i]);

     }

     E_new=0;

     for (i=0; i<N_nu*N_h; i++)

     {

      podsch_h(i);

      E_new+=(1.0/2)*(h[i]-x[i])*(h[i]-x[i]);

     }

//      fprintf(fp,"E %f E_new %f kol %d \n",E, E_new, kol);

                  for(l=0; l<L; l++)

                      {

                          for (j=0; j<N_nu*N_h; j++)

                               {

                                 w_new1[l][j]=w1[l][j];

                                 w_new2[j][l]=w2[j][l];

                                }

                      }

           t+=1;

//          } while (fabs(E - E_new)> eps);

         } while (t< 400);

  fprintf(fp," ÷èñëî îïåðàöèé îáó÷åíèÿ %d\n", t);

}

void readf_fom(char *fname, double *mas, int *n )

{

int coln, rown;

 fpIn = fopen(fname,"r");

 if (fread(sigBuf, 1, PNG_BYTES_TO_CHECK, fpIn) != PNG_BYTES_TO_CHECK) {

   fclose (fpIn);

   exit (2);

   };

 if ( png_sig_cmp(sigBuf, (png_size_t)0, PNG_BYTES_TO_CHECK) ) {

   fclose (fpIn);

   exit (3);

   };

 png_read_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);

 if (png_read_ptr == NULL) {

   fclose(fpIn);

   exit (2);

   };

 info_read_ptr = png_create_info_struct(png_read_ptr);

 if (info_read_ptr == NULL) {

   fclose(fpIn);

   png_destroy_read_struct(&png_read_ptr, png_infopp_NULL, png_infopp_NULL);

   exit (3);

   };

 if ( setjmp( png_jmpbuf(png_read_ptr) ) ) {

   png_destroy_read_struct(&png_read_ptr, &info_read_ptr, png_infopp_NULL);

   fclose(fpIn);

   exit (4);

   };

 png_init_io(png_read_ptr, fpIn);

 png_set_sig_bytes(png_read_ptr, PNG_BYTES_TO_CHECK);

 png_read_png(png_read_ptr, info_read_ptr, PNG_TRANSFORM_IDENTITY, png_voidp_NULL);

 fclose(fpIn);

 png_get_IHDR(png_read_ptr, info_read_ptr, &width, &height, &bit_depth,

&color_type, &interlace_type, &compression_type, &filter_method);

 if (color_type != 0) {

   exit (11);

   };

 if (bit_depth != 8) {

   exit (11);

   };

 row_pointers = png_get_rows (png_read_ptr, info_read_ptr);

/*

int i=0;

 for (row = 0; row < height; row++) {

   for (col = 0; col < width; col++) { i++;

      printf("r %d i %d",row_pointers[row][col],i);

      //row_pointers[row][col] ^= 0xFF;

     };

   };

*/

// mas=calloc(height*width,sizeof(int));

  *n=0;

rown=0;

while (rown<height)

 {

   coln=0;

   while (coln<width)

   {

    for  (row=rown;row<N_nu+rown;row++)

    {

     for (col=coln;col<N_h+coln;col++)

      {

       mas[*n] = row_pointers[row][col] ;

       //printf("%f i %d ", mas[*n], *n);

       *n +=1;

      }

    }

    coln +=N_h;

   }

  rown +=N_nu;

 }

printf("n %d", *n);

}

void podsch_g(int i)

{

 int k;

 g[i]=0;

 for(k=0; k<N_nu*N_h; k++)

 g[i]+=x[k]*w1[i][k];

}

void podsch_h(int i)

{

int k;

h[i]=0;

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

h[i]+=g[k]*w2[i][k];

}

void dekom(double *per, int *k)

{

 void readf_fom(char *fname, double *mas, int *n);

 void podsch_g(int i);

 int i, j, n, kol;

 readf_fom(f_rab, mas, &n);

kol=0;  *k=0;

while(kol<n)

{

 for (i=0;i<N_nu*N_h;i++)

  {

   x[i] = mas[kol+i];

  }

  kol += N_nu*N_h;

  fprintf(fp,"Nomer kadra %d:\n", kol/N_nu/N_h);

   for (j=0; j<N_nu*N_h; j++)

    {

     fprintf(fp," % 10.4f\n",x[j]);

    }

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

  {

   podsch_g(i);

   per[*k]=g[i];

   *k=*k+1;

  }

  fprintf(fp,"Posle sjatiya:\n");

   for (j=0; j<L; j ++)

    {

     fprintf(fp," % 10.4f\n",g[j]);

    }

}

}

void decompres(double *per, int k)

{

void write_rez( char *fname, double *rez, int kol);

void podsch_h(int i);

double rez[65550];

int kadr, i, j, kol;

kadr = k/L;

kol=0;

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

  {

   for (j=0; j<L; j++)

    {

     g[j]=per[i*L+j];

    }

 //  fprintf(fp,"i %d:\n", i+1);

   for (j=0; j<L; j++)

    {

     fprintf(fp," % 10.4f\n",g[j]);

    }

   for (j=0;j<N_nu*N_h;j++)

    {

     podsch_h(j);

  h[j]=(int)(h[j]+0.5);

  if (h[j]>256) h[j]=256;

  if (h[j]<0) h[j]=0;

     rez[kol]=h[j];

     kol++;

    }

   fprintf(fp,"h :\n");

   for (j=0; j<N_nu*N_h; j++)

    {

     fprintf(fp," % 10.4f\n",h[j]);

    }

  }

write_rez(f_rez, rez, kol);

}

void write_rez( char *fname, double *rez, int kol)

{

int coln, rown, k=0;

rown=0;

while (rown<height)

 {

   coln=0;

   while (coln<width)

   {

    for  (row=rown;row<N_nu+rown;row++)

    {

     for (col=coln;col<N_h+coln;col++)

      {

       if (k<kol)row_pointers[row][col] = rez[k++];

        // printf("r %d k %d",row_pointers[row][col], k);

      }

    }

    coln +=N_h;

   }

  rown +=N_nu;

 }

 fpOut = fopen(fname,"wb");

/*  if (argc > 2) {

   if ((fpOut = fopen(argv[2], "w")) == NULL) {

     perror (argv[2]);

     exit (5);

     };

   };*/

 png_write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);

 if (png_write_ptr == NULL) {

   fclose(fpOut);

   exit (6);

   };

 info_write_ptr = png_create_info_struct(png_write_ptr);

 if (info_write_ptr == NULL) {

   fclose(fpOut);

   png_destroy_write_struct(&png_write_ptr,  png_infopp_NULL);

   exit (7);

   };

 if ( setjmp (png_jmpbuf(png_write_ptr) ) ) {

   fclose(fpOut);

   png_destroy_write_struct(&png_write_ptr, &info_write_ptr);

   exit (8);

   };

 png_set_IHDR(png_write_ptr, info_write_ptr, width, height, bit_depth,

color_type, interlace_type, compression_type, filter_method);

 png_set_rows (png_write_ptr, info_write_ptr, row_pointers);

 png_init_io(png_write_ptr, fpOut);

 png_write_png(png_write_ptr, info_write_ptr, PNG_TRANSFORM_IDENTITY, NULL);

  printf("test11");

 png_destroy_read_struct(&png_read_ptr, &info_read_ptr, png_infopp_NULL);

 fclose(fpOut);

  printf("test9");

 exit (0);

}

void r_kadr(int kadr, double *mas, double *mx, double *mg, double *mh)

{

int i;

  for (i=0;i<N_nu*N_h;i++)

    {

     x[i] = mas[(kadr-1)*N_nu*N_h+i];

     mx[i] = x[i];

    }

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

  {

    podsch_g(i);

    mg[i] = g[i];

  }

  for (i=0;i<N_nu*N_h;i++)

  {

    podsch_h(i);

    mh[i] = h[i];

}

}


 

А также другие работы, которые могут Вас заинтересовать

19158. Основные конструктивные схемы гелиевых криостатов 414.5 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 5 Основные конструктивные схемы гелиевых криостатов 1. Гелиевые криостаты с азотным объемом Основные конструктивные схемы гелиевых криостатов с азотным объемом. приведены на рис. 1.1. Схема криостата изображе
19159. Основные способы получения промежуточных температур 1.44 MB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 67 Основные способы получения промежуточных температур Весь диапазон промежуточных температур т.е. температур отличных от температуры кипения жидкого гелия при атмосферном давлении Т = 42 К по способу достиж...
19160. Низкотемпературные вставки в транспортные гелиевые и азотные сосуды дьюара 219 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 8 Низкотемпературные вставки в транспортные гелиевые и азотные сосуды дьюара Особую роль в низкотемпературных криогенных устройствах играют вставки в транспортные сосуды Дьюара. Несомненным преимуществом таки...
19161. Неразборные соединения конструкций 101 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 910 Неразборные соединения конструкций Конструкционные материалы Для правильного конструирования низкотемпературных устройств необходимо принимать во внимание свойства материалов которые применяются в криог...
19162. Разборные соединения конструкций 1.07 MB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 11 12 Разборные соединения конструкций В разборных вакуумных соединениях необходимо обеспечить герметичность стыка двух соединяемых деталей близкую к герметичности сплошного материала. В месте соприкосновения д
19163. Отдельные узлы низкотемпературных устройств 120.5 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекции 13 14 Отдельные узлы низкотемпературных устройств 13.1. Гелиевая емкость Гелиевая емкость рис. 13.1 является одним из основных узлов гелиевого криостата и состоит из трубки подвеса 1 крышки 2 обечайки 3 днища 4. Все
19164. Компактные криорефрижераторы 615 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 15 Компактные криорефрижераторы В последнее время для получения низких температур все чаще стали использоваться компактные криорефрижераторы криокулеры. Основное преимущество этих устройств заключается в от
19165. Элементы вакуумной техники 714 KB
  ОСНОВЫ КОНСТРУИРОВАНИЯ КРИОГЕННЫХ УСТРОЙСТВ Лекция 15 Элементы вакуумной техники Теплоизоляция криостатов как и всех систем предназначенных для работы с жидким гелием осуществляется вакуумированием сосудов. Поэтому разрабатываемые конструкции должны удовлетво
19166. Введение. Технологичность конструкции 1.43 MB
  Лекция №1 Введение. Технологичность конструкции Технология искусство мастерство умение логия совокупность методов обработки изготовления изменения состояния свойств формы сырья материалов или полуфабриката осуществляемых в процессе производства проду