Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * deriv(порядок, точка) вычислить производную нужного порядка в точке
- * NOTE: производная первого порядке делится на 2*шаг, второго на шаг*шаг
- */
- double DetVal::deriv(int level, int point){
- switch(level){
- case 0:
- return series[point];
- case 1:
- return (series[point+1] - series[point-1])/2;
- case 2:
- return series[point-1] - 2*series[point] + series[point+1];
- case 3:
- return -0.5*series[point-2]+series[point-1]-series[point+1]+0.5*series[point+2];
- }
- }
- /*
- * Вычисление факториала числа
- */
- int fact(int a){
- int ret = 1;
- for(int i=1; i<a; i++) ret*=i;
- return ret;
- }
- /*
- * Моделирование разложением в ряд Тейлора
- */
- QVector<double> DetVal::Tailor(){
- QVector<double> ret(series.size());
- int a = series.size()/2; // ряд тейлора в окрестности точки a
- for(int x=0; x<series.size(); x++){
- std::cout<<"Вычисление модели в момент времени "<<x<<"\n";
- for(int k=0; k<ACCURACY; k++){
- double step = deriv(k, a)*pow( x-a, k )/(double)fact(k); //
- std::cout<<" +Элемент суммы "<<step<<"\n";
- ret[x] += step;
- }
- std::cout<<"Расчитанное значение: "<<ret[x]<<"\n";
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment