Advertisement
sashachca

Untitled

Oct 24th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. // ЧМЫ5.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4.  
  5. #include <iostream>
  6. #include <cmath>
  7.  
  8. using namespace std;
  9.  
  10. double f1(double x1, double x2) {
  11.     return exp(x1*x2) + x1 - 6;
  12. }
  13.  
  14. double f2(double x1, double x2) {
  15.     return   x1*x1 - 6 * x2 - 1;
  16. }
  17.  
  18. double f1_d1(double x1, double x2) {
  19.     return x2*exp(x1*x2) + 1;
  20. }
  21.  
  22. double f1_d2(double x1, double x2) {
  23.     return x1*exp(x1*x2);
  24. }
  25.  
  26. double f2_d1(double x1, double x2) {
  27.     return 2 * x1;
  28. }
  29.  
  30. double f2_d2(double x1, double x2) {
  31.     return -6;
  32. }
  33.  
  34. double x[2], x_prev[2];
  35. double slau[2][3];
  36.  
  37. int slaufill() {
  38.     slau[0][0] = f1_d1(x_prev[0],x_prev[1]);
  39.     slau[0][1] = f1_d2(x_prev[0], x_prev[1]);
  40.     slau[1][0] = f2_d1(x_prev[0], x_prev[1]);
  41.     slau[1][1] = f2_d2(x_prev[0], x_prev[1]);
  42.     slau[0][2] = -f1(x_prev[0], x_prev[1]);
  43.     slau[1][2] = -f2(x_prev[0], x_prev[1]);
  44.     return 0;
  45. }
  46.  
  47. int slausolve_nextstep() {
  48.     int i;
  49.     double koef;
  50.     koef = -slau[1][0] / slau[0][0];
  51.     for (i = 0; i < 3; i++)
  52.         slau[1][i] = slau[1][i] + slau[0][i] * koef;
  53.     slau[1][2] = slau[1][2] / slau[1][1];
  54.     slau[0][2] = (slau[0][2] - slau[0][1] * slau[1][2]) / slau[0][0];
  55.     for (i = 0; i < 2; i++)
  56.         x[i] = x_prev[i] + slau[i][2];
  57.     return 0;
  58. }
  59.  
  60. double maxdiff() {
  61.     if (abs(x[0] - x_prev[0]) > abs(x[1] - x_prev[1]))
  62.         return abs(x[0] - x_prev[0]);
  63.     else
  64.         return abs(x[1] - x_prev[1]);
  65. }
  66.  
  67. int main() {
  68.     double acc = 0.001;
  69.    
  70.     //Метод простых итераций:
  71.     cout << "Metod prostih iteracii:" << endl;
  72.     x_prev[0] = 2.5;
  73.     x_prev[1] = 0.5;
  74.     x[0] = sqrt(6 * log(6 - x_prev[0]) / x_prev[0] + 1);
  75.     x[1] = (x_prev[0] * x_prev[0] - 1) / 6;
  76.     while (maxdiff() > acc) {
  77.         cout << "x1=" << x[0] << '\t' << "x1_prev=" << x_prev[0] << endl << endl;
  78.         cout << "x2=" << x[1] << '\t' << "x2_prev=" << x_prev[1] << endl << endl;
  79.         cout << "f1=" << f1(x[0], x[1]) << '\t' << "f2=" << f2(x[0], x[1]) << endl;
  80.         x_prev[0] = x[0];
  81.         x_prev[1] = x[1];
  82.         x[0] = sqrt(6 * log(6 - x_prev[0]) / x_prev[0] + 1);
  83.         x[1] = (x_prev[0] * x_prev[0] - 1) / 6;
  84.         cout << "--------------------------" << endl << endl;
  85.     }
  86.     cout << "x1=" << x[0] << '\t' << "x1_prev=" << x_prev[0] << endl << endl;
  87.     cout << "x2=" << x[1] << '\t' << "x2_prev=" << x_prev[1] << endl << endl;
  88.     cout << round(f1(x[0], x[1])) << '\t' << round(f2(x[0], x[1])) << endl << endl;
  89.     cout << "||||||||||||||||||||||||||" << endl << endl;
  90.    
  91.    
  92.     cout << endl << endl << endl;
  93.    
  94.    
  95.     //Метод Ньютона:
  96.     cout << "Metod Newtona:" << endl;
  97.     x_prev[0] = 3;
  98.     x_prev[1] = 1;
  99.     slaufill();
  100.     slausolve_nextstep();
  101.     while (maxdiff() > acc) {
  102.         cout << "x1=" << x[0] << '\t' << "x1_prev=" << x_prev[0] << endl << endl;
  103.         cout << "x2=" << x[1] << '\t' << "x2_prev=" << x_prev[1] << endl << endl;
  104.         cout << "f1=" << f1(x[0], x[1]) << '\t' << "f2=" << f2(x[0], x[1]) << endl;
  105.         x_prev[0] = x[0];
  106.         x_prev[1] = x[1];
  107.         slaufill();
  108.         slausolve_nextstep();
  109.         cout << "--------------------------" << endl << endl;
  110.     }
  111.     cout << "x1=" << x[0] << '\t' << "x1_prev=" << x_prev[0] << endl << endl;
  112.     cout << "x2=" << x[1] << '\t' << "x2_prev=" << x_prev[1] << endl << endl;
  113.     cout << round(f1(x[0], x[1])) << '\t' << round(f2(x[0], x[1])) << endl << endl;
  114.     cout << "||||||||||||||||||||||||||" << endl << endl;
  115.     char j;
  116.     cin >> j;
  117.     return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement