Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdlib.h"
- #include "stdio.h"
- #include "math.h"
- double f(double x);
- double g1(double x);
- double g2(double x);
- double g4(double x);
- const double eps = 0.001;
- const double a = 0.0;
- const double b = 1.0;
- int main(int argc, char **argv) {
- double m1 = max(fabs(g1(a)), fabs(g1(b)));
- double m2 = max(fabs(g2(a)), fabs(g2(b)));
- double m4 = max(fabs(g4(a)), fabs(g4(b)));
- // Средние прямоугольники
- int n = round((b - a) / sqrt(eps * 24.0 / (m2 * (b - a))));
- double step = (b - a) / n;
- double s = 0;
- for (double x = a + step/2; x < b; x += step)
- s += f(x) * step;
- printf("А>> %f\n\n", s);
- // Левые прямоугольники
- n = round(m1*(b - a)*(b - a)/(2 * eps));
- step = (b - a) / n;
- s = 0;
- for (int i = 0; i < n; i++)
- s += f(a + i * step) * step;
- printf("Б(левая)>> %f\n", s);
- // Правые прямоугольники
- s = 0;
- for (int i = 1; i <= n; i++)
- s += f(a + i * step) * step;
- printf("Б(правая)>> %f\n\n", s);
- // Трапеции
- n = round((b - a) / sqrt(eps * 12.0 / (m2 * (b - a))));
- step = (b - a) / n;
- s = 0;
- double fA = f(a);
- for (int i = 1; i <= n; i++) {
- double fB = f(a + step*i);
- s += (fA + fB) / 2 * step;
- fA = fB;
- }
- printf("В>> %f\n\n", s);
- // Симпсон
- n = round((b - a) / sqrt(sqrt(eps * 180.0 / (m4 * (b - a)))));
- step = (b - a) / n;
- s = 0;
- fA = f(a);
- for (int i = 1; i <= n; i++) {
- double fMid = f(a + step*((double)i - 0.5));
- double fB = f(a + step*i);
- s += (step/6)*(fA + fMid*4 + fB);
- fA = fB;
- }
- printf("Г>> %f\n\n", s);
- return 0;
- }
- double f(double x) {
- return 2*x + 6*x*x*x*x*x;
- }
- double g1(double x) {
- return 2 + 30*x*x*x*x;
- }
- double g2(double x) {
- return 120*x*x*x;
- }
- double g4(double x) {
- return 720*x;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement