Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECTRE_NO_WARNINGS
- #include <iostream>
- #include <cmath>
- #include <vector>
- using namespace std;
- double func(double x) {
- return sqrt(0.2 * x) * cos(0.02 * x);
- }
- vector<double> init(double n, double a, double b) {
- vector<double> ans;
- double step = (b - a) / n;
- for (int i = 0; i <= n+1; i++) {
- if (!ans.size()) {
- ans.push_back(step);
- }
- else {
- ans.push_back(a);
- a += step;
- }
- }
- return ans;
- }
- void output(vector<double> vec) {
- printf("For %d intervals\n", vec.size() - 2);
- printf("Step = %.3lf\n", vec[0]);
- for (int i = 1; i < vec.size(); i++) {
- printf("%.3lf ", vec[i]);
- if (9 == (i - 1) % 10) {
- printf("\n");
- }
- }
- printf("\n");
- }
- double methodLeft(vector<double> nodes) {
- double sum = 0;
- for (int i = 1; i < nodes.size() - 1; i++) {
- sum += func(nodes[i]) * nodes[0];
- }
- return sum;
- }
- double methodRight(vector<double> nodes) {
- double sum = 0;
- for (int i = 2; i < nodes.size(); i++) {
- sum += func(nodes[i]) * nodes[0];
- }
- return sum;
- }
- double methodMiddle(vector<double> nodes) {
- double sum = 0;
- for (int i = 1; i < nodes.size() - 1; i++) {
- sum += 0.5 * (nodes[i+1] - nodes[i]) * (func(nodes[i]) + func(nodes[i + 1]));
- }
- return sum;
- }
- double methodSimpson(vector<double> nodes) {
- double sum = 0;
- for (int i = 1; i < nodes.size() - 1; i++) {
- sum += (nodes[i + 1] - nodes[i]) / 6.0 * (func(nodes[i]) + 4.0 * func(0.5 * (nodes[i + 1] + nodes[i])) + func(nodes[i + 1]));
- }
- return sum;
- }
- vector<double> iterate(vector<double> nodes) {
- vector<double> ans;
- ans.push_back(methodLeft(nodes));
- ans.push_back(methodRight(nodes));
- ans.push_back(methodMiddle(nodes));
- ans.push_back(methodSimpson(nodes));
- return ans;
- }
- int main() {
- double a = 1.0;
- double b = 3.0;
- double n[4] = { 4.0, 20.0, 100.0, 400.0 };
- vector<double> inter;
- vector <vector<double>> result;
- for (int i = 0; i < 4; i++) {
- inter = init(n[i], a, b);
- //output(inter);
- result.push_back(iterate(inter));
- inter.clear();
- }
- printf("%11.c |%6s |%7s |%8s |%8s |\n", ' ', "left", "right", "middle", "simpson");
- for (int i = 0; i < result.size(); i++) {
- printf("for n=%-5.0lf ", n[i]);
- for (int j = 0; j < result[i].size(); j++) {
- printf("|% 8.5lf ", result[i][j]);
- }
- printf("|\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement