29.07.2011 - fundamental new
This commit is contained in:
20
pimath.cpp
20
pimath.cpp
@@ -155,7 +155,7 @@ void fft(complexd * x, int T, bool complement)
|
||||
}
|
||||
|
||||
|
||||
const char Solver::methods_desc[] = "Methods:\
|
||||
const char Solver::methods_desc[] = "b{Methods:}\
|
||||
\n -1 - Global settings\
|
||||
\n 01 - Eyler 1\
|
||||
\n 02 - Eyler 2\
|
||||
@@ -167,15 +167,15 @@ const char Solver::methods_desc[] = "Methods:\
|
||||
\n 34 - Polynomial Approximation 4\
|
||||
\n 35 - Polynomial Approximation 5";
|
||||
|
||||
Solver::Method Solver::method_global = Solver::AdamsBashfortMoulton_4;
|
||||
Solver::Method Solver::method_global = Solver::Eyler_2;
|
||||
|
||||
|
||||
void Solver::solve(double u, double h) {
|
||||
switch (method) {
|
||||
case Global:
|
||||
switch (method_global) {
|
||||
case Eyler1: solveEyler1(u, h); break;
|
||||
case Eyler2: solveEyler2(u, h); break;
|
||||
case Eyler_1: solveEyler1(u, h); break;
|
||||
case Eyler_2: solveEyler2(u, h); break;
|
||||
case RungeKutta_4: solveRK4(u, h); break;
|
||||
case AdamsBashfortMoulton_2: solveABM2(u, h); break;
|
||||
case AdamsBashfortMoulton_3: solveABM3(u, h); break;
|
||||
@@ -186,8 +186,8 @@ void Solver::solve(double u, double h) {
|
||||
case PolynomialApproximation_5: solvePA5(u, h); break;
|
||||
}
|
||||
break;
|
||||
case Eyler1: solveEyler1(u, h); break;
|
||||
case Eyler2: solveEyler2(u, h); break;
|
||||
case Eyler_1: solveEyler1(u, h); break;
|
||||
case Eyler_2: solveEyler2(u, h); break;
|
||||
case RungeKutta_4: solveRK4(u, h); break;
|
||||
case AdamsBashfortMoulton_2: solveABM2(u, h); break;
|
||||
case AdamsBashfortMoulton_3: solveABM3(u, h); break;
|
||||
@@ -273,12 +273,14 @@ void Solver::solveEyler2(double u, double h) {
|
||||
|
||||
|
||||
void Solver::solveRK4(double u, double h) {
|
||||
td = X[0] - F[0][0];
|
||||
k1 = A * X + d * u; xx = k1 * h / 2.; XX = X + xx;
|
||||
k2 = A * (XX + k1 * h / 2.) + d * (u + xx[0]); xx = k2 * h / 2.; XX += xx;
|
||||
k3 = A * (XX + k2 * h / 2.) + d * (u + xx[0]); xx = k3 * h; XX += xx;
|
||||
k4 = A * (XX + k3 * h) + d * (u + xx[0]);
|
||||
k2 = A * (XX + k1 * h / 2.) + d * (u + td/3.); xx = k2 * h / 2.; XX += xx;
|
||||
k3 = A * (XX + k2 * h / 2.) + d * (u + td*2./3.); xx = k3 * h; XX += xx;
|
||||
k4 = A * (XX + k3 * h) + d * (u + td);
|
||||
//cout << k1 << k2 << k3 << k4 << endl;
|
||||
X += (k1 + k2 * 2. + k3 * 2. + k4) * h / 6.;
|
||||
F[0] = X;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user