#include <stdio.h>
#include <math.h>
//#define Pi 3.14159265358979312



       /////////////////////////
      //                     //
     //  МОДЕЛИРОВАНИЕ_0.c  //
    //                     //  
   /////////////////////////


double Pi = 3.14159265358979312;


void Calc_Step_Appr(int Order_Appr, double C[2][2],        double Delta_t, 
			        double d_Alfa_dt_Inp,  double d_Beta_dt_Inp, 
			        double Alfa_Inp,       double Beta_Inp,  
			        double *d_Alfa_dt_Out, double *d_Beta_dt_Out,  
			        double *Alfa_Out,      double *Beta_Out)


  {

   double d_Alfa_dt, d2_Alfa_dt2, d3_Alfa_dt3, d4_Alfa_dt4, d5_Alfa_dt5, 	   
	      d6_Alfa_dt6, d7_Alfa_dt7, d8_Alfa_dt8, d9_Alfa_dt9,

	      d_Beta_dt, d2_Beta_dt2, d3_Beta_dt3, d4_Beta_dt4, d5_Beta_dt5,		  
		  d6_Beta_dt6,  d7_Beta_dt7,  d8_Beta_dt8,  d9_Beta_dt9;
 
// ФОРМИРОВАНИЕ СТЕПЕННОГО РЯДА 

   double t_1 = Delta_t, t_2 = t_1 * t_1, t_3 = t_2 * t_1,  t_4 = t_3 * t_1,  t_5 = t_4 * t_1,
	   
	      t_6 = t_5 * t_1, t_7 = t_6 * t_1, t_8 = t_7 * t_1, t_9 = t_8 * t_1; 

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ВТОРЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПО ТОЧНЫМ УРАВНЕНИМ СВЯЗИ 

   d_Alfa_dt = d_Alfa_dt_Inp;   d_Beta_dt = d_Beta_dt_Inp; 

   d2_Alfa_dt2 = C[0][0] * d_Beta_dt + C[0][1]; 

   d2_Beta_dt2 = C[1][0] * d_Alfa_dt + C[1][1];

  
// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ТРЕТЬИХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d3_Alfa_dt3 = C[0][0] * d2_Beta_dt2;
   d3_Beta_dt3 = C[1][0] * d2_Alfa_dt2;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ЧЕТВЕРТЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d4_Alfa_dt4 = C[0][0] * d3_Beta_dt3;
   d4_Beta_dt4 = C[1][0] * d3_Alfa_dt3;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ПЯТЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d5_Alfa_dt5 = C[0][0] * d4_Beta_dt4;
   d5_Beta_dt5 = C[1][0] * d4_Alfa_dt4;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ШЕСТЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d6_Alfa_dt6 = C[0][0] * d5_Beta_dt5;
   d6_Beta_dt6 = C[1][0] * d5_Alfa_dt5;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ СЕДЬМЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d7_Alfa_dt7 = C[0][0] * d6_Beta_dt6;
   d7_Beta_dt7 = C[1][0] * d6_Alfa_dt6;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ВОСЬМЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d8_Alfa_dt8 = C[0][0] * d7_Beta_dt7;
   d8_Beta_dt8 = C[1][0] * d7_Alfa_dt7;

// ФОРМИРОВАНИЕ ЧИСЛЕННЫХ ЗНАЧЕНИЙ ДЕВЯТЫХ ПРОИЗВОДНЫХ В НАЧАЛЕ ШАГА ПУТЕМ ДИФФЕРЕНЦИРОВАНИЯ  
   d9_Alfa_dt9 = C[0][0] * d8_Beta_dt8;
   d9_Beta_dt9 = C[1][0] * d8_Alfa_dt8;


// РАЗЛОЖЕНИЕ ВТОРЫХ ПРОИЗВОДНЫХ В РЯД ТЕЙЛОРА 

// d2_Alfa_dt2(t) = d2_Alfa_dt2 + d3_Alfa_dt3 * t1/1! + d4_Alfa_dt4 * t2/2! + d5_Alfa_dt5 * t3/3!  
// d2_Beta_dt2(t) = d2_Beta_dt2 + d3_Beta_dt3 * t1/1! + d4_Beta_dt4 * t2/2! + d5_Beta_dt5 * t3/3!  


 // ПЕРВЫЕ ПРОИЗВОДНЫЕ ЭТО ИНТЕГРАЛ ОТ ВТОРЫХ ПРОИЗВОДНЫХ НА ШАГЕ - Delta_t  

// d_Alfa_dt = Int(d2_Alfa_dt2(t))dt  И  d_Beta_dt = Int(d2_Beta_dt2(t))dt
 
// ИНТЕГРИРУЯ ПРЕДЫДУЩЕЕ ВЫРАЖЕНИЕ ПОЛУЧАЕМ В ПРЕДЕЛАХ ОТ НОЛЯ ДО Delta_t ПОЛУЧАЕМ 


  if(Order_Appr >=2) 
    {
     *d_Alfa_dt_Out =  d_Alfa_dt_Inp + d2_Alfa_dt2 * t_1;
     *d_Beta_dt_Out =  d_Beta_dt_Inp + d2_Beta_dt2 * t_1;
     *Alfa_Out      =  Alfa_Inp + d_Alfa_dt_Inp * t_1 + d2_Alfa_dt2 * t_2/2.;
     *Beta_Out      =  Beta_Inp + d_Beta_dt_Inp * t_1 + d2_Beta_dt2 * t_2/2.;
    }
  if(Order_Appr >=3) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d3_Alfa_dt3 * t_2/2.;
     *d_Beta_dt_Out = *d_Beta_dt_Out + d3_Beta_dt3 * t_2/2.;
     *Alfa_Out = *Alfa_Out + d3_Alfa_dt3 * t_3/6.;
     *Beta_Out = *Beta_Out + d3_Beta_dt3 * t_3/6.;
    }
  if(Order_Appr >=4) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d4_Alfa_dt4 * t_3/6.;
     *d_Beta_dt_Out = *d_Beta_dt_Out + d4_Beta_dt4 * t_3/6.;
     *Alfa_Out = *Alfa_Out + d4_Alfa_dt4 * t_4/24.;   
     *Beta_Out = *Beta_Out + d4_Beta_dt4 * t_4/24.;
    }
  if(Order_Appr >=5) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d5_Alfa_dt5 * t_4/24.;    
     *d_Beta_dt_Out = *d_Beta_dt_Out + d5_Beta_dt5 * t_4/24.; 
     *Alfa_Out = *Alfa_Out + d5_Alfa_dt5 * t_5/120.;
     *Beta_Out = *Beta_Out + d5_Beta_dt5 * t_5/120.;
    }
  if(Order_Appr >=6) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d6_Alfa_dt6 * t_5/120.;    
     *d_Beta_dt_Out = *d_Beta_dt_Out + d6_Beta_dt6 * t_5/120.; 
     *Alfa_Out = *Alfa_Out + d6_Alfa_dt6 * t_6/720.;
     *Beta_Out = *Beta_Out + d6_Beta_dt6 * t_6/720.;
    }
  if(Order_Appr >=7) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d7_Alfa_dt7 * t_6/720.;    
     *d_Beta_dt_Out = *d_Beta_dt_Out + d7_Beta_dt7 * t_6/720.;
     *Alfa_Out = *Alfa_Out + d7_Alfa_dt7 * t_7/5040.;
     *Beta_Out = *Beta_Out + d7_Beta_dt7 * t_7/5040.;
    }
  if(Order_Appr >=8) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d8_Alfa_dt8 * t_7/5040.;    
     *d_Beta_dt_Out = *d_Beta_dt_Out + d8_Beta_dt8 * t_7/5040.;
     *Alfa_Out = *Alfa_Out + d8_Alfa_dt8 * t_8/40320.;
     *Beta_Out = *Beta_Out + d8_Beta_dt8 * t_8/40320.;
    }
  if(Order_Appr ==9) 
    {
     *d_Alfa_dt_Out = *d_Alfa_dt_Out + d9_Alfa_dt9 * t_8/40320.;    
     *d_Beta_dt_Out = *d_Beta_dt_Out + d9_Beta_dt9 * t_8/40320.; 
     *Alfa_Out = *Alfa_Out + d9_Alfa_dt9 * t_9/362880.;
     *Beta_Out = *Beta_Out + d9_Beta_dt9 * t_9/362880.;
    } 


// И НАКОНЕЦ ВЫХОДНЫЕ ВЕЛИЧИНЫ ЭТО ИНТЕГРАЛ ОТ ПЕРВЫХ ПРОИЗВОДНЫХ НА ШАГЕ - Delta_t  

// Alfa = Int(d_Alfa_dt(t))dt  И  Beta = Int(d_Beta_dt(t))dt   
   
  }




void Calc_Step_Corr(double A0, double B0, double H, double Beta0, double d_Alfa_dt_Inp_0, 
					double d_Beta_dt_Inp_0,  int Step_Int, double Delta_t, 
					double *Alfa_Out_Corr, double *Beta_Out_Corr)
  {
   double Lmbd = (H * cos(Beta0))/sqrt(A0 * B0);
   double T_Inp = (double)(Step_Int) * Delta_t;
   *Alfa_Out_Corr = (d_Beta_dt_Inp_0/Lmbd) * sqrt(B0/A0) * (cos(Lmbd * T_Inp) -1.);
   *Alfa_Out_Corr = *Alfa_Out_Corr + (d_Alfa_dt_Inp_0/Lmbd) * sin(Lmbd * T_Inp);   
   *Beta_Out_Corr = (d_Alfa_dt_Inp_0/Lmbd) * sqrt(A0/B0) * (1. - cos(Lmbd * T_Inp));
   *Beta_Out_Corr  = *Beta_Out_Corr + (d_Beta_dt_Inp_0/Lmbd) * sin(Lmbd * T_Inp);
  }




void main()

{

 int i, Step_Int, Order_Appr, Lim_Step_Int;   
 
 
// ВХОДНЫЕ ВЕЛИЧИНЫ, КОТОРЫЕ ЗАДАЮТСЯ.

 double A_Plus_A1,  A_Plus_B1,  C1,  A2, Beta0, H, L_Ksi, L_Gamma, Divisor;


// ВЫЧИСЛЯЕМЫЕ ВЕЛИЧИНЫ

 
 double Cos_Beta0_Pow_2, Sin_Beta0_Pow_2, A0, B0;


// ВЫХОДНЫЕ ВЕЛИЧИНЫ
  
 double C00, C01,   C10, C11;


 double C[2][2], Delta_t, d_Alfa_dt_Inp, d_Beta_dt_Inp, Alfa_Inp, Alfa_Inp_Aprr, Beta_Inp,  
			     d_Alfa_dt_Out,  d_Beta_dt_Out,  Alfa_Out,  Beta_Out;
 
 double d_Alfa_dt_Inp_0,  d_Beta_dt_Inp_0, Alfa_Out_Corr, Beta_Out_Corr, Mist_Abs_Alfa, 
	    Beta_Inp_Aprr, Mist_Abs_Beta;


 double Accum_Square_Alfa, Accum_Square_Beta, Ampl_Alfa_Effectiv, Ampl_Beta_Effectiv;

 double Accum_Square_Mist_Alfa, Accum_Square_Mist_Beta, Mist_Square_Alfa_Abs, Mist_Square_Beta_Abs, 
	 
	     Mist_Square_Alfa_Rel, Mist_Square_Beta_Rel;

 double Alfa_Inp_Serv,  Beta_Inp_Serv,   d_Alfa_dt_Inp_Serv,  d_Beta_dt_Inp_Serv;



// ЗАДАНИЕ ВХОДНЫХ ВЕЛИЧИН (НАПРИМЕР, ВТОРОЙ ВАРИАНТ)
 
 A_Plus_A1 = 6.2;  A_Plus_B1 = 6.2;  C1 = 2.;  A2 = 3.;  H = 1200.;
 
 Beta0 = 15.*(Pi/180.);    
 
 L_Ksi = 0.000;  L_Gamma = 0.000;


// ВЫЧИСЛЕНИЕ ПРОМЕЖУТОЧНЫХ ВЕЛИЧИН


 Cos_Beta0_Pow_2 = pow(cos(Beta0),2.);  Sin_Beta0_Pow_2 = pow(sin(Beta0),2.);

 A0 = A_Plus_A1 * Cos_Beta0_Pow_2 + C1 * Sin_Beta0_Pow_2 + A2;

 B0 = A_Plus_B1;

 C00 = (- H * cos(Beta0))/A0;    
 
 C01 = L_Ksi/A0;

 C10 =   (H * cos(Beta0))/B0;    
 
 C11 = L_Gamma/B0;
 
// ВЫВОД НА ПЕЧАТЬ ПРОМЕЖУТОЧНЫХ ВЕЛИЧИН


 C[0][0] = C00;   C[0][1] = C01;
 C[1][0] = C10;   C[1][1] = C11;

 Delta_t = 1./(8.*256.);   

 // ЗАДАНИЕ НАЧАЛЬНЫХ УСЛОВИЙ 
 



 Alfa_Inp_Serv = 0.;  Beta_Inp_Serv = 0.;  d_Alfa_dt_Inp_Serv = 73.;  d_Beta_dt_Inp_Serv = -32.;


 

 printf ("\n");
 printf ("\n TEST MODELIR");
 printf ("\n");

 //Order_Appr = 9;

 //printf ("\n Order_Appr =  %1u", Order_Appr);
 
 printf ("\n");
 printf ("\n");
 printf ("\n");


Lim_Step_Int = 16;


for(Order_Appr = 2; Order_Appr < 10; Order_Appr++) 

  {
  
   Accum_Square_Alfa = 0.; Accum_Square_Beta = 0.; Accum_Square_Mist_Alfa = 0.; Accum_Square_Mist_Beta = 0.;

   Alfa_Inp = Alfa_Inp_Serv;  Beta_Inp = Beta_Inp_Serv;  
   
   d_Alfa_dt_Inp = d_Alfa_dt_Inp_Serv; d_Beta_dt_Inp = d_Beta_dt_Inp_Serv;

   d_Alfa_dt_Inp_0 = d_Alfa_dt_Inp;  
   d_Beta_dt_Inp_0 = d_Beta_dt_Inp; 


   for(Step_Int = 0; Step_Int < Lim_Step_Int; Step_Int++)
     {


      Calc_Step_Corr(A0, B0, H, Beta0, d_Alfa_dt_Inp_0,  d_Beta_dt_Inp_0, Step_Int,  Delta_t, 
		           &Alfa_Out_Corr, &Beta_Out_Corr);

      Alfa_Inp_Aprr = Alfa_Inp;  Beta_Inp_Aprr = Beta_Inp;   

//    printf ("\n Alfa_Inp_Aprr =  %13.12f:", Alfa_Inp_Aprr);
//    printf ("\n");
//    printf ("\n Beta_Inp =  %13.12f:", Beta_Inp);
//    printf ("\n");

	  Mist_Abs_Alfa = Alfa_Inp_Aprr - Alfa_Out_Corr;
	  Mist_Abs_Beta = Beta_Inp_Aprr - Beta_Out_Corr;

	  Accum_Square_Mist_Alfa = Accum_Square_Mist_Alfa + Mist_Abs_Alfa * Mist_Abs_Alfa;	
	  Accum_Square_Mist_Beta = Accum_Square_Mist_Beta  + Mist_Abs_Beta * Mist_Abs_Beta;


//    printf ("\n Mist_Abs_Alfa =  %13.12f:", Mist_Abs_Alfa);
//    printf ("\n");
//    printf ("\n Mist_Beta =  %13.12f:", Mist_Abs_Beta);
//    printf ("\n");


      Calc_Step_Appr(Order_Appr, C, Delta_t, d_Alfa_dt_Inp, d_Beta_dt_Inp, Alfa_Inp, Beta_Inp,  
			        &d_Alfa_dt_Out,  &d_Beta_dt_Out,  &Alfa_Out,  &Beta_Out);

	  d_Alfa_dt_Inp = d_Alfa_dt_Out;   Alfa_Inp = Alfa_Out;
	  d_Beta_dt_Inp = d_Beta_dt_Out;   Beta_Inp = Beta_Out;


//    printf ("\n Alfa_Out_Corr =  %13.12f:", Alfa_Out_Corr);
//   printf ("\n Beta_Out_Corr =  %13.12f:", Beta_Out_Corr);
//   printf ("\n");
//    printf ("\n");

	  Accum_Square_Alfa = Accum_Square_Alfa + Alfa_Out_Corr * Alfa_Out_Corr;
	  Accum_Square_Beta = Accum_Square_Beta + Beta_Out_Corr * Beta_Out_Corr;

     }

 


   Divisor = (double)(Lim_Step_Int);

   Ampl_Alfa_Effectiv = sqrt(Accum_Square_Alfa/Divisor);
   Ampl_Beta_Effectiv = sqrt(Accum_Square_Beta/Divisor);

   Mist_Square_Alfa_Abs = sqrt(Accum_Square_Mist_Alfa/Divisor);
   Mist_Square_Beta_Abs = sqrt(Accum_Square_Mist_Beta/Divisor);

   Mist_Square_Alfa_Rel = Mist_Square_Alfa_Abs/Ampl_Alfa_Effectiv;
   Mist_Square_Beta_Rel = Mist_Square_Beta_Abs/Ampl_Beta_Effectiv;


//   printf ("\n");
//   printf ("\n");
   printf ("\n Order_Appr =  %2u", Order_Appr);
//   printf ("\n");
//   printf ("\n");
//   printf ("\n Mist_Square_Alfa_Abs =  %19.18f", Mist_Square_Alfa_Abs);
//   printf ("\n");
//   printf ("\n Mist_Square_Beta_Abs =  %19.18f", Mist_Square_Beta_Abs);
//   printf ("\n");
//   printf ("\n");
//   printf ("\n");
   printf ("\n Mist_Square_Alfa_Rel =  %19.18f", Mist_Square_Alfa_Rel);
//   printf ("\n");
//   printf ("\n");
   printf ("\n Mist_Square_Beta_Rel =  %19.18f", Mist_Square_Beta_Rel);
   printf ("\n");
   printf ("\n");
  }

  


}






/*


 printf ("\n");
 printf ("\n PRINT TEST VALUE");
 printf ("\n");
 printf ("\n A0 =  %13.12f", A0);
 printf ("\n");
 printf ("\n B0 =  %13.12f", B0);
 printf ("\n");
 printf ("\n H  =  %13.12f", H);
 printf ("\n");

 printf ("\n L_Ksi    =  %13.12f", L_Ksi);
 printf ("\n");
 printf ("\n L_Gamma  =  %13.12f", L_Gamma);
 printf ("\n");
 printf ("\n");
 printf ("\n");
 printf ("\n");



// ВЫВОД НА ПЕЧАТЬ ВЫХОДНЫХ ВЕЛИЧИН

 printf ("\n");
 printf ("\n PRINT OUTPUT VALUE");
 printf ("\n");
 printf ("\n C00 :=  %13.12f:", C00);
 printf ("\n");
 printf ("\n C01 :=  %13.12f:", C01);
 printf ("\n");
 printf ("\n");
 printf ("\n C10 :=  %13.12f:", C10);
 printf ("\n");
 printf ("\n C11 :=  %13.12f:", C11);
 printf ("\n");
 printf ("\n");
 printf ("\n");


alpha[0]

  A0

c00 := 12; c01 := -3; c10 := -7; c11 := 5; w0 := 23; e0 := 45; a0 := 24; b0 := -17; 

diff(a(t), t) = w(t), 

diff(w(t), t) = c00*e(t)+c10, 

diff(b(t), t) = e(t)


diff(e(t), t) = c10*w(t)+c11,  


  НЕОБХОДИМЫЕ ФОРМУЛЫ ДЛЯ РАСЧЕТА



  ЗАДАЮТСЯ ВЕЛИЧИНЫ 


  A_Plus_A1;  A_Plus_B1;  C1;  A2; Beta0; 
  
  Cos_Beta0_Pow_2 = pow(cos(Beta0),2.);

  Sin_Beta0_Pow_2 = pow(sin(Beta0),2.);

  A0 = A_Plus_A1 * Cos_Beta0_Pow_2  + C1 * Sin_Beta0_Pow_2 + A2;

  B0 = A_Plus_B1;  H;


  d2_Alfa_dt2 = C00 * d_Beta_dt + C01;
  d2_Beta_dt2 = C10 * d_Alfa_dt + C11;

  d3_Alfa_dt3 = C00 * d2_Beta_dt2;
  d3_Beta_dt3 = C10 * d2_Alfa_dt2;

  d4_Alfa_dt4 = C00 * d3_Beta_dt3;
  d4_Beta_dt4 = C10 * d3_Alfa_dt3;

  

  d_Alfa_dt, d2_Alfa_dt2, d3_Alfa_dt3, d4_Alfa_dt4,  d_Beta_dt, d2_Beta_dt2, d3_Beta_dt3, d4_Beta_dt4;



*/





























Соседние файлы в папке ПРОГРАММЫ_СИ_6
  • #
  • #
    02.04.20153.51 Кб16МОДЕЛИРОВАНИЕ_0.dsp
  • #
    02.04.2015555 б16МОДЕЛИРОВАНИЕ_0.dsw
  • #
    02.04.201533.79 Кб17МОДЕЛИРОВАНИЕ_0.ncb
  • #
    02.04.201548.64 Кб16МОДЕЛИРОВАНИЕ_0.opt
  • #
    02.04.20151.53 Кб16МОДЕЛИРОВАНИЕ_0.plg