Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.40 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. Interface
  4. uses SysUtils,Math;
  5. // Объявление типов
  6. Type
  7. // Опережающая декларация интерфейса матрицы
  8. IMatrix = Interface;
  9. IVector = Interface;
  10. // Интерфейс вектора
  11. IVector = Interface
  12. // Функция получения значения элемента
  13. function GetItem(i: Integer): Extended;
  14. // Процедура установки значения элемента
  15. procedure SetItem(i: Integer; value: Extended);
  16. // Функция получения размера вектора
  17. function GetSize: Integer;
  18. // Функция получения индекса последнего элемента
  19. function GetHigh: Integer;
  20. // Функция создания копии объекта
  21. function Clone: IVector;
  22. // Процедура изменения размера вектора
  23. procedure Resize(n: Integer);
  24. // Функция сложения векторов
  25. function Add( a: IVector ): IVector;
  26. // Функция вычитания векторов
  27. function Sub( a: IVector ): IVector;
  28. // Функция умножения вектора на число
  29. function Mult( a: Extended ): IVector; overload;
  30. // Функция умножения вектора на матрицу
  31. function Mult( a: IMatrix ): IMatrix; overload;
  32. // Функция скалярного произведения векторов
  33. function Mult( a: IVector ): Extended; overload;
  34. // Функция векторного произведения векторов
  35. function Cross( a: IVector ): IVector;
  36. // Функция получения модуля вектора
  37. function Length: Extended;
  38. // Процедура нормирования вектора
  39. procedure Norm;
  40. // Свойство для чтения и изменения размера вектора
  41. property Size: Integer read GetSize write Resize;
  42. // Свойство для чтения индекса последнего элемента
  43. property High: Integer read GetHigh;
  44. // Свойство для доступа к элементам вектора
  45. property Item[i: Integer]: Extended read GetItem write SetItem; default;
  46. end;
  47. // Интерфейс матрицы
  48. IMatrix = Interface
  49. // Функция получения значения элемента
  50. function GetItem(i,j: Integer): Extended;
  51. // Процедура установки значение элемента
  52. procedure SetItem(i,j: Integer; value: Extended);
  53. // Функция получения кол-ва строк
  54. function GetRowCount: Integer;
  55. // Функция получения кол-ва столбцов
  56. function GetColCount: Integer;
  57. // Функция получения индекса последней строки
  58. function GetRowHigh: Integer;
  59. // Функция получения индекса последнего столбца
  60. function GetColHigh: Integer;
  61. // Функция создания копии объекта
  62. function Clone: IMatrix;
  63. // Процедура изменения размерности
  64. procedure Resize(n, m: Integer);
  65. // Функция сложения матриц
  66. function Add( a: IMatrix ): IMatrix;
  67. // Функция вычитания матриц
  68. function Sub( a: IMatrix ): IMatrix;
  69. // Функция умножения матрицы на матрицу
  70. function Mult( a: IMatrix ): IMatrix; overload;
  71. // Функция умножения матрицы на число
  72. function Mult( a: Extended ): IMatrix; overload;
  73. // Функция умножения матрицы на вектор
  74. function Mult( a: IVector ): IVector; overload;
  75. // Функция вычисления определителя
  76. function Det: Extended;
  77. // Функция обращения матрицы
  78. function Inv: IMatrix;
  79. // Функция транспонирования матрицы
  80. function T: IMatrix;
  81. // Процедура перестановки строк
  82. procedure SwapRows(i, j: Integer);
  83. // Свойство для достуа к элементам матрицы
  84. property Item[i,j: Integer]: Extended read GetItem write SetItem; default;
  85. // Свойство для чтения количества строк
  86. property RowCount: Integer read GetRowCount;
  87. // Свойство для чтения количества столбцов
  88. property ColCount: Integer read GetColCount;
  89. // Свойство для чтения индекса последней строки
  90. property RowHigh: Integer read GetRowHigh;
  91. // Свойство для чтения индекса последнего столбца
  92. property ColHigh: Integer read GetColHigh;
  93. end;
  94. // Объявление класса векторов
  95. TVector = class( TInterfacedObject, IVector )
  96. protected
  97. data: array of Extended;
  98. public
  99. // Конструктор по умолчанию
  100. constructor Create; overload;
  101. // Конструктор по количеству элементов
  102. constructor Create(n: Integer); overload;
  103. // Конструктор на основе обычного массива
  104. constructor Create(a: array of Extended); overload;
  105. // Деструктор
  106. destructor Destroy;
  107. // Функция получения значения элемента
  108. function GetItem(i: Integer): Extended;
  109. // Процедура установки значения элемента
  110. procedure SetItem(i: Integer; value: Extended);
  111. // Функция получения размера вектора
  112. function GetSize: Integer;
  113. // Функция получения индекса последнего элемента
  114. function GetHigh: Integer;
  115. // Функция создания копии объекта
  116. function Clone: IVector;
  117. // Функция изменения размера вектора
  118. procedure Resize(n: Integer);
  119. // Функция сложения векторов
  120. function Add( a: IVector ): IVector;
  121. // Функция вычитания векторов
  122. function Sub( a: IVector ): IVector;
  123. // Функция умножения вектора на число
  124. function Mult( a: Extended ): IVector; overload;
  125. // Функция умножения вектора на матрицу
  126. function Mult( a: IMatrix ): IMatrix; overload;
  127. // Функция скалярного произведения векторов
  128. function Mult( a: IVector ): Extended; overload;
  129. // Функция векторного произведения векторов
  130. function Cross( a: IVector ): IVector;
  131. // Функция получения модуля вектора
  132. function Length: Extended;
  133. // Процедура нормирования вектора
  134. procedure Norm;
  135. // Свойство для чтения и изменения размера вектора
  136. property Size: Integer read GetSize write Resize;
  137. // Свойство для чтения индекса последнего элемента
  138. property High: Integer read GetHigh;
  139. // Свойство для доступа к элементам вектора
  140. property Item[i: Integer]: Extended read GetItem write SetItem; default;
  141. end;
  142. // Объявление класса матриц
  143. TMatrix = class( TInterfacedObject, IMatrix )
  144. protected
  145. data: array of array of Extended;
  146. public
  147. // Конструктор по умолчанию
  148. constructor Create; overload;
  149. // Конструктор по количеству элементов
  150. constructor Create(n, m: Integer); overload;
  151. // Деструктор
  152. destructor Destroy;
  153. // Функция получения значения элемента
  154. function GetItem(i,j: Integer): Extended;
  155. // Процедура установки значение элемента
  156. procedure SetItem(i,j: Integer; value: Extended);
  157. // Функция получения кол-ва строк
  158. function GetRowCount: Integer;
  159. // Функция получения кол-ва столбцов
  160. function GetColCount: Integer;
  161. // Функция получения индекса последней строки
  162. function GetRowHigh: Integer;
  163. // Функция получения индекса последнего столбца
  164. function GetColHigh: Integer;
  165. // Функция создания копии объекта
  166. function Clone: IMatrix;
  167. // Функция изменения размерности
  168. procedure Resize(n, m: Integer);
  169. // Функция сложения матриц
  170. function Add( a: IMatrix ): IMatrix;
  171. // Функция вычитания матриц
  172. function Sub( a: IMatrix ): IMatrix;
  173. // Функция умножения матрицы на матрицу
  174. function Mult( a: IMatrix ): IMatrix; overload;
  175. // Функция умножения матрицы на число
  176. function Mult( a: Extended ): IMatrix; overload;
  177. // Функция умножения матрицы на вектор
  178. function Mult( a: IVector ): IVector; overload;
  179. // Функция вычисления определителя
  180. function Det: Extended;
  181. // Функция обращения матрицы
  182. function Inv: IMatrix;
  183. // Функция транспонирования матрицы
  184. function T: IMatrix;
  185. // Процедура перестановки строк
  186. procedure SwapRows(i, j: Integer);
  187. // Порождающая функция для формирования единичной матрицы
  188. class function E(n: Integer): IMatrix; static;
  189. // Свойство для достуа к элементам матрицы
  190. property Item[i,j: Integer]: Extended read GetItem write SetItem; default;
  191. // Свойство для чтения количества строк
  192. property RowCount: Integer read GetRowCount;
  193. // Свойство для чтения количества столбцов
  194. property ColCount: Integer read GetColCount;
  195. // Свойство для чтения индекса последней строки
  196. property RowHigh: Integer read GetRowHigh;
  197. // Свойство для чтения индекса последнего столбца
  198. property ColHigh: Integer read GetColHigh;
  199. end;
  200. // Объявление класса симметричных матриц
  201. TSymmetricMatrix = class( TMatrix );
  202. // Процедура установки значения элемента
  203. procedure SetItem(i,j: Integer; value: Extended);
  204.  
  205.  
  206.  
  207. implementation
  208. constructor TVector.Create;
  209. begin
  210. Resize(1);
  211. end;
  212.  
  213. constructor TVector.Create(n: Integer);
  214. begin
  215. Resize(n);
  216. end;
  217.  
  218. constructor TVector.Create(a: array of Extended);
  219. begin
  220. Resize(System.Length(data));
  221. end;
  222.  
  223. destructor TVector.Destroy;
  224. begin
  225. data:=nil;
  226. end;
  227.  
  228. function TVector.GetItem(i: Integer): Extended;
  229. begin
  230. Result := data[i];
  231. end;
  232.  
  233. procedure TVector.SetItem(i: Integer; value: Extended);
  234. begin
  235. data[i] := value ;
  236. end;
  237.  
  238. function TVector.GetSize: Integer;
  239. begin
  240. Result := System.Length(data);
  241. end;
  242.  
  243. function TVector.GetHigh: Integer;
  244. begin
  245. Result := System.High(data);
  246. end;
  247.  
  248. function TVector.Clone: IVector;
  249. begin
  250. Result := TVector.Create;
  251. (Result as TVector).data := self.data;
  252. Result.Resize(self.Size);
  253.  
  254. end;
  255.  
  256. procedure TVector.Resize(n: Integer);
  257. begin
  258. SetLength(data, n);
  259. end;
  260.  
  261. function TVector.Add( a: IVector ): IVector;
  262. var
  263. i: Integer;
  264. begin
  265.  
  266. {$IFDEF Debug}
  267.  
  268. if System.Length(data) <> a.Size then
  269.  
  270. raise Exception.Create('Несовместимые размерности');
  271.  
  272. {$ENDIF}
  273.  
  274. Result:= TVector.Create(a.Size);
  275.  
  276. for i := 0 to a.High do begin
  277. Result[i] := a[i] + data[i];
  278.  
  279. end;
  280. end;
  281.  
  282. function TVector.Sub( a: IVector ): IVector;
  283. var
  284. i: Integer;
  285. begin
  286.  
  287. {$IFDEF Debug}
  288.  
  289. if System.Length(data) <> a.Size then
  290.  
  291. raise Exception.Create('Несовместимые размерности');
  292.  
  293. {$ENDIF}
  294.  
  295. Result:= TVector.Create(a.Size);
  296.  
  297. for i := 0 to a.High do begin
  298. Result[i] := data[i] - a[i];
  299. end;
  300.  
  301. end;
  302.  
  303. function TVector.Mult( a: Extended ): IVector;
  304. var
  305. i: Integer;
  306. begin
  307. for i := 0 to System.Length(data)-1 do begin
  308. data[i] := data[i] * a;
  309.  
  310. end;
  311. end;
  312.  
  313. function TVector.Mult( a: IMatrix ): IMatrix;
  314. var
  315. i,j: Integer;
  316. begin
  317.  
  318. {$IFDEF Debug}
  319.  
  320. if 1 <> a.RowCount then
  321.  
  322. raise Exception.Create('Несовместимые размерности');
  323.  
  324. {$ENDIF}
  325. Result:= TMatrix.Create(System.Length(data),a.ColCount);
  326.  
  327. for i := 0 to System.Length(data)-1 do begin
  328. for j := 0 to a.ColHigh do
  329. Result[i,j] := data[i]*a[0,j];
  330. end;
  331. end;
  332.  
  333. function TVector.Mult( a: IVector ): Extended;
  334. var
  335. i:integer;
  336. begin
  337. {$IFDEF Debug}
  338. if System.Length(data) <> a.Size then
  339. raise Exception.Create('Несовместимые размерности');
  340. {$ENDIF}
  341.  
  342. for i := 0 to a.High do begin
  343. Result := Result + data[i]*a[i];
  344. end;
  345.  
  346. end;
  347.  
  348. function TVector.Cross( a: IVector ): IVector;
  349. var
  350. i,j,k,l,n:integer;
  351. Matrix,MatrixD: TMatrix;
  352. begin
  353. {$IFDEF Debug}
  354. if (System.Length(data) <> a.Size) then
  355.  
  356. raise Exception.Create('Несовместимые размерности');
  357. {$ENDIF}
  358. Result:= TVector.Create(a.Size);
  359. Matrix:= TMatrix.Create(System.Length(data)-1,System.Length(data)-1);
  360. MatrixD := TMatrix.Create(System.Length(data),System.Length(data));
  361. for i := 0 to a.High do begin
  362. MatrixD[0,i]:=1;
  363. MatrixD[1,i]:=data[i];
  364. MatrixD[2,i]:=a[i];
  365. end;
  366. for i := 0 to System.High(data) do begin
  367. l:=0;
  368. for j := 1 to System.High(data) do begin
  369. n:=0;
  370. for k:=0 to System.High(data) do begin
  371. if (k<>i) then begin
  372. Matrix[l,n]:=MatrixD[j,k];//Матрица после разложения
  373. inc(n);
  374. end;
  375. end;
  376. inc(l);
  377. end;
  378. Result[i]:=power(-1,i+2)*MatrixD[0,i]*Matrix.Det;//Считаем с помощью рекурсии
  379. end;
  380.  
  381.  
  382. end;
  383.  
  384. function TVector.Length: Extended;
  385. var
  386. i: Integer;
  387. begin
  388. Result:=0;
  389. for i := 0 to System.Length(data)-1 do begin
  390. Result := Result+ data[i]*data[i];
  391. end;
  392. Result := sqrt(Result);
  393.  
  394. end;
  395.  
  396. procedure TVector.Norm;
  397. var
  398. i: integer;
  399. modul : Extended;
  400. begin
  401. modul := Length();
  402. for i := 0 to System.Length(data)-1 do begin
  403. data[i] := data[i]/modul;
  404. end;
  405. end;
  406.  
  407. constructor TMatrix.Create;
  408. begin
  409. Resize(1,1);
  410. end;
  411.  
  412. constructor TMatrix.Create(n, m: Integer);
  413. begin
  414. Resize(n,m);
  415. end;
  416.  
  417. destructor TMatrix.Destroy;
  418. begin
  419. data:=nil;
  420. end;
  421.  
  422. function TMatrix.GetItem(i,j: Integer): Extended;
  423. begin
  424. Result := data[i,j];
  425. end;
  426.  
  427. procedure TMatrix.SetItem(i,j: Integer; value: Extended);
  428. begin
  429. data[i,j] := value ;
  430. end;
  431.  
  432. function TMatrix.GetRowCount: Integer;
  433. begin
  434. Result:= System.Length(data);
  435. end;
  436.  
  437. function TMatrix.GetColCount: Integer;
  438. begin
  439. Result:= System.Length(data[0]);
  440. end;
  441.  
  442. function TMatrix.GetRowHigh: Integer;
  443. begin
  444. Result:= System.High(data);
  445. end;
  446.  
  447. function TMatrix.GetColHigh: Integer;
  448. begin
  449. Result:= System.High(data[0]);
  450. end;
  451.  
  452. function TMatrix.Clone: IMatrix;
  453. begin
  454. Result := TMatrix.Create;
  455. (Result as TMatrix).data := self.data;
  456. Result.Resize(self.RowCount,self.ColCount);
  457. end;
  458.  
  459. procedure TMatrix.Resize(n, m: Integer);
  460. begin
  461. SetLength(data, n,m);
  462. end;
  463.  
  464. function TMatrix.Add( a: IMatrix ): IMatrix;
  465. var
  466. i,j: Integer;
  467. begin
  468.  
  469. {$IFDEF Debug}
  470.  
  471. if (System.Length(data[0]) <> a.ColCount) and (System.Length(data) <> a.RowCount) then
  472.  
  473. raise Exception.Create('Несовместимые размерности');
  474.  
  475. {$ENDIF}
  476.  
  477. Result:= TMatrix.Create(a.RowCount,a.ColCount);
  478.  
  479. for i := 0 to a.RowHigh do begin
  480. for j := 0 to a.ColHigh do
  481. Result[i,j] := a[i,j] + data[i,j];
  482. end;
  483.  
  484. end;
  485.  
  486. function TMatrix.Sub( a: IMatrix ): IMatrix;
  487. var
  488. i,j: Integer;
  489. begin
  490.  
  491. {$IFDEF Debug}
  492.  
  493. if (System.Length(data[0]) <> a.ColCount) and (System.Length(data) <> a.RowCount) then
  494.  
  495. raise Exception.Create('Несовместимые размерности');
  496.  
  497. {$ENDIF}
  498.  
  499. Result:= TMatrix.Create(a.RowCount,a.ColCount);
  500.  
  501. for i := 0 to a.RowHigh do begin
  502. for j := 0 to a.ColHigh do
  503. Result[i,j] := a[i,j] - data[i,j];
  504. end;
  505.  
  506. end;
  507.  
  508. function TMatrix.Mult( a: IMatrix ): IMatrix;
  509. var
  510. j,l,m: Integer;
  511. begin
  512.  
  513. {$IFDEF Debug}
  514.  
  515. if (System.Length(data) <> a.ColCount) and (System.Length(data[0]) <> a.RowCount) then
  516.  
  517. raise Exception.Create('Несовместимые размерности');
  518.  
  519. {$ENDIF}
  520.  
  521. Result:= TMatrix.Create(System.Length(data),a.ColCount);
  522. for l := 0 to System.High(data) do
  523. for m := 0 to a.ColHigh do
  524. for j := 0 to a.RowHigh do
  525. Result[l,m] :=Result[l,m]+ data[l,j] * a[j,m];
  526.  
  527. end;
  528.  
  529. function TMatrix.Mult( a: Extended ): IMatrix;
  530. var
  531. i,j:integer;
  532. begin
  533. Result:= TMatrix.Create(System.Length(data),System.Length(data[0]));
  534. for i := 0 to System.High(data) do
  535. for j := 0 to System.High(data[0]) do
  536. Result[i,j]:=data[i,j]*a;
  537.  
  538.  
  539. end;
  540.  
  541. function TMatrix.Mult( a: IVector ): IVector;
  542. var
  543. i,j:integer;
  544. begin
  545. {$IFDEF Debug}
  546.  
  547. if (System.Length(data[0]) <> a.Size) then
  548.  
  549. raise Exception.Create('Несовместимые размерности');
  550.  
  551. {$ENDIF}
  552. Result:= TVector.Create(System.Length(data));
  553. for i := 0 to System.High(data) do
  554. for j := 0 to System.High(data[0]) do
  555. Result[i]:=Result[i]+data[i,j]*a[j];
  556.  
  557. end;
  558.  
  559. function TMatrix.Det: Extended;
  560. var
  561. i,j,k,l,n:integer;
  562. Matrix: TMatrix;
  563. begin
  564. {$IFDEF Debug}
  565. if (System.Length(data[0]) <> System.Length(data)) then
  566.  
  567. raise Exception.Create('Несовместимые размерности');
  568. {$ENDIF}
  569. //Разложим определитель по первой строке
  570. Result:=0;
  571. if System.Length(data)=1 then
  572. Result:=data[0,0] //Если определитель 1Х1
  573. else if System.Length(data)=2 then
  574. Result:=data[0,0]*data[1,1]-data[0,1]*data[1,0]//Если определитель 2Х2
  575. else if System.Length(data)>=3 then begin
  576. Matrix:= TMatrix.Create(System.Length(data)-1,System.Length(data)-1);
  577. for i := 0 to System.High(data) do begin
  578. l:=0;
  579. for j := 1 to System.High(data) do begin
  580. n:=0;
  581. for k:=0 to System.High(data) do begin
  582. if (k<>i) then begin
  583. Matrix[l,n]:=data[j,k];//Матрица после разложения
  584. inc(n);
  585. end;
  586. end;
  587. inc(l);
  588. end;
  589. Result:=Result+power(-1,i+2)*data[0,i]*Matrix.Det;//Считаем с помощью рекурсии
  590. end;
  591. end;
  592.  
  593. //Реализуем методом Гаусса
  594. {for i := 0 to System.High(data)-1 do begin
  595. for j := 1+i to System.High(data) do begin // индекс строки
  596.  
  597. Temp:=data[j,i]/data[i,i];//число которое будем онтимать от след строки для приведения к треугл виду
  598. Writeln('++',Temp);
  599.  
  600. for k := 0+i to System.High(data) do // индекс столбца
  601. data[j,k]:=data[j,k]-data[i,k]*temp;
  602. end;
  603. end;}
  604.  
  605.  
  606. end;
  607.  
  608. function TMatrix.Inv: IMatrix; //Метод Гаусса Йордана
  609. var
  610. Temp: Extended;
  611. i,j,k,per: integer;
  612. begin
  613. {$IFDEF Debug}
  614. if (System.Length(data[0]) <> System.Length(data)) then
  615. raise Exception.Create('Несовместимые размерности');
  616. {$ENDIF}
  617.  
  618. Result:= TMatrix.Create(System.Length(data[0]),System.Length(data));
  619. //Проверка условия существования обратной матрицы.
  620. for i := 0 to Result.RowHigh do
  621. for j := 0 to Result.ColHigh do
  622. Result[i,j]:=data[i,j];
  623.  
  624. {$IFDEF Debug}
  625. if (Result.Det =0) then
  626. raise Exception.Create('Матрица вырождена');
  627. {$ENDIF}
  628.  
  629. Result:=TMatrix.E(System.Length(data));
  630. //приводим матрицу к треуголному ввиду, чтобы элементы ниже гл диаганали были равны 0
  631. i:=0;
  632. While i <= System.High(data[0])-1 do begin
  633. if data[i,i]<>0 then begin
  634. for k := 1+i to System.High(data[0]) do begin
  635. Temp:=data[k,i]/data[i,i];
  636. for j := 0 to System.High(data) do begin
  637. data[k,j]:=data[k,j]-Temp*data[i,j];
  638. Result[k,j]:=Result[k,j]-Temp*Result[i,j];
  639. end;
  640. end;
  641. end
  642. else if data[i,i]=0 then begin
  643. for j := i to System.High(data) do
  644. if data[j,i]<>0 then begin
  645. per:=j;
  646. break;
  647. end;
  648. for j := 0 to System.High(data) do begin
  649. Temp:=data[i,j];
  650. data[i,j]:=data[per,j];
  651. data[per,j]:=Temp;
  652.  
  653. Temp:=Result[i,j];
  654. Result[i,j]:=Result[per,j];
  655. Result[per,j]:=Temp;
  656. end;
  657. i:=i-1;
  658. end;
  659. inc(i);
  660. end;
  661.  
  662. //проверка 2 этапа
  663. {for i := 0 to System.High(data[0]) do begin
  664. for j := 0 to System.High(data[0]) do begin
  665. Write(data[i,j]:10:3, ' ');
  666. end;
  667. Writeln(' ');
  668. end;
  669. Writeln(' ');}
  670.  
  671. //приводим матрицу к треуголному ввиду, чтобы элементы выше гл диаганали были равны 0
  672. i:=System.High(data[0]);
  673. While i >= 1 do begin
  674. for k := i-1 downto 0 do begin
  675. Temp:=data[k,i]/data[i,i];
  676. for j := 0 to System.High(data) do begin
  677. data[k,j]:=data[k,j]-Temp*data[i,j];
  678. Result[k,j]:=Result[k,j]-Temp*Result[i,j];
  679. end;
  680. end;
  681. i:=i-1;
  682. end;
  683.  
  684. //проверка 2 этапа
  685. {for i := 0 to System.High(data[0]) do begin
  686. for j := 0 to System.High(data[0]) do begin
  687. Write(data[i,j]:10:3, ' ');
  688. end;
  689. Writeln(' ');
  690. end;
  691. Writeln(' ');}
  692.  
  693. //делим строки чтобы получить 1 на главной оси
  694. for i := 0 to System.High(data) do
  695. if data[i,i]<>1 then begin
  696. Temp:=data[i,i];
  697. data[i,i]:=data[i,i]/Temp;
  698. for j := 0 to Result.ColHigh do begin
  699. Result[i,j]:=Result[i,j]/Temp;
  700. end;
  701.  
  702. end;
  703.  
  704. //проверка заключительного этапа по составлению единичный матрице
  705. {for i := 0 to System.High(data[0]) do begin
  706. for j := 0 to System.High(data[0]) do begin
  707. Write(data[i,j]:10:3, ' ');
  708. end;
  709. Writeln(' ');
  710. end;
  711. Writeln(' ');}
  712. end;
  713.  
  714. function TMatrix.T: IMatrix;
  715. var i,j: integer;
  716. begin
  717. Result:= TMatrix.Create(System.Length(data[0]),System.Length(data));
  718. for i := 0 to System.High(data) do
  719. for j := 0 to System.High(data[0]) do
  720. Result[j,i]:=data[i,j];
  721. end;
  722.  
  723. procedure TMatrix.SwapRows(i, j: Integer);
  724. var
  725. n:integer;
  726. temp:extended;
  727. begin
  728. for n := 0 to System.High(data[0]) do begin
  729. temp:=data[j,n];
  730. data[j,n]:=data[i,n];
  731. data[i,n]:=temp;
  732. end;
  733. end;
  734.  
  735. class function TMatrix.E(n: Integer): IMatrix;
  736. var
  737. i,j:integer;
  738. begin
  739. Result:= TMatrix.Create(n,n);
  740. for i := 0 to n-1 do
  741. Result[i,i]:= 1;
  742. end;
  743.  
  744. procedure SetItem(i,j: Integer; value: Extended);
  745. begin
  746.  
  747. end;
  748. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement