Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- #include <iomanip>
- #include <sstream>
- #include <fstream>
- #define PI 3.1415926535897932384626433832795028841971
- #define _E 2.71828182846
- #define WIDTH 7
- #define WIDTH_i 4
- #define WIDTH_xi 5
- #define WIDTH_f 15
- #define MAX_X 2
- #define START_X -15
- #define STEP 0.2
- using namespace std;
- class Results
- {
- private:
- vector < vector < double > > results;
- public:
- Results() {}
- ~Results() {}
- vector < vector < double > > get()
- {
- return results;
- }
- void set(vector < vector < double > > input)
- {
- results = input;
- }
- void pushLine(double x_i, double y_i, double f, double delta, double diff, double realV)
- {
- vector < double > tmp;
- tmp.push_back(x_i);
- tmp.push_back(y_i);
- tmp.push_back(f);
- tmp.push_back(delta);
- tmp.push_back(diff);
- tmp.push_back(realV);
- results.push_back(tmp);
- }
- vector < double > getLine(unsigned int i)
- {
- return results[i];
- }
- bool createCSVstr()
- {
- ofstream csv;
- csv.open("output.csv");
- if (!csv.is_open())
- return false;
- csv << "x;y;f(xy);delta;error;realV;\n";
- for (unsigned int i=0;i<results.size();++i)
- {
- for (unsigned int j=0;j<results[i].size();++j)
- {
- csv << results[i][j] << ";";
- }
- csv << "\n";
- }
- csv.close();
- return true;
- }
- };
- double f(double x, double y)
- {
- return (y-10.0)/4.0 + 12.0*x*exp((5.0+x)/4.0);
- }
- double f1(double x)
- {
- return (10.0 + 6.0*exp((5.0+x)/4.0)*x*x);
- }
- int main()
- {
- const double interval = STEP;
- const double initialCondition = f1(START_X);
- stringstream buffer;
- buffer << "|" << setw(WIDTH_i) << "i" << "|"
- << setw(WIDTH_xi) << "x_i" << "|"
- << setw(WIDTH_f) << "y_i" << "|"
- << setw(WIDTH_f) << "f(x,y)" << "|"
- << setw(WIDTH_f) << "d y_i" << "|"
- << setw(WIDTH_f) << "Real v" << "|"
- << setw(WIDTH_f) << "Error" << "|\n";
- cout << buffer.str();
- for (unsigned int i=0;i<buffer.str().length()-1;++i)
- cout << "-";
- cout << "\n";
- unsigned int i=0;
- Results result;
- do
- {
- double x_i = START_X+i*interval;
- double y_i;
- if (i != 0)
- y_i = result.getLine(i-1).at(1)+result.getLine(i-1).at(3);
- else
- y_i = initialCondition;
- double f_i = f(x_i, y_i);
- double delta = interval*f_i;
- double realValue = f1(x_i);
- double diff = realValue - y_i;
- result.pushLine(x_i, y_i, f_i, delta, diff, realValue);
- buffer.str("");
- buffer << "|" << setw(WIDTH_i) << i << "|"
- << setw(WIDTH_xi) << x_i << "|"
- << setw(WIDTH_f) << y_i << "|"
- << setw(WIDTH_f) << f_i << "|"
- << setw(WIDTH_f) << delta << "|"
- << setw(WIDTH_f) << realValue << "|"
- << setw(WIDTH_f) << diff << "|\n";
- cout << buffer.str();
- ++i;
- } while((START_X+i*interval) <= MAX_X);
- if (result.createCSVstr())
- cout << "Results writen to file.\n";
- else
- cout << "File saving failed.\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement