Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //var 7
- #include <iostream>
- #include <cmath>
- #include <vector>
- using std::cos;
- using std::sin;
- using std::cin;
- using std::cout;
- using std::endl;
- using std::vector;
- using std::size_t;
- using std::swap;
- using std::abs;
- const double EXP=0.00000001;
- vector<double> Podst(vector<double> x);
- vector<vector<double>> Yacobi(vector<double> x);
- double Opredelitel(vector<vector<double>> Yac);
- vector<vector<double>> Obrat(vector<vector<double>> Matr);
- vector<double> Pribl(vector<double> pr0, vector<vector<double>> Matr);
- vector<vector<double>> Obrat(vector<vector<double>> Matr){
- double Opredelite;
- Opredelite=Opredelitel(Matr);
- vector<vector<double>> Temp=Matr;
- swap(Temp[0][0],Temp[1][1]);
- Temp[0][0]/=Opredelite;
- Temp[1][1]/=Opredelite;
- Temp[0][1]*=-1/Opredelite;
- Temp[1][0]*=-1/Opredelite;
- return Temp;
- }
- vector<double> Podst(vector<double> x){
- vector<double> pr(2);
- pr[0]=cos(x[1]*0.4+x[0]*x[0])+x[1]*x[1]+x[0]*x[0]-1.6;
- pr[1]=1.5*x[0]*x[0]-(x[1]*x[1])/0.36-1;
- return pr;
- }
- vector<vector<double>> Yacobi(vector<double> x){
- vector<vector<double>> pr(2);
- pr.resize(2);
- pr[0].resize(2);
- pr[1].resize(2);
- pr[0][0]=-sin(0.4*x[1]+x[0]*x[0])*2*x[0]+2*x[0];
- pr[0][1]=-sin(0.4*x[1]+x[0]*x[0])*0.4+2*x[1];
- pr[1][0]=3*x[0];
- pr[1][1]=-2*x[1]/0.36;
- return pr;
- }
- vector<double> Pribl(vector<double> pr0, vector<vector<double>> Matr){
- vector<double> pod=Podst(pr0);
- vector<double> temp(2);
- temp[0]=Matr[0][0]*pod[0]+Matr[0][1]*pod[1];
- temp[1]=Matr[1][0]*pod[0]+Matr[1][1]*pod[1];
- pr0[0]-=temp[0];
- pr0[1]-=temp[1];
- return pr0;
- }
- double Opredelitel(vector<vector<double>> Yac)
- {
- return (Yac[0][0]*Yac[1][1]-Yac[0][1]*Yac[1][0]);
- }
- void show(vector<vector<double>> MATR)
- {
- cout<<endl<<"MATR"<<endl;
- for (size_t i = 0; i < 2; i++)
- {
- cout<<MATR[i][0]<<" "<<MATR[i][1]<<endl;
- }
- cout<<"MATR"<<endl;
- }
- int main()
- {
- vector<vector<double>> priblijenie(1); //приближенные значения
- priblijenie[0].resize(2);
- priblijenie[0][0]=-1;
- priblijenie[0][1]=1;
- vector<vector<double>> Matr;
- vector<double> temp;
- int i=0;
- do{
- //cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
- Matr=Obrat(Yacobi(priblijenie[i]));
- priblijenie.push_back(Pribl(priblijenie[i],Matr));
- i++;
- //cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
- //cout<<((abs(priblijenie[i][0]-priblijenie[i-1][0])>EXP)||abs((priblijenie[i][1]-priblijenie[i-1][1])>EXP))<<endl;
- }while((abs(priblijenie[i][0]-priblijenie[i-1][0])>EXP)||abs((priblijenie[i][1]-priblijenie[i-1][1])>EXP));
- for (size_t i = 0; i < priblijenie.size(); i++)
- {
- cout<<priblijenie[i][0]<<" "<<priblijenie[i][1]<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement