Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <vector>
- using namespace std;
- vector<double> slau(int n, vector<double> c, vector<double> b,
- vector<double> a, vector<double> d) {
- vector<double> x(n), alpha(n), beta(n);
- if(b[0] == 0) return {};
- else {
- alpha[0] = - c[0] / b[0];
- beta[0] = d[0] / b[0];
- for(int i = 1; i < n-1; i++) {
- if ((a[i - 1] * alpha[i - 1] + b[i]) != 0) {
- alpha[i] = -c[i] / (a[i - 1] * alpha[i - 1] + b[i]);
- beta[i] = (d[i] - a[i - 1] * beta[i - 1]) / (a[i - 1] * alpha[i - 1] + b[i]);
- } else cout << "ERROR" << endl;
- }
- if((a[n-2] * alpha[n-2] + b[n-1]) != 0 )
- x[n-1] = (d[n-1] - a[n-2] * beta[n-2]) / (a[n-2] * alpha[n-2] + b[n-1]);
- else cout << "ERROR" << endl;
- for(int i = n-1; i > 0 ; i--) {
- x[i-1] = alpha[i-1] * x[i] + beta[i-1];
- }
- for(int i = 0; i < n; i++) cout << x[i] << ' ';
- cout << endl;
- return x;
- }
- }
- int main() {
- int n = 10;
- double l = 0, r = 1, h = (r-l)/n;
- double A = exp(l); double B = exp(r);
- vector<double> p(n-1, 1), q(n-1, -1), a(n-2), b(n-1), c(n-2), d(n-1);
- a[0] = 1 - p[0]*h/2;
- b[0] = q[0]*h*h-2;
- c[0] = 1 + p[0]*h/2;
- d[0] = exp(h)*h*h - A*(1 - p[0]*h/2);
- b[n-2] = q[n-2]*h*h-2;
- d[n-2] = exp((n-1)*h)*h*h - B*(1 + p[n-2]*h/2);
- for(int i = 1; i < n-2; i++) {
- a[i] = 1 - p[i]*h/2;
- b[i] = q[i]*h*h-2;
- c[i] = 1 + p[i]*h/2;
- d[i] = exp(l + (i+1) * h)*h*h;
- }
- vector<double> y = slau(n-1, c, b, a, d);
- y.insert(y.begin(), A);
- y.insert(y.end(), B);
- for(int i = 0 ; i < n+1; i++) cout << abs(y[i] - exp(l + i * h)) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement