-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPolynomial.h
77 lines (55 loc) · 3 KB
/
Polynomial.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#pragma once
#include "SLE.h"
class Polynomial
{
size_t deg; // степень многочлена
Vector p; // сам многочлен
public:
Polynomial();
Polynomial(const Polynomial&);
~Polynomial();
Polynomial& operator = (const Polynomial&);
Polynomial(const Vector&);
Polynomial(const size_t&);
size_t getSize() const;
double get(const size_t&) const;
double& operator [] (const size_t&);
size_t calculateDeg() const;
void shrink();
// операторы для работы с полиномами
Polynomial operator + (const Polynomial&) const;
Polynomial& operator += (const Polynomial&);
Polynomial operator - (const Polynomial&) const;
Polynomial& operator -= (const Polynomial&);
Polynomial operator * (const Polynomial&) const;
Polynomial& operator *= (const Polynomial&);
Polynomial df() const; // производный многочлен
Polynomial Df() const; // интеграл от многочлена
double operator () (const double&) const; // значение полинома в точке
// операторы ввода/вывода полинома
friend istream& operator >> (istream&, Polynomial&);
friend ostream& operator << (ostream&, const Polynomial&);
// операторы умножения и деления многочлена на константу
friend Polynomial operator * (const double&, const Polynomial&);
Polynomial& operator *= (const double&);
Polynomial operator / (const double&);
Polynomial& operator /= (const double&);
};
// функции создания интерполяционного многочлена
Polynomial int_L(const Vector&, const Vector&);
Polynomial int_N(const Vector&, const Vector&);
Vector Cheb(const size_t&);
// функции численного интегрирования
Vector steady_grid(const size_t&, const double&, const double&);
double mid_rect(const size_t&, const double&, const double&, double (*)(const double&));
double trapecia(const size_t&, const double&, const double&, double (*)(const double&));
double Simpson(const size_t&, const double&, const double&, double (*)(const double&));
double fu1(const double&); // для задания 2
double fu2(const double&); // для задания 3
double dfu2(const double&);
void Gaussian(const double&, const size_t&, const double&, const double&, double (*)(const double&));
Polynomial Legendre(const size_t&); // построение полинома Лежандра степени n
pair<size_t, double> dichotomy(const double&, const double&, const double&, double (*)(const double&));
pair<size_t, double> newt(const double&, const double&, const double&, double (*)(const double&), double (*)(const double&));
pair<size_t, double> newt(const double&, double (*)(const double&), double (*)(const double&), const double&); // версия с начальным приближением
pair<size_t, double> newt(const double&, Polynomial&, Polynomial&, const double&);