Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- using namespace std;
- vector<vector<double>> romber(double (*function)(double), double a, double b, int M){
- double h = b - a;
- vector<vector<double>> R;
- R.push_back({});
- double first_value = h * (function(a) + function(b)) / 2.0;
- R[0].push_back(first_value);
- for (int n = 0; n < M; n++){
- h = h / 2.0;
- double inner_sum = 0;
- for (int i = 1; i < pow(2, n-1); i++){
- inner_sum += function(a + (2*i - 1) * h);
- }
- double column_value = 1.0 / 2.0 * R[n][0] + h * inner_sum;
- inner_sum = 0;
- R.push_back({});
- R[n+1].push_back(column_value);
- for(int m = 0; m < n; m++){
- double row_value = R[n+1][m] + (R[n+1][m]-R[n][m]) / (pow(4, m) - 1);
- R[n+1].push_back(row_value);
- }
- }
- //print
- for (int i = 0; R.size(); i++){
- for(int j = 0; R[i].size(); j++){
- cout << R[i][j] << ' ';
- }
- cout << endl;
- }
- return R;
- }
- int main(){
- vector<vector<double>> result;
- romber(&sin, 0, M_PI, 4);
- cout << result.size() << endl;
- cout << result[1].size() << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement