Changeset 508 in Sophya for trunk/SophyaLib/NTools/difeq.h
- Timestamp:
- Oct 25, 1999, 12:36:22 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SophyaLib/NTools/difeq.h
r307 r508 28 28 29 29 // Calcule les valeurs des derivees fpi a partir des valeurs des fonctions fi 30 virtual void ComputeV( Vector& fpi,Vector const& fi)30 virtual void ComputeV(OVector& fpi, OVector const& fi) 31 31 { Compute(fpi(0), fi(0)); } 32 32 … … 44 44 // Pour ajuster vecteur de depart quand il y a des fonctions a usage 45 45 // interne... 46 virtual void AdjustStart( Vector& /*start*/, double /*tstart*/)46 virtual void AdjustStart(OVector& /*start*/, double /*tstart*/) 47 47 {} 48 48 protected: … … 87 87 // Implementation de Compute qui va utiliser la fonction fournie 88 88 // au constructeur. 89 virtual void ComputeV( Vector& fpi,Vector const& fi);89 virtual void ComputeV(OVector& fpi, OVector const& fi); 90 90 91 91 // Implementation de AdjustStart qui gere la fonction a usage interne. 92 virtual void AdjustStart( Vector& start, double tstart);92 virtual void AdjustStart(OVector& start, double tstart); 93 93 protected: 94 94 DIFEQFCNT1 mFcn; … … 102 102 DiffEqFcn2(DIFEQFCN2); 103 103 104 virtual void ComputeV( Vector& fpi,Vector const& fi);104 virtual void ComputeV(OVector& fpi, OVector const& fi); 105 105 protected: 106 106 DIFEQFCN2 mFcn; … … 121 121 // Implementation de Compute qui va utiliser la fonction fournie 122 122 // au constructeur. 123 virtual void ComputeV( Vector& fpi,Vector const& fi);123 virtual void ComputeV(OVector& fpi, OVector const& fi); 124 124 125 125 // Implementation de AdjustStart qui gere la fonction a usage interne. 126 virtual void AdjustStart( Vector& start, double tstart);126 virtual void AdjustStart(OVector& start, double tstart); 127 127 protected: 128 128 DIFEQFCNT2 mFcn; … … 130 130 131 131 // Cas y'' = f(y',y) avec des 3-vecteurs 132 typedef void(*DIFEQFCNV)( Vector&, Vector const&,Vector const&);132 typedef void(*DIFEQFCNV)(OVector&, OVector const&, OVector const&); 133 133 134 134 // <summary> y'' = f(y',y,t) </summary> 135 135 // Cas y'' = f(y',y,t), on fournit la fonction f, sous la forme 136 // double f( Vector), et ca construit la bonne DiffEqFunction136 // double f(OVector), et ca construit la bonne DiffEqFunction 137 137 class DiffEqFcnV : public DiffEqFunction { 138 138 public: 139 // Constructeur, on fournit une fonction ( Vector)->double139 // Constructeur, on fournit une fonction (OVector)->double 140 140 // qui donne y'' en fonction du vecteur (t, y, y') 141 141 DiffEqFcnV(DIFEQFCNV); … … 143 143 // Implementation de Compute qui va utiliser la fonction fournie 144 144 // au constructeur. 145 virtual void ComputeV( Vector& fpi,Vector const& fi);145 virtual void ComputeV(OVector& fpi, OVector const& fi); 146 146 protected: 147 147 DIFEQFCNV mFcn; 148 Vector tmp1, tmp2, tmp3;148 OVector tmp1, tmp2, tmp3; 149 149 }; 150 150 … … 176 176 // Change les conditions initiales. Notation chainee possible. 177 177 // <group> 178 DiffEqSolver& StartV( Vector const& yi, double t);178 DiffEqSolver& StartV(OVector const& yi, double t); 179 179 // si NFunc == 1 180 180 DiffEqSolver& Start1(double yi, double t); … … 184 184 // Lance la resolution, avec ou sans conservation de n valeurs intermediaires 185 185 // <group> 186 virtual void SolveV( Vector& yf, double tf);186 virtual void SolveV(OVector& yf, double tf); 187 187 // si NFunc == 1 188 188 virtual void Solve1(double& yf, double tf); 189 189 virtual void Solve(double* yf, double tf); 190 virtual void SolveArr( Matrix& y, double* t, double tf, int n)=0;190 virtual void SolveArr(OMatrix& y, double* t, double tf, int n)=0; 191 191 // si NFunc == 1 192 192 virtual void SolveArr1(double* y, double* t, double tf, int n); … … 198 198 bool mOwnFunc; 199 199 200 Vector mYStart;200 OVector mYStart; 201 201 double mXStart; 202 202 double mStep; … … 215 215 216 216 // Implementation de RK4 217 virtual void SolveArr( Matrix& y, double* t, double tf, int n);217 virtual void SolveArr(OMatrix& y, double* t, double tf, int n); 218 218 219 219 protected: 220 220 // Un pas RK4 221 void RKStep( Vector& newY,Vector const& y0, double dt);221 void RKStep(OVector& newY, OVector const& y0, double dt); 222 222 // Vecteurs utilises en interne, pour ne pas les reallouer. 223 Vector k1, k2, k3, k4;223 OVector k1, k2, k3, k4; 224 224 }; 225 225
Note:
See TracChangeset
for help on using the changeset viewer.