Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <iomanip>
- #include <vector>
- using namespace std;
- double f(double x, double y) {
- return pow(y, 2) - 2*x*y - 6*y + 2*x*x + 12;
- }
- double fdx(double x, double y) {
- return - 2*y + 4*x;
- }
- double fdy(double x, double y) {
- return 2 * y - 2 * x - 6;
- }
- void quadratica(double xi, double yi, int numIt) {
- vector<vector<double>> H = { { 0.5, 0.5 },{ 0.5, 1 } }; //matriz hessiana inversa maxima salva vidas
- double xn, yn;
- for (int i = 0; i < numIt; i++) {
- xn = xi - H[0][0] * fdx(xi, yi) + H[0][1] * fdx(xi, yi);
- yn = yi - H[1][0] * fdy(xi, yi) + H[1][1] * fdy(xi, yi);
- if(f(xn,yn) < f(xi,yi)) {
- xi = xn;
- yi = yn;
- }
- cout << "x = " << xn << endl;
- cout << "y = " << yn << endl;
- cout << "f(x,y) = " << f(xn, yn) << endl;
- }
- }
- int main()
- {
- const int OUT_PREC = 5;
- cout << fixed << setprecision(OUT_PREC);
- quadratica(1, 1, 2);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement