Advertisement
bubuzaka

Yakoby v.0.0.

May 31st, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.98 KB | None | 0 0
  1. //тут весь код, матрицы, векторы, Якоби - все, что есть
  2.  
  3. #include <stdio.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7.  
  8. class vect
  9. {
  10. public:
  11. static int count;
  12. int num;
  13. vect (int d); //êîíñòðóêòîð
  14. vect (int d, double *x); //êîíñòðóêòîð
  15. vect(); //êîíñòðóêòîð
  16. vect (vect &x); //copyconstructor
  17. ~vect(); //äåñòðóêòîð
  18. void print(); //ïå÷àòü
  19. vect& operator+(vect r); //ñëîæåíèå âåêòîðîâ
  20. friend vect& operator-(vect &l, vect &r); //ðàçíîñòü âåêòîðîâ
  21. vect& operator-(); //óíàðíûé ìèíóñ
  22. double operator*(vect &r); //ïðîèçâåäåíèå âåêòîðîâ
  23. vect& operator*(int c); //óìíîæåíèå âåêòîðà íà ÷èñëî
  24. vect& operator=(const vect &r); //ïðèñâàèâàíèå
  25. friend vect& operator*(int c, vect &r); //óìíîæåíèå ÷èñëà íà âåêòîð
  26. friend class matr;
  27. private:
  28. int dim;
  29. double *v;
  30. };
  31.  
  32. int vect::count=0;
  33.  
  34. vect::vect()
  35. {
  36. count++;
  37. num=count;
  38. dim=1;
  39. v=new double [dim];
  40. for (int i=0; i<dim; i++)
  41. v[i]=0;
  42. cout<<endl<<"Êîíñòðóêòîð vect () ñîçäàë âåêòîð #"<<num<<endl;
  43. }
  44.  
  45. vect::vect (int d)
  46. {
  47. count++;
  48. num=count;
  49. dim=d;
  50. v=new double [dim];
  51. for (int i=0; i<dim; i++)
  52. v[i]=0;
  53. cout<<endl<<"Êîíñòðóêòîð vect (int) ñîçäàë âåêòîð #"<<num<<endl;
  54. }
  55.  
  56. vect::vect (int d, double *x)
  57. {
  58. count++;
  59. num=count;
  60. dim=d;
  61. v=new double [dim];
  62. for (int i=0; i<dim; i++)
  63. v[i]=x[i];
  64. cout<<endl<<"Êîíñòðóêòîð vect (int, double *) ñîçäàë âåêòîð #"<<num<<endl;
  65. }
  66.  
  67. vect::vect (vect &x)
  68. {
  69. count++;
  70. num=count;
  71. dim=x.dim;
  72. v=new double [dim];
  73. for (int i=0; i<dim; i++)
  74. v[i]=x.v[i];
  75. cout<<endl<<"Êîñòðóêòîð êîïèðîâàíèÿ vect (vect &) ñîçäàë âåêòîð #"<<num<<endl;
  76. }
  77.  
  78. vect::~vect()
  79. {
  80. cout<<endl<<"Óäàëåíèå âåêòîðà #"<<num<<endl;
  81. /*delete []v;*/
  82. }
  83.  
  84. vect& vect::operator+(vect r)
  85. {
  86. cout<<endl<<"Ñëîæåíèå âåêòîðîâ #"<<num<<" è #"<<r.num<<endl;
  87. vect tmp (dim);
  88. for (int i=0; i<dim; i++)
  89. tmp.v[i]=v[i]+r.v[i];
  90. tmp.print();
  91. return tmp;
  92. }
  93.  
  94. vect& operator-(vect &l, vect &r)
  95. {
  96. cout<<endl<<"Âû÷èòàíèå âåêòîðîâ #"<<l.num<<" è #"<<r.num;
  97. vect tmp(l.dim);
  98. for (int i=0; i<l.dim; i++)
  99. tmp.v[i]=l.v[i]-r.v[i];
  100. tmp.print();
  101. return tmp;
  102. }
  103.  
  104. vect& vect::operator-()
  105. {
  106. cout<<endl<<"Óíàðíûé ìèíóñ âåêòîðà #"<<num;
  107. vect tmp (dim);
  108. for (int i=0; i<dim; i++)
  109. tmp.v[i]=-v[i];
  110. tmp.print();
  111. return tmp;
  112. }
  113.  
  114. double vect::operator*(vect &r)
  115. {
  116. cout<<endl<<"Óìíîæåíèå âåêòîðîâ #"<<num<<" è #"<<r.num<<": ";
  117. int c=0;
  118. for (int i=0; i<dim; i++)
  119. c=c+(v[i]*r.v[i]);
  120. cout<<c<<endl;
  121. return c;
  122. }
  123.  
  124. vect& vect::operator=(const vect &r)
  125. {
  126. cout<<endl<<"Ïðèñâàèâàíèå âåêòîðó #"<<num<<" çíà÷åíèé âåêòîðà #"<<r.num;
  127. dim=r.dim;
  128. if (v!=NULL) delete[]v;
  129. v=new double [dim];
  130. for (int i=0; i<dim; i++)
  131. v[i]=r.v[i];
  132. return *this;
  133. }
  134.  
  135. vect& vect::operator*(int c)
  136. {
  137. cout<<endl<<"Óìíîæåíèå âåêòîðà #"<<num<<" íà ÷èñëî "<<c;
  138. vect tmp (dim);
  139. for (int i=0; i<dim; i++)
  140. tmp.v[i]=v[i]*c;
  141. tmp.print();
  142. return tmp;
  143. }
  144.  
  145. vect& operator*(int c, vect &r)
  146. {
  147. cout<<endl<<"Óìíîæåíèå ÷èñëà "<<c<<" íà âåêòîð #"<<r.num;
  148. vect tmp (r.dim);
  149. for (int i=0; i<r.dim; i++)
  150. tmp.v[i]=r.v[i]*c;
  151. tmp.print();
  152. return tmp;
  153. }
  154.  
  155. void vect::print()
  156. {
  157.  
  158. cout<<endl<<"Âåêòîð #"<<num<<" (";
  159. for (int i=0; i<dim; i++)
  160. {
  161. cout<<v[i];
  162. if (i<dim-1) cout<<", ";
  163. }
  164. cout<<")"<<endl;
  165. }
  166.  
  167. class matr
  168. {
  169. public:
  170. static int countmatr;
  171. int nummatr;
  172. matr ();
  173. matr (int h, int w);
  174. matr (int h, int w, double **x);
  175. matr (const matr &x);
  176. ~matr();
  177. matr invertDiag();
  178. void print();
  179. matr& operator +(const matr &r); //ñëîæåíèå ìàòðèö
  180. friend matr operator-(const matr &l, const matr &r); //âû÷èòàíèå
  181. matr operator-(); //óíàðíûé ìèíóñ
  182. matr operator*(const matr &r); //óìíîæåíèå ìàòðèö
  183. matr operator*(int c); //óìíîæåíèå íà ÷èñëî
  184. friend matr operator*(int c, const matr &r); //÷èñëî íà ìàòðèöó
  185. matr& operator=(const matr &r); //ïðèñâàèâàíèå
  186. vect operator* (const vect &r); //äðóæ ô-ÿ ê âåêò
  187. private:
  188. int height;
  189. int width;
  190. double **matrix;
  191.  
  192. };
  193.  
  194. int matr::countmatr=0;
  195.  
  196. matr::matr()
  197. {
  198. countmatr++;
  199. nummatr=countmatr;
  200. height=3;
  201. width=3;
  202. matrix=new double* [height];
  203. for (int c=0; c<height; c++){
  204. matrix[c]=new double [width];
  205. }
  206. for (int i=0; i<height; i++){
  207. for (int j=0; j<width; j++)
  208. matrix[i][j]=1;
  209. }
  210. cout<<endl<<"Êîíñòðóêòîð matr () ñîçäàë ìàòðèöó #"<<nummatr<<endl;
  211. }
  212.  
  213. matr::matr (int h, int w)
  214. {
  215.  
  216. countmatr++;
  217. nummatr=countmatr;
  218. height=h;
  219. width=w;
  220. matrix=new double* [height];
  221. for (int c=0; c<height; c++){
  222. matrix[c]=new double [width];
  223. }
  224. for (int i=0; i<height; i++){
  225. for (int j=0; j<width; j++)
  226. matrix[i][j]=1;
  227. }
  228. cout<<endl<<"Êîíñòðóêòîð matr (int, int) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
  229. }
  230.  
  231. matr::matr (int h, int w, double **x)
  232. {
  233. countmatr++;
  234. nummatr=countmatr;
  235. width=w;
  236. height=h;
  237. matrix=new double* [height];
  238. for (int c=0; c<height; c++){
  239. matrix[c]=new double [width];
  240. }
  241. for (int i=0; i<height; i++) {
  242. for (int j=0; j<width; j++){
  243. matrix[i][j]=x[i][j];
  244. }
  245. }
  246. cout<<endl<<"Êîíñòðóêòîð matr (int, int. double *) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
  247. }
  248.  
  249. matr::matr (const matr &x)
  250. {
  251. countmatr++;
  252. nummatr=countmatr;
  253. height=x.height;
  254. width=x.width;
  255. matrix=new double* [height];
  256. for (int c=0; c<height; c++){
  257. matrix[c]=new double [width];
  258. }
  259. for (int i=0; i<height; i++){
  260. for (int j=0; j<width; j++)
  261. matrix[i][j]=x.matrix[i][j];
  262. }
  263. cout<<endl<<"Êîñòðóêòîð êîïèðîâàíèÿ matr (matr &) ñîçäàë ìàòðèöó #"<<nummatr<<endl;
  264. }
  265.  
  266. matr::~matr()
  267. {
  268. cout<<endl<<"Óäàëåíèå ìàòðèöû #"<<nummatr<<endl;
  269. /*delete []v;*/
  270. }
  271.  
  272. matr matr::invertDiag()
  273. {
  274. for (int i=0; i<height; i++){
  275. for (int j=0; j<width; j++){
  276. if (i==j && matrix[i][j]!=0){
  277. matrix[i][j]=1/matrix[i][j];
  278. }
  279. else matrix[i][j]=0;
  280. }
  281. }
  282. return *this;
  283. }
  284.  
  285. void matr::print()
  286. {
  287. cout<<endl<<"Ìàòðèöà #"<<nummatr<<endl;
  288. for (int i=0; i<height; i++){
  289. for (int j=0; j<width; j++)
  290. {
  291. cout<<matrix[i][j]<<" ";
  292. }
  293. cout<<endl;
  294. }
  295. cout<<endl;
  296. }
  297.  
  298. matr& matr::operator +(const matr &r)
  299. {
  300. cout<<endl<<"Ñëîæåíèå ìàòðèö #"<<nummatr<<" è #"<<r.nummatr<<endl;
  301. matr tmp (height, width);
  302. if (height!=r.height || width!=r.width){
  303. cout<<"Error! Matrixes rn't the same";
  304. }
  305. else {
  306. for (int i=0; i<height; i++){
  307. for (int j=0; j<width; j++)
  308. tmp.matrix[i][j]=matrix[i][j]+r.matrix[i][j];
  309. }
  310. tmp.print();
  311. return tmp;
  312. }
  313.  
  314. }
  315.  
  316. matr operator-(const matr &l, const matr &r)
  317. {
  318. cout<<endl<<"Ðàçíîñòü ìàòðèö #"<<l.nummatr<<" è #"<<r.nummatr;
  319. matr tmp(l.height, l.width);
  320. for (int i=0; i<l.height; i++){
  321. for (int j=0; j<l.width; j++)
  322. tmp.matrix[i][j]=l.matrix[i][j]-r.matrix[i][j];
  323. }
  324. tmp.print();
  325. return tmp;
  326. }
  327.  
  328. matr matr::operator-()
  329. {
  330. cout<<endl<<"Óíàðíûé ìèíóñ ìàòðèöû #"<<nummatr;
  331. matr tmp (height, width);
  332. for (int i=0; i<height; i++){
  333. for (int j=0; j<width; j++)
  334. tmp.matrix[i][j]=-matrix[i][j];
  335. }
  336. tmp.print();
  337. return tmp;
  338. }
  339.  
  340. matr matr::operator*(const matr &r)
  341. {
  342. cout<<endl<<"Óìíîæåíèå ìàòðèö #"<<nummatr<<" è #"<<r.nummatr<<": "<<endl;
  343. matr tmp (height, r.width);
  344. int c=0;
  345. if (width==r.height){
  346. for (int i=0; i<height; i++){
  347. for (int j=0; j<r.width; j++){
  348. for (int p=0; p<width; p++){
  349. //cout<<endl<< "c="<< c <<" i="<<i<< " j="<<j<<" p="<<p<<" m[i][p]="<<matrix[i][p]<<" r.m[p][j]="<<r.matrix[p][j];
  350. tmp.matrix[i][j]+=matrix[i][p]*r.matrix[p][j];
  351. }
  352. //tmp.matrix[i][j]=c;
  353. //c=0;
  354. }
  355. }
  356. }
  357. else {
  358. cout<<"Äåéñòâèå íåâîçìîæíî";
  359. }
  360. tmp.print();
  361. return tmp;
  362. }
  363.  
  364. matr matr::operator*(int c)
  365. {
  366. cout<<endl<<"Óìíîæåíèå ìàòðèöû #"<<nummatr<<" íà ÷èñëî "<<c;
  367. matr tmp (height, width);
  368. for (int i=0; i<height; i++){
  369. for (int j=0; j<width; j++)
  370. tmp.matrix[i][j]=matrix[i][j]*c;
  371. }
  372. tmp.print();
  373. return tmp;
  374. }
  375.  
  376. matr operator*(int c, const matr &r)
  377. {
  378. cout<<endl<<"Óìíîæåíèå ÷èñëà "<<c<<" íà ìàòðèöó #"<<r.nummatr;
  379. matr tmp (r.height, r.width);
  380. for (int i=0; i<r.height; i++){
  381. for (int j=0; j<r.width; j++)
  382. tmp.matrix[i][j]=r.matrix[i][j]*c;
  383. }
  384. tmp.print();
  385. return tmp;
  386. }
  387.  
  388. matr& matr::operator=(const matr &r)
  389. {
  390. cout<<endl<<"Ïðèñâàèâàíèå ìàòðèöå #"<<nummatr<<" çíà÷åíèé ìàòðèöû #"<<r.nummatr;
  391. height=r.height;
  392. width=r.width;
  393. if (matrix!=NULL) delete[]matrix;
  394. matrix=new double* [height];
  395. for (int c=0; c<height; c++){
  396. matrix[c]=new double [width];
  397. }
  398. for (int i=0; i<height; i++){
  399. for (int j=0; j<width; j++)
  400. matrix[i][j]=r.matrix[i][j];
  401. }
  402. return *this;
  403. }
  404.  
  405. vect matr::operator* (const vect &r)
  406.  
  407. {
  408. cout<<endl<<"Óìíîæåíèå ìàòðèöû #"<<nummatr<<" íà âåêòîð #"<<r.num<<": "<<endl;
  409. vect tmp(r.dim);
  410. int c = 0;
  411. if (width == r.dim) {
  412. for (int i = 0; i<r.dim; i++) {
  413. for (int p = 0; p<width; p++) {
  414. c = c + matrix[i][p]*r.v[p];
  415. cout<<endl<<c;
  416. }
  417. cout<<endl;
  418. tmp.v[i] = c;
  419. }
  420. }
  421. else {
  422. cout<<"Äåéñòâèå íåâîçìîæíî";
  423. }
  424. tmp.print();
  425. return tmp;
  426. }
  427.  
  428.  
  429.  
  430. int main ()
  431. {
  432. setlocale (LC_ALL, "Russian");
  433. /*double x2[3] = {1, 2, 3}, x3[3] = {2, 3, 4};
  434. vect v1(3), v2(3, x2), v3(3, x3), v4;
  435. v1.print();
  436. v2.print();
  437. v3.print();
  438. v4.print();
  439. int c=v3*v2;
  440. v4=v3;
  441. v4.print();
  442. vect v5;
  443. v5=v3-v2;
  444. v5.print();
  445. vect v6;
  446. v6=v1+v2;
  447. v6.print();
  448. vect v7;
  449. v7=v2*3;
  450. v7.print();
  451. vect v8;
  452. v8=-v3;
  453. v8.print();
  454. vect v9;
  455. v9=9*v2;
  456. v9.print();
  457.  
  458. double **m1;
  459. m1 = new double*[3];
  460. int k1=1;
  461. for (int i=0; i<3; i++)
  462. m1[i]=new double[3];
  463. m1[0][0]=1;
  464. m1[0][1]=2;
  465. m1[0][2]=3;
  466. m1[1][0]=1;
  467. m1[1][1]=2;
  468. m1[1][2]=3;
  469. m1[2][0]=1;
  470. m1[2][1]=2;
  471. m1[2][2]=3;
  472.  
  473. double **m2;
  474. m2 = new double*[3];
  475. int k2=1;
  476. for (int i=0; i<3; i++)
  477. m2[i]=new double [3];
  478. m2[0][0]=1;
  479. m2[0][1]=2;
  480. m2[0][2]=3;
  481. m2[1][0]=1;
  482. m2[1][1]=2;
  483. m2[1][2]=3;
  484. m2[2][0]=1;
  485. m2[2][1]=2;
  486. m2[2][2]=3;
  487.  
  488. matr M1 (3, 3, m1), M2 (3, 3, m2), M3;// M4(3, 3), M5, M6, M7, M8, M9;
  489. M1.print();
  490. M2.print();
  491. M3.print();
  492. //M4.print();
  493. //M5=M3+M4;
  494. //M5.print();
  495. //M3=M1*M2;
  496. M3.print();
  497. /*M6=M1*2;
  498. M6.print();
  499. M6=2*M2;
  500. M6.print();
  501. M7=M3-M1;
  502. M7.print();
  503. M8=-M1;
  504. v1.print();
  505. v4=M2*v3;
  506. v4.print();*/
  507.  
  508. int n=10;
  509.  
  510. double **m1;
  511. m1 = new double*[n];
  512. for (int i=0; i<n; i++)
  513. m1[i]=new double[n];
  514. for (int i=0; i<n; i++){
  515. for (int j=0; j<n; j++){
  516. if (i==j) {
  517. m1[i][j]=(i+1)*1000;
  518. }
  519. else m1[i][j]=0,001;
  520. }
  521. }
  522.  
  523. double **e1;
  524. e1 = new double*[n];
  525. for (int i=0; i<n; i++)
  526. e1[i]=new double[n];
  527. for (int i=0; i<n; i++){
  528. for (int j=0; j<n; j++){
  529. if (i==j) {
  530. e1[i][j]=1;
  531. }
  532. else e1[i][j]=0;
  533. }
  534. }
  535.  
  536. double v1[n];
  537. for (int i=0; i<n; i++){
  538. v1[i]=i+1;
  539. }
  540.  
  541. matr a (n, n, m1); //ìàòðèöà, óäîâëåòâîðÿþùàÿ óëîâèþ ßêîáè
  542. cout<<endl<<"Matrix A:";
  543. //a.print();
  544. vect b(n, v1), x;
  545. cout<<endl<<"Vector b:";
  546. //b.print();
  547. x=b;
  548. cout<<endl<<"Vector x:";
  549. //x.print();
  550. matr e (n, n, e1);
  551. cout<<endl<<"Åäèíè÷íàÿ ìàòðèöà E:";
  552. //e.print();
  553. matr h;
  554. h=a.invertDiag();
  555. cout<<endl<<"Matrix H:";
  556. //h.print();
  557. matr z;
  558. z=h*a;
  559. cout<<endl<<"z:";
  560. //z.print();
  561. matr k;
  562. k=e-z;
  563. cout<<endl<<"koef matrix k:";
  564. //k.print();
  565. matr a1;
  566. a1.print();
  567. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement