Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2022, 05:20   #1
makskhemik
Новичок
Джуниор
 
Регистрация: 05.06.2022
Сообщений: 1
Сообщение Вычисление интеграла методами трапеции и Гаусса

Программа работает по методу трапеции и Гаусса-3, помогите сделать чтобы она была по методу трапеции и Гаусса-2, если что код делал не я, так что не понимаю даже как он работает...

код:
#include <iostream>
#include <vector>
#include <iomanip>
#include <cmath>

using namespace std;

/*
//для таблицы 1
float f(float x) {
//Гаусс-3 точно вычислит интеграл для мгночлена пятой степени за одну итерацию, поэтому используем многочлен шестой
return 1*pow(x, 6) - 2*pow(x, 5) + 3*pow(x, 4) - 5*pow(x, 3) + 5*x*x - 6*x + 7;
}
*/

//для таблицы 2
float f(float x) {
return pow(sin(x), 2);
}


void trapezoidal_integral(float a, float b, int segments_limit = 127) {
int N = 1;
float integral = 0;
float previous_integral = 1;
while (abs(integral - previous_integral) > 1e-6 && N <= segments_limit) {
previous_integral = integral;
integral = 0;
float h = (b-a)/N;
integral += f(a) / 2;
for (int i = 1; i < N; ++i) {
integral += f(a + i *h);
}
integral += f(b)/2;
integral *= h;
N++;
}
cout << "Result = " << fixed << setprecision(6) << integral << defaultfloat << ", number of segments = " << N-1 << ", segment size = " << (b-a)/(N-1) << endl;
}

void gauss3_integral(float a, float b, int segments_limit = 127) {
vector<float> q = {0.55555555555555, 0.888888888888889, 0.55555555555555};
vector<float> uzel = {-0.77459666924148, 0, 0.77459666924148};
int N = 1;
float integral = 0;
float previous_integral = 1;
while (abs(integral - previous_integral) > 1e-6 && N <= segments_limit) {
previous_integral = integral;
integral = 0;
float h = (b-a)/N;
for (int j = 1; j <= 3; ++j) {
float temp = 0;
for (int k = 1; k <= N; ++k) {
float xk = a + h*(k-1);
float xkj = (2*xk + h)/2 + uzel[j-1] * h / 2;
temp += h * f(xkj);
}
integral += temp * q[j-1];
}
integral /= 2;
N++;
}
cout << "Result = " << fixed << setprecision(6) << integral << defaultfloat << ", number of segments = " << N-1 << ", segment size = " << (b-a)/(N-1) << endl;
}


int main() {
//float a = -3, b = 3; //для таблицы 1
float a = 0, b = 26; //для таблицы 2
cout << "Trapezoidal method:\n";
trapezoidal_integral(a, b, 1);
trapezoidal_integral(a, b, 2);
trapezoidal_integral(a, b, 3);
trapezoidal_integral(a, b);
cout << "\nGauss-3 method:\n";
gauss3_integral(a, b, 1);
gauss3_integral(a, b, 2);
gauss3_integral(a, b, 3);
gauss3_integral(a, b);
}
makskhemik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение интеграла методом трапеции Тёма777 Общие вопросы C/C++ 11 20.05.2013 20:38
Вычисление приближенного значения определенного интеграла 2 методами. На языке Паскаль. DarkPrinceSSa Помощь студентам 2 20.10.2010 19:15
Вычисление приближенного значения определенного интеграла 2 методами. На языке Паскаль DarkPrinceSSa Помощь студентам 1 20.10.2010 19:12
Вычисление опред.интеграла разными методами(С++) Knok69 Помощь студентам 0 08.05.2010 20:29
Вычисление интеграла методом трапеции. Айдар Помощь студентам 2 07.02.2010 14:50