#include
#include
#include
#include "sp.h"
FILE *output;
double par[NO_PAR]; // это массив параметров
void derivs(double ,double [],double []); // это функция с правыми частями
double cut_derivs(double , double []); // здесь условия для сечения Пуанкаре
// Здесь подключается файл с уравнениями иссл. системы,
// он содержит функции derivs и cut_derivs
#include "system.c"
//************** начало главной программы *************
int main(int sw){
int i, j, jk, k;
// определяем различные переменные, которые будут использованы при обращении
// к функциям SimPack
long int gsr_before=1,
gsr_clc=2500;
double t=1.0,
tmax,
*y,
*dydt,
eps,
step_size,
*expon;
// определение указателя на библиотеку
SimPack *sp;
// Таким образом отводится память под массивы SimPack-а
// SYS_DIM - размерность исследуемой системы (число переменных состояния)
// массив фазовых переменных
y = (double *)calloc(SYS_DIM,sizeof(double));
// массив производных (правых частей)
dydt = (double *)calloc(SYS_DIM,sizeof(double));
// массив под вычисление ляпуновских экспонент
expon = (double *)calloc (SYS_DIM,sizeof(double));
// Можно было и просто описать эти массивы, не обязательно
// явно выделять под них память
/***** Инициализация самого пакета и функции сечения Пуанкаре */
// model - имя функции с правыми частями, PREC - точность,
// 0.01 - начальный шаг интегрирования (Подробней)
sp = SPOpenSimPack(model, SYS_DIM, PREC,.001 );
// Задание сечения Пуанкаре, PEPS - точность его вычисления
//(Подробней)
SPSetCut(sp, cutfun,PEPS);
/** Интегрировать в течение времени установления PTRANSI **/
// Начальные и конечные значения переменных состояния - в y
//(Подробней)
SPIntegrate(sp,&t,t+PTRANSI,y);
/** Интегрирование на интервал t=0.1**/
SPIntegrate(sp,&t,t+.1,y);
/** освобождение памяти и закрытие SimPack **/
free(y); free(dydt); free(expon);
SPCloseSimPack(sp);
}
|