Laboratoria z Metod Numerycznych na AGH WIMiIP [prowadzący: dr hab. inż. Marcin Hojny]
Przykładowe dane:
Xi | Yi |
---|---|
-2 | -1 |
-1 | 0 |
0 | 5 |
2 | 99 |
4 | -55 |
double newPoint = 1; //punkt w którym chcemy wyznaczyć wartość
std::vector<double> xi = { -2.,-1.,0.,2.,4. };
std::vector<double> yi = { -1.,0.,5.,99.,-55. };
- Interpolacja Lagrange'a
double numeric::interpolation::lagrange(xi, yi, newPoint);
- Interpolacja Newtona
double numeric::interpolation::newton(xi, yi, newPoint);
Przykładowy układ równań:
2x + 5y + 3z = 5
4x + 2y + 5z = 4
3x + 8y + 4z = 9
std::vector<std::vector<double>> matrix = { {2,5,3, 5}, {4,2,5, 4}, {3,8,4, 9} };
- Metoda oparta o wzory Cramera
std::vector<double> numeric::systemsOfEquasions::polynomial(matrix);
- Metoda eliminacji Gaussa
std::vector<double> numeric::systemsOfEquasions::gaussianElimination(matrix);
Przykładowa funkcja:
f(x) = x^2 - 1
f'(x) = 2x
Obszar poszukiwań miejsca zerowego: < -2 ; 0 >
Prezyzja: znaleziony punkt różni się o ± 0.01 od rzeczywistego
double f(double x){
return (x*x - 1);
}
double fDerivative(double x){
return 2 * x;
}
- Metoda bisekcji
double numeric::zeroOfAFunction::bisection(f, -2., 0., 0.1);
- Metoda Newtona-Raphsona
double numeric::zeroOfAFunction::newtonRaphson(f, fDerivative, -2., 0., 0.1);
Przykładowa funkcja:
1x^3 + 0x^2 + 0x^1 + 2x^0
Całkowanie na przedziale < 1 ; 4 >
Precyzja: ilość iteracji pętli
std::vector<double> coefficients = { 1.,0.,0.,2. };
//Funkcja obliczająca wartość wielomianu w punkcie
double f(double x) {
unsigned int coeffSize = coefficients.size();
double y = 0.;
for (unsigned int i = 0; i < coeffSize; i++) {
y += abs(coefficients[i] * pow(x, coeffSize - i - 1));
}
return y;
}
- Całkowanie metodą prostokątów
double numeric::integration::rectangular(f, 1, 4, 300);
- Całkowanie metodą trapezową
double numeric::integration::trapezoidal(f, 1, 4, 300);
- Całkowanie metodą Simpsona
double numeric::integration::simpson(f, 1, 4, 300);
- Całkowanie metodą Monte Carlo
double numeric::integration::monteCarlo(f, 1, 4, 300);
- Kwadratury Gaussa
std::vector<double> xi = { 0.,5.,5.,0. };
std::vector<double> yi = { 0.,0.,5.,5. };
std::vector<double> weight = { 1.,1. };
std::vector<double> point = { -0.5773502692, 0.5773502692 };
double numeric::integration::gaussianQuadrature(xi, yi, weight, point);