unvisibleman

Tailor series

Apr 27th, 2015
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. /*
  2.  * deriv(порядок, точка) вычислить производную нужного порядка в точке
  3.  * NOTE: производная первого порядке делится на 2*шаг, второго на шаг*шаг
  4.  */
  5. double DetVal::deriv(int level, int point){
  6.     switch(level){
  7.         case 0:
  8.             return series[point];
  9.         case 1:
  10.             return (series[point+1] - series[point-1])/2;
  11.         case 2:
  12.             return series[point-1] - 2*series[point] + series[point+1];
  13.         case 3:
  14.             return -0.5*series[point-2]+series[point-1]-series[point+1]+0.5*series[point+2];
  15.     }
  16. }
  17.  
  18. /*
  19.  * Вычисление факториала числа
  20.  */
  21. int fact(int a){
  22.     int ret = 1;
  23.     for(int i=1; i<a; i++) ret*=i;
  24.     return ret;
  25. }
  26.  
  27. /*
  28.  * Моделирование разложением в ряд Тейлора
  29.  */
  30. QVector<double> DetVal::Tailor(){
  31.     QVector<double> ret(series.size());
  32.     int a = series.size()/2; // ряд тейлора в окрестности точки a
  33.     for(int x=0; x<series.size(); x++){
  34.         std::cout<<"Вычисление модели в момент времени "<<x<<"\n";
  35.         for(int k=0; k<ACCURACY; k++){
  36.             double step = deriv(k, a)*pow( x-a, k )/(double)fact(k); //
  37.             std::cout<<" +Элемент суммы "<<step<<"\n";
  38.             ret[x] += step;
  39.         }
  40.         std::cout<<"Расчитанное значение: "<<ret[x]<<"\n";
  41.     }
  42.     return ret;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment