|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.06.2022, 05:20 | #1 |
Новичок
Джуниор
Регистрация: 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); } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Решение интеграла методом трапеции | Тёма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 |