преобразовал в систему:
реализовал на C:
Код:
#include <stdio.h>
double a = 2.0;
double sigma = 0.2;
double f(double x, double u, double y) {
return -2*u*(x-a)/sigma-2*y/sigma;
}
double g(double x, double u, double y) {
return u;
}
int main() {
double yn = 0.1;
double ysn = -2.0;
double x = 0.0f;
double h = 1e-3;
double b = 0.5;
double k1,k2,k3,k4,q1,q2,q3,q4;
while (x <= b+h) {
k1 = f(x, ysn, yn)*h;
q1 = g(x, ysn, yn)*h;
k2 = f(x+h/2, ysn+k1/2, yn+q1/2)*h;
q2 = g(x+h/2, ysn+k1/2, yn+q1/2)*h;
k3 = f(x+h/2, ysn+k2/2, yn+q2/2)*h;
q3 = g(x+h/2, ysn+k2/2, yn+q2/2)*h;
k4 = f(x+h, ysn+k3, yn+q3)*h;
q4 = g(x+h, ysn+k3, yn+q3)*h;
ysn += (k1+2*k2+2*k3+k4)/6;
yn += (q1+2*q2+2*q3+q4)/6;
printf("%e\n",(k1+2*k2+2*k3+k4)/6-f(x, ysn, yn));
x += h;
}
return 0;
}
printf по идее должен выводить невязку:
Цитата:
4.176625e+01
4.256773e+01
4.338410e+01
4.421562e+01
4.506257e+01
4.592522e+01
4.680385e+01
4.769874e+01
4.861020e+01
4.953852e+01
5.048399e+01
5.144692e+01
5.242764e+01
5.342644e+01
........................
1.317720e+05
1.335851e+05
1.354217e+05
1.372820e+05
1.391664e+05
1.410750e+05
1.430083e+05
1.449664e+05
подскажите, где неверно? я уже не знаю где искать
