Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void realfunc(double &y1, double &y2, double x){
- double y10 = 1, y20 = 1;
- y1 = 0.5 * (y10+y20) * exp(x * (p1+p2)) + 0.5 * (y10-y20) * exp(x * (p1-p2));
- y2 = 0.5 * (y10+y20) * exp(x * (p1+p2)) - 0.5 * (y10-y20) * exp(x * (p1-p2));
- }
- double norm (double x1, double x2, double y1, double y2){
- return sqrt((x1-y1)*(x1-y1) + (x2-y2)*(x2-y2));
- }
- double mtrx_euler_1 (int n){
- dots = new double[n + 1];
- fill_dots(n);
- double *y1 = new double[n+1];
- double *y2 = new double[n+1];
- y1[0] = y2[0] = 1;
- double er = 0., t, y1o, y2o, h;
- for(int i = 1; i <= n; ++i){
- h = dots[i] - dots[i-1];
- y1[i] = y1[i-1] + h * (p1*y1[i-1] + p2*y2[i-1]);
- y2[i] = y2[i-1] + h * (p2*y1[i-1] + p1*y2[i-1]);
- realfunc(y1o, y2o, dots[i]);
- t = norm(y1[i], y2[i], y1o, y2o);
- if(t > er) er = t;
- }
- return er;
- }
- double mtrx_euler_2 (int n){
- dots = new double[n + 1];
- fill_dots(n);
- double *y1 = new double[n+1];
- double *y2 = new double[n+1];
- y1[0] = y2[0] = 1;
- double er = 0., t, y1o, y2o, h;
- for(int i = 1; i <= n; ++i){
- h = dots[i] - dots[i-1];
- y1[i] = ((1-h*p1) * y1[i-1] + h*p2*y2[i-1]) / ((1-h*p1)*(1-h*p1) - h*h*p2*p2);
- y2[i] = ((1-h*p1) * y2[i-1] + h*p2*y1[i-1]) / ((1-h*p1)*(1-h*p1) - h*h*p2*p2);
- realfunc(y1o, y2o, dots[i]);
- t = norm(y1[i], y2[i], y1o, y2o);
- if(t > er) er = t;
- }
- return er;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement