Guest User

Untitled

a guest
Nov 13th, 2012
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <iostream>
  2. #include <clocale>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. int n;
  7. double norm(double *y)
  8. {
  9.     double max=0;
  10.     for (int i=0;i<n;i++)
  11.     {
  12.         if (fabs(y[i])>max)
  13.             max=fabs(y[i]);
  14.     }
  15. return max;
  16. }
  17. double sp(double **A, double *x, double eps)
  18. {
  19.     double maxl=0,l=0,ltemp=0,*xtemp=new double[n],*y=new double[n];
  20.     int k=0;
  21.     while (k<2)
  22.     {
  23.         for (int i=0;i<n;i++)
  24.         x[i]=xtemp[i];
  25.         for (int j=0;j<n;j++)
  26.         {
  27.             for (int i=0;i<n;i++)
  28.                 y[i]+=A[i][j]*x[j];
  29.         }
  30.         for (int i=0;i<n;i++)
  31.         ltemp+=x[i]*y[i];
  32.         for (int i=0;i<n;i++)
  33.         xtemp[i]=y[i]/norm(y);
  34.         k++;
  35.     }
  36.         while (fabs(l-ltemp)>eps)
  37.     {
  38.         for (int i=0;i<n;i++)
  39.         x[i]=xtemp[i];
  40.         for (int j=0;j<n;j++)
  41.         {
  42.             for (int i=0;i<n;i++)
  43.                 y[i]+=A[i][j]*x[j];
  44.         }
  45.         l=ltemp;
  46.         ltemp=0;
  47.         for (int i=0;i<n;i++)
  48.         ltemp+=x[i]*y[i];
  49.         for (int i=0;i<n;i++)
  50.         xtemp[i]=y[i]/norm(y);
  51.         k++;
  52.     }
  53.         cout<<"За "<<k<<" итераций"<<endl;
  54.     return ltemp;
  55. }
  56. void main()
  57. {
  58.     cout.precision(20);
  59.     cout.width(20);
  60.     system("cls");
  61.     setlocale(LC_CTYPE,"Russian");
  62.     system("Color 1F");
  63.     double eps,l;
  64.     cout<<"Введите эпсилон eps=";
  65.     cin>>eps;
  66.     cout<<"Введите размерность n=";
  67.     cin>>n;
  68.     double *x=new double [n];
  69.  
  70.     double **A=new double*[n];
  71.     for (int i=0;i<n;i++)
  72.     A[i]=new double[n];
  73.     for (int i=0;i<n;i++)
  74.     for (int j=0;j<n;j++)
  75.     A[i][j]=360360*(i+j+1);
  76.  
  77.     cout<<"Матрица A: "<<endl;
  78.     for (int i=0;i<n;i++)
  79.     {
  80.     for (int j=0;j<n;j++)
  81.     cout<<A[i][j]<<"\t";
  82.     cout<<endl;
  83.     }
  84.     /*cout<<"Введите произвольный вектор Yo "<<endl;
  85.     for (int i=0;i<n;i++)
  86.     cin>>x[i];*/
  87.     for (int i=0;i<n;i++)
  88.     {
  89.         x[i]=0.57735;
  90.     }
  91.     l=sp(A,x,eps);
  92.     cout<<"l="<<l<<endl;
  93.     for (int i=0;i<n;i++)
  94.     cout<<x[i]<<"  ";
  95. }
Advertisement
Add Comment
Please, Sign In to add comment