Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //тут весь код, матрицы, векторы, Якоби - все, что есть
- #include <stdio.h>
- #include <iostream>
- using namespace std;
- class vect
- {
- public:
- static int count;
- int num;
- vect (int d); //êîíñòðóêòîð
- vect (int d, double *x); //êîíñòðóêòîð
- vect(); //êîíñòðóêòîð
- vect (vect &x); //copyconstructor
- ~vect(); //äåñòðóêòîð
- void print(); //ïå÷àòü
- vect& operator+(vect r); //ñëîæåíèå âåêòîðîâ
- friend vect& operator-(vect &l, vect &r); //ðàçíîñòü âåêòîðîâ
- vect& operator-(); //óíàðíûé ìèíóñ
- double operator*(vect &r); //ïðîèçâåäåíèå âåêòîðîâ
- vect& operator*(int c); //óìíîæåíèå âåêòîðà íà ÷èñëî
- vect& operator=(const vect &r); //ïðèñâàèâàíèå
- friend vect& operator*(int c, vect &r); //óìíîæåíèå ÷èñëà íà âåêòîð
- friend class matr;
- private:
- int dim;
- double *v;
- };
- int vect::count=0;
- vect::vect()
- {
- count++;
- num=count;
- dim=1;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=0;
- cout<<endl<<"Êîíñòðóêòîð vect () ñîçäàë âåêòîð #"<<num<<endl;
- }
- vect::vect (int d)
- {
- count++;
- num=count;
- dim=d;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=0;
- cout<<endl<<"Êîíñòðóêòîð vect (int) ñîçäàë âåêòîð #"<<num<<endl;
- }
- vect::vect (int d, double *x)
- {
- count++;
- num=count;
- dim=d;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=x[i];
- cout<<endl<<"Êîíñòðóêòîð vect (int, double *) ñîçäàë âåêòîð #"<<num<<endl;
- }
- vect::vect (vect &x)
- {
- count++;
- num=count;
- dim=x.dim;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=x.v[i];
- cout<<endl<<"Êîñòðóêòîð êîïèðîâàíèÿ vect (vect &) ñîçäàë âåêòîð #"<<num<<endl;
- }
- vect::~vect()
- {
- cout<<endl<<"Óäàëåíèå âåêòîðà #"<<num<<endl;
- /*delete []v;*/
- }
- vect& vect::operator+(vect r)
- {
- cout<<endl<<"Ñëîæåíèå âåêòîðîâ #"<<num<<" è #"<<r.num<<endl;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=v[i]+r.v[i];
- tmp.print();
- return tmp;
- }
- vect& operator-(vect &l, vect &r)
- {
- cout<<endl<<"Âû÷èòàíèå âåêòîðîâ #"<<l.num<<" è #"<<r.num;
- vect tmp(l.dim);
- for (int i=0; i<l.dim; i++)
- tmp.v[i]=l.v[i]-r.v[i];
- tmp.print();
- return tmp;
- }
- vect& vect::operator-()
- {
- cout<<endl<<"Óíàðíûé ìèíóñ âåêòîðà #"<<num;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=-v[i];
- tmp.print();
- return tmp;
- }
- double vect::operator*(vect &r)
- {
- cout<<endl<<"Óìíîæåíèå âåêòîðîâ #"<<num<<" è #"<<r.num<<": ";
- int c=0;
- for (int i=0; i<dim; i++)
- c=c+(v[i]*r.v[i]);
- cout<<c<<endl;
- return c;
- }
- vect& vect::operator=(const vect &r)
- {
- cout<<endl<<"Ïðèñâàèâàíèå âåêòîðó #"<<num<<" çíà÷åíèé âåêòîðà #"<<r.num;
- dim=r.dim;
- if (v!=NULL) delete[]v;
- v=new double [dim];
- for (int i=0; i<dim; i++)
- v[i]=r.v[i];
- return *this;
- }
- vect& vect::operator*(int c)
- {
- cout<<endl<<"Óìíîæåíèå âåêòîðà #"<<num<<" íà ÷èñëî "<<c;
- vect tmp (dim);
- for (int i=0; i<dim; i++)
- tmp.v[i]=v[i]*c;
- tmp.print();
- return tmp;
- }
- vect& operator*(int c, vect &r)
- {
- cout<<endl<<"Óìíîæåíèå ÷èñëà "<<c<<" íà âåêòîð #"<<r.num;
- vect tmp (r.dim);
- for (int i=0; i<r.dim; i++)
- tmp.v[i]=r.v[i]*c;
- tmp.print();
- return tmp;
- }
- void vect::print()
- {
- cout<<endl<<"Âåêòîð #"<<num<<" (";
- for (int i=0; i<dim; i++)
- {
- cout<<v[i];
- if (i<dim-1) cout<<", ";
- }
- cout<<")"<<endl;
- }
- class matr
- {
- public:
- static int countmatr;
- int nummatr;
- matr ();
- matr (int h, int w);
- matr (int h, int w, double **x);
- matr (const matr &x);
- ~matr();
- matr invertDiag();
- void print();
- matr& operator +(const matr &r); //ñëîæåíèå ìàòðèö
- friend matr operator-(const matr &l, const matr &r); //âû÷èòàíèå
- matr operator-(); //óíàðíûé ìèíóñ
- matr operator*(const matr &r); //óìíîæåíèå ìàòðèö
- matr operator*(int c); //óìíîæåíèå íà ÷èñëî
- friend matr operator*(int c, const matr &r); //÷èñëî íà ìàòðèöó
- matr& operator=(const matr &r); //ïðèñâàèâàíèå
- vect operator* (const vect &r); //äðóæ ô-ÿ ê âåêò
- private:
- int height;
- int width;
- double **matrix;
- };
- int matr::countmatr=0;
- matr::matr()
- {
- countmatr++;
- nummatr=countmatr;
- height=3;
- width=3;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=1;
- }
- cout<<endl<<"Êîíñòðóêòîð matr () ñîçäàë ìàòðèöó #"<<nummatr<<endl;
- }
- matr::matr (int h, int w)
- {
- countmatr++;
- nummatr=countmatr;
- height=h;
- width=w;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=1;
- }
- cout<<endl<<"Êîíñòðóêòîð matr (int, int) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
- }
- matr::matr (int h, int w, double **x)
- {
- countmatr++;
- nummatr=countmatr;
- width=w;
- height=h;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++) {
- for (int j=0; j<width; j++){
- matrix[i][j]=x[i][j];
- }
- }
- cout<<endl<<"Êîíñòðóêòîð matr (int, int. double *) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
- }
- matr::matr (const matr &x)
- {
- countmatr++;
- nummatr=countmatr;
- height=x.height;
- width=x.width;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=x.matrix[i][j];
- }
- cout<<endl<<"Êîñòðóêòîð êîïèðîâàíèÿ matr (matr &) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
- }
- matr::~matr()
- {
- cout<<endl<<"Óäàëåíèå ìàòðèöû #"<<nummatr<<endl;
- /*delete []v;*/
- }
- matr matr::invertDiag()
- {
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++){
- if (i==j && matrix[i][j]!=0){
- matrix[i][j]=1/matrix[i][j];
- }
- else matrix[i][j]=0;
- }
- }
- return *this;
- }
- void matr::print()
- {
- cout<<endl<<"Ìàòðèöà #"<<nummatr<<endl;
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- {
- cout<<matrix[i][j]<<" ";
- }
- cout<<endl;
- }
- cout<<endl;
- }
- matr& matr::operator +(const matr &r)
- {
- cout<<endl<<"Ñëîæåíèå ìàòðèö #"<<nummatr<<" è #"<<r.nummatr<<endl;
- matr tmp (height, width);
- if (height!=r.height || width!=r.width){
- cout<<"Error! Matrixes rn't the same";
- }
- else {
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=matrix[i][j]+r.matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- }
- matr operator-(const matr &l, const matr &r)
- {
- cout<<endl<<"Ðàçíîñòü ìàòðèö #"<<l.nummatr<<" è #"<<r.nummatr;
- matr tmp(l.height, l.width);
- for (int i=0; i<l.height; i++){
- for (int j=0; j<l.width; j++)
- tmp.matrix[i][j]=l.matrix[i][j]-r.matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- matr matr::operator-()
- {
- cout<<endl<<"Óíàðíûé ìèíóñ ìàòðèöû #"<<nummatr;
- matr tmp (height, width);
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=-matrix[i][j];
- }
- tmp.print();
- return tmp;
- }
- matr matr::operator*(const matr &r)
- {
- cout<<endl<<"Óìíîæåíèå ìàòðèö #"<<nummatr<<" è #"<<r.nummatr<<": "<<endl;
- matr tmp (height, r.width);
- int c=0;
- if (width==r.height){
- for (int i=0; i<height; i++){
- for (int j=0; j<r.width; j++){
- for (int p=0; p<width; p++){
- //cout<<endl<< "c="<< c <<" i="<<i<< " j="<<j<<" p="<<p<<" m[i][p]="<<matrix[i][p]<<" r.m[p][j]="<<r.matrix[p][j];
- tmp.matrix[i][j]+=matrix[i][p]*r.matrix[p][j];
- }
- //tmp.matrix[i][j]=c;
- //c=0;
- }
- }
- }
- else {
- cout<<"Äåéñòâèå íåâîçìîæíî";
- }
- tmp.print();
- return tmp;
- }
- matr matr::operator*(int c)
- {
- cout<<endl<<"Óìíîæåíèå ìàòðèöû #"<<nummatr<<" íà ÷èñëî "<<c;
- matr tmp (height, width);
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- tmp.matrix[i][j]=matrix[i][j]*c;
- }
- tmp.print();
- return tmp;
- }
- matr operator*(int c, const matr &r)
- {
- cout<<endl<<"Óìíîæåíèå ÷èñëà "<<c<<" íà ìàòðèöó #"<<r.nummatr;
- matr tmp (r.height, r.width);
- for (int i=0; i<r.height; i++){
- for (int j=0; j<r.width; j++)
- tmp.matrix[i][j]=r.matrix[i][j]*c;
- }
- tmp.print();
- return tmp;
- }
- matr& matr::operator=(const matr &r)
- {
- cout<<endl<<"Ïðèñâàèâàíèå ìàòðèöå #"<<nummatr<<" çíà÷åíèé ìàòðèöû #"<<r.nummatr;
- height=r.height;
- width=r.width;
- if (matrix!=NULL) delete[]matrix;
- matrix=new double* [height];
- for (int c=0; c<height; c++){
- matrix[c]=new double [width];
- }
- for (int i=0; i<height; i++){
- for (int j=0; j<width; j++)
- matrix[i][j]=r.matrix[i][j];
- }
- return *this;
- }
- vect matr::operator* (const vect &r)
- {
- cout<<endl<<"Óìíîæåíèå ìàòðèöû #"<<nummatr<<" íà âåêòîð #"<<r.num<<": "<<endl;
- vect tmp(r.dim);
- int c = 0;
- if (width == r.dim) {
- for (int i = 0; i<r.dim; i++) {
- for (int p = 0; p<width; p++) {
- c = c + matrix[i][p]*r.v[p];
- cout<<endl<<c;
- }
- cout<<endl;
- tmp.v[i] = c;
- }
- }
- else {
- cout<<"Äåéñòâèå íåâîçìîæíî";
- }
- tmp.print();
- return tmp;
- }
- int main ()
- {
- setlocale (LC_ALL, "Russian");
- /*double x2[3] = {1, 2, 3}, x3[3] = {2, 3, 4};
- vect v1(3), v2(3, x2), v3(3, x3), v4;
- v1.print();
- v2.print();
- v3.print();
- v4.print();
- int c=v3*v2;
- v4=v3;
- v4.print();
- vect v5;
- v5=v3-v2;
- v5.print();
- vect v6;
- v6=v1+v2;
- v6.print();
- vect v7;
- v7=v2*3;
- v7.print();
- vect v8;
- v8=-v3;
- v8.print();
- vect v9;
- v9=9*v2;
- v9.print();
- double **m1;
- m1 = new double*[3];
- int k1=1;
- for (int i=0; i<3; i++)
- m1[i]=new double[3];
- m1[0][0]=1;
- m1[0][1]=2;
- m1[0][2]=3;
- m1[1][0]=1;
- m1[1][1]=2;
- m1[1][2]=3;
- m1[2][0]=1;
- m1[2][1]=2;
- m1[2][2]=3;
- double **m2;
- m2 = new double*[3];
- int k2=1;
- for (int i=0; i<3; i++)
- m2[i]=new double [3];
- m2[0][0]=1;
- m2[0][1]=2;
- m2[0][2]=3;
- m2[1][0]=1;
- m2[1][1]=2;
- m2[1][2]=3;
- m2[2][0]=1;
- m2[2][1]=2;
- m2[2][2]=3;
- matr M1 (3, 3, m1), M2 (3, 3, m2), M3;// M4(3, 3), M5, M6, M7, M8, M9;
- M1.print();
- M2.print();
- M3.print();
- //M4.print();
- //M5=M3+M4;
- //M5.print();
- //M3=M1*M2;
- M3.print();
- /*M6=M1*2;
- M6.print();
- M6=2*M2;
- M6.print();
- M7=M3-M1;
- M7.print();
- M8=-M1;
- v1.print();
- v4=M2*v3;
- v4.print();*/
- int n=10;
- double **m1;
- m1 = new double*[n];
- for (int i=0; i<n; i++)
- m1[i]=new double[n];
- for (int i=0; i<n; i++){
- for (int j=0; j<n; j++){
- if (i==j) {
- m1[i][j]=(i+1)*1000;
- }
- else m1[i][j]=0,001;
- }
- }
- double **e1;
- e1 = new double*[n];
- for (int i=0; i<n; i++)
- e1[i]=new double[n];
- for (int i=0; i<n; i++){
- for (int j=0; j<n; j++){
- if (i==j) {
- e1[i][j]=1;
- }
- else e1[i][j]=0;
- }
- }
- double v1[n];
- for (int i=0; i<n; i++){
- v1[i]=i+1;
- }
- matr a (n, n, m1); //ìàòðèöà, óäîâëåòâîðÿþùàÿ óëîâèþ ßêîáè
- cout<<endl<<"Matrix A:";
- //a.print();
- vect b(n, v1), x;
- cout<<endl<<"Vector b:";
- //b.print();
- x=b;
- cout<<endl<<"Vector x:";
- //x.print();
- matr e (n, n, e1);
- cout<<endl<<"Åäèíè÷íàÿ ìàòðèöà E:";
- //e.print();
- matr h;
- h=a.invertDiag();
- cout<<endl<<"Matrix H:";
- //h.print();
- matr z;
- z=h*a;
- cout<<endl<<"z:";
- //z.print();
- matr k;
- k=e-z;
- cout<<endl<<"koef matrix k:";
- //k.print();
- matr a1;
- a1.print();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement