Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include <iostream>
- #include<cmath>
- #include <fstream>
- using namespace std;
- int n0 = 2;
- long double integer_sin(long double a, long double b) {
- return exp(b) - exp(a);
- }
- /*
- long double integer_root(long double a, long double b) {
- return (2 / 3)*(pow(b, (3 / 2))) - (2 / 3)(pow(a, (3 / 2)));
- }*/
- long double f(long double x) {
- return exp(x);
- }
- /*long double f(long double x) {
- return pow(x, 0.5);
- }*/
- /*long double fault_sin(long double x, long double a, long double b) {
- return integer_root(a, b) - x;
- }*/
- /*
- long double f(long double x) {
- return sin(3.14*x);
- }*/
- /*long double integer_sin(long double a, long double b) {
- return (-1 * (cos(3.14*b)) / 3.14) + (cos(3.14*a)) / 3.14;
- }
- */
- long double gauss3(long double a, long double b, int n) {
- long double h = (b - a) / (n);
- long double res = 0;
- double x[3] = {-0.77459667, 0, 0.7745967};
- long double c[3] = { 5.0 / 9.0, 8.0 / 9.0, 5.0 / 9.0 };
- long double t1, t2, t3;
- for (int i = 0; i < n; i++) {
- t1 = h * i + 0.5*h*(-0.7745966692414834) + 0.5*h + a, t2 = 0.5*h + i * h + a, t3 = 0.5*h*0.7745966692414834 + 0.5*h + i*h+a;
- res = res +(0.5*(b - a)*(1.0/n)*((5.0 / 9.0)*f(t1) + (8.0 / 9.0)*f(t2) + (5.0 / 9.0)*f(t3)));
- }
- return res;
- }
- long double simpson(long double a, long double b, int n) {
- long double h = (b - a) / n;
- long double res = 0;
- for (int i = 1; i <= n; i++) {
- res = res + (f(a + h * (i - 1)) + f(a + i * h) + 4 * f(a + h * i - h* 0.5));
- }
- return (h*res) / 6;
- }
- long double prm(long double a, long double b, int n) {
- long double h = (b - a) / n;
- long double y = a;
- long double res = 0;
- for (int i = 1; i <= n; i++) {
- res = res + f(a+(h*i-h*0.5));
- }
- return h * res;
- }
- long double fault_sin(long double x, long double a, long double b) {
- return integer_sin(a, b) - x;
- }
- long double int_runge_simp(long double a, long double b, int n) {
- long double res = 0, h;
- h = (b - a) / 2.0;
- for (double i = a; i < b; i = i + h) {
- res = res + simpson(i, i + h, n);
- }
- return simpson(a, b, n) + (4.0 / 3.0)*(res - simpson(a, b, n));
- }
- long double int_runge_tr(long double a, long double b, int n) {
- long double res = 0, h;
- h = (b - a) / 2.0;
- for (double i = a; i < b; i = i + h) {
- res = res + prm(i, i + h, n);
- }
- return prm(a, b, n) + (4.0 / 3.0)*(res - prm(a, b, n));
- }
- long double int_runge_gauss(long double a, long double b, int n) {
- long double res = 0, h;
- h = (b - a) / 2.0;
- for (double i = a; i < b; i = i + h) {
- res = res + gauss3(i, i + h, n);
- }
- return gauss3(a, b, n) + (4.0/ 3.0)*(res - gauss3(a, b, n));
- }
- long double rh_runge_simp_sin(long double a, long double b, int n) {
- return (abs(simpson(a, b, 2 * n) - simpson(a, b, n))) / 15;
- }
- //long double rh_runge_simp_sin(long double a, long double b, int n) {
- //return (abs(simpson(a,b, 2*n) - simpson(a, b, n)))/15;
- //}
- long double rh_runge_tr_sin(long double a, long double b, int n) {
- return (abs(prm(a, b, n * 2) - prm(a, b, n))) / 3;
- }
- long double rh_runge_g_sin(long double a, long double b, int n) {
- return (abs(gauss3(a, b, n * 2) - gauss3(a, b, n))) / 31;
- }
- long double log(long double a, long double b, long double n) {
- return log(abs((simpson(a,b, n)-simpson(a, b, 2*n))/(simpson(a, b, 2*n)-simpson(a,b, 4*n)))) / log(2);
- }
- long double log_pr(long double a, long double b, long double n) {
- return log(abs((prm(a, b, n) - prm(a, b, 2 * n)) / (prm(a, b, 2 * n) - prm(a, b, 4 * n)))) / log(2);
- }
- long double log_g(long double a, long double b, long double n) {
- return log(abs((gauss3(a, b, n) - gauss3(a, b, 2 * n)) / (gauss3(a, b, 2 * n) - gauss3(a, b, 4 * n)))) / log(2);
- }
- //long double log_RP(long double a, long double b, long double n) {
- // return log(abs((rh_runge_tr_sin(a, b, n) - rh_runge_tr_sin(a, b, 2 * n)) / (rh_runge_tr_sin(a, b, 2 * n) - rh_runge_tr_sin(a, b, 4 * n)))) / log(2);
- //}
- //
- //long double log_RS(long double a, long double b, long double n) {
- // return log(abs((int_runge_simp(a, b, n) - int_runge_simp(a, b, 2 * n)) / (int_runge_simp(a, b, 2 * n) - int_runge_simp(a, b, 4 * n)))) / log(2);
- //}
- //
- //long double log_RG(long double a, long double b, long double n) {
- // return log(abs((rh_runge_g_sin(a, b, n) - rh_runge_g_sin(a, b, 2 * n)) / (rh_runge_g_sin(a, b, 2 * n) - rh_runge_g_sin(a, b, 4 * n)))) / log(2);
- //}
- void writing_to_the_fail(ofstream &res, long double a, long double b) {
- res << setw(5) << "num" << setw(15) << "prm:" << setw(15) << "simpson:" << setw(15) << "Gauss:" << endl;
- int n;
- for (int i = 1; i <= 10; i++) {
- n = pow(n0, i);
- res << setw(5) << "F:" << setw(15) << fault_sin(prm(a, b, n), a, b) << setw(15) << fault_sin(simpson(a, b, n), a, b) << setw(15) << fault_sin(gauss3(a, b, n), a, b) << endl;
- }
- res << endl;
- for (int i = 1; i <= 10; i++) {
- n = pow(n0, i);
- res << setw(5) << "R:" << setw(15) << rh_runge_tr_sin(a, b, n) << setw(15) << rh_runge_simp_sin(a, b, n) << setw(15) << rh_runge_g_sin(a, b, n) << endl;
- }
- res << endl;
- for (int i = 1; i <= 10; i++) {
- n = pow(n0, i);
- res << setw(5) << "M:" << setw(15) << log_pr(a,b,n) << setw(15) << log(a,b,n) << setw(15) << log_g(a,b,n) << endl;
- }
- res << endl;
- for (int i = 1; i <= 10; i++) {
- n = pow(n0, i);
- res << setw(5) << "int_R" << setw(15) << int_runge_tr(a, b, n) << setw(15) << int_runge_simp(a, b, n) << setw(15) << int_runge_gauss(a, b, n) << endl;
- }
- res << endl;
- //for (int i = 1; i <= 10; i++) {
- // n = pow(n0, i);
- // res << setw(5) << "M:" << setw(15) << log_RP(a, b, n) << setw(15) << log_RS(a, b, n)<<setw(15) << log_RG(a, b, n) <<endl;
- //}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement