Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. //var 7
  2. #include <iostream>
  3. #include <cmath>
  4. #include <vector>
  5. using std::cos;
  6. using std::sin;
  7. using std::cin;
  8. using std::cout;
  9. using std::endl;
  10. using std::vector;
  11. using std::size_t;
  12. using std::swap;
  13. using std::abs;
  14. const double EXP=0.00000001;
  15.  
  16. vector<double> Podst(vector<double> x);
  17. vector<vector<double>> Yacobi(vector<double> x);
  18. double Opredelitel(vector<vector<double>> Yac);
  19. vector<vector<double>> Obrat(vector<vector<double>> Matr);
  20. vector<double> Pribl(vector<double> pr0, vector<vector<double>> Matr);
  21.  
  22.  
  23. vector<vector<double>> Obrat(vector<vector<double>> Matr){
  24. double Opredelite;
  25. Opredelite=Opredelitel(Matr);
  26. vector<vector<double>> Temp=Matr;
  27.  
  28.  
  29. swap(Temp[0][0],Temp[1][1]);
  30. Temp[0][0]/=Opredelite;
  31. Temp[1][1]/=Opredelite;
  32. Temp[0][1]*=-1/Opredelite;
  33. Temp[1][0]*=-1/Opredelite;
  34.  
  35. return Temp;
  36.  
  37. }
  38.  
  39. vector<double> Podst(vector<double> x){
  40. vector<double> pr(2);
  41. pr[0]=cos(x[1]*0.4+x[0]*x[0])+x[1]*x[1]+x[0]*x[0]-1.6;
  42. pr[1]=1.5*x[0]*x[0]-(x[1]*x[1])/0.36-1;
  43. return pr;
  44. }
  45.  
  46. vector<vector<double>> Yacobi(vector<double> x){
  47.  
  48. vector<vector<double>> pr(2);
  49. pr.resize(2);
  50. pr[0].resize(2);
  51. pr[1].resize(2);
  52.  
  53. pr[0][0]=-sin(0.4*x[1]+x[0]*x[0])*2*x[0]+2*x[0];
  54. pr[0][1]=-sin(0.4*x[1]+x[0]*x[0])*0.4+2*x[1];
  55. pr[1][0]=3*x[0];
  56. pr[1][1]=-2*x[1]/0.36;
  57. return pr;
  58.  
  59. }
  60.  
  61. vector<double> Pribl(vector<double> pr0, vector<vector<double>> Matr){
  62. vector<double> pod=Podst(pr0);
  63. vector<double> temp(2);
  64. temp[0]=Matr[0][0]*pod[0]+Matr[0][1]*pod[1];
  65. temp[1]=Matr[1][0]*pod[0]+Matr[1][1]*pod[1];
  66.  
  67. pr0[0]-=temp[0];
  68. pr0[1]-=temp[1];
  69.  
  70. return pr0;
  71. }
  72.  
  73. double Opredelitel(vector<vector<double>> Yac)
  74. {
  75. return (Yac[0][0]*Yac[1][1]-Yac[0][1]*Yac[1][0]);
  76. }
  77.  
  78. void show(vector<vector<double>> MATR)
  79. {
  80. cout<<endl<<"MATR"<<endl;
  81. for (size_t i = 0; i < 2; i++)
  82. {
  83. cout<<MATR[i][0]<<" "<<MATR[i][1]<<endl;
  84. }
  85. cout<<"MATR"<<endl;
  86.  
  87. }
  88.  
  89. int main()
  90. {
  91. vector<vector<double>> priblijenie(1); //приближенные значения
  92. priblijenie[0].resize(2);
  93. priblijenie[0][0]=-1;
  94. priblijenie[0][1]=1;
  95.  
  96.  
  97. vector<vector<double>> Matr;
  98. vector<double> temp;
  99.  
  100. int i=0;
  101. do{
  102. //cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
  103. Matr=Obrat(Yacobi(priblijenie[i]));
  104.  
  105. priblijenie.push_back(Pribl(priblijenie[i],Matr));
  106.  
  107. i++;
  108. //cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
  109. //cout<<((abs(priblijenie[i][0]-priblijenie[i-1][0])>EXP)||abs((priblijenie[i][1]-priblijenie[i-1][1])>EXP))<<endl;
  110. }while((abs(priblijenie[i][0]-priblijenie[i-1][0])>EXP)||abs((priblijenie[i][1]-priblijenie[i-1][1])>EXP));
  111.  
  112. for (size_t i = 0; i < priblijenie.size(); i++)
  113. {
  114. cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
  115. }
  116.  
  117.  
  118. return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement