Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 18.11 KB | None | 0 0
  1. public partial class Form1 : Form
  2. {
  3. public class Matrix
  4. {
  5. int w = 0;
  6. int h = 0;
  7. double[,] v;
  8. public Matrix(int width, int height, double[,] a)
  9. {
  10. w = width; h = height;
  11. v = new double[h, w];
  12. for (int i = 0; i < h; i++)
  13. for (int j = 0; j < w; j++)
  14. v[i, j] = a[i, j];
  15. }
  16. public Matrix(Matrix m)
  17. {
  18. w = m.w; h = m.h;
  19. v = new double[h, w];
  20. for (int i = 0; i < h; i++)
  21. for (int j = 0; j < w; j++)
  22. v[i, j] = m.v[i, j];
  23. }
  24. static public Matrix operator +(Matrix a, Matrix b)
  25. {
  26. if ((a.w == b.w) && (a.h == b.h))
  27. {
  28. Matrix t = new Matrix(a);
  29.  
  30. for (int i = 0; i < a.h; i++)
  31. for (int j = 0; j < a.w; j++)
  32. t.v[i, j] += b.v[i, j];
  33.  
  34. return t;
  35. }
  36. else
  37. {
  38. return new Matrix(0, 0, new double[0, 0]);
  39. }
  40. }
  41. static public Matrix operator -(Matrix a, Matrix b)
  42. {
  43. if ((a.w == b.w) && (a.h == b.h))
  44. {
  45. Matrix t = new Matrix(a);
  46.  
  47. for (int i = 0; i < a.h; i++)
  48. for (int j = 0; j < a.w; j++)
  49. t.v[i, j] -= b.v[i, j];
  50.  
  51. return t;
  52. }
  53. else
  54. {
  55. return new Matrix(0, 0, new double[0, 0]);
  56. }
  57. }
  58. static public Matrix operator *(Matrix a, double d)
  59. {
  60. Matrix t = new Matrix(a);
  61.  
  62. for (int i = 0; i < a.h; i++)
  63. for (int j = 0; j < a.w; j++)
  64. t.v[i, j] *= d;
  65.  
  66. return t;
  67. }
  68. static public Matrix operator *(double d, Matrix a)
  69. {
  70. Matrix t = new Matrix(a);
  71.  
  72. for (int i = 0; i < a.h; i++)
  73. for (int j = 0; j < a.w; j++)
  74. t.v[i, j] *= d;
  75.  
  76. return t;
  77. }
  78. static public Matrix operator *(Matrix a, Matrix b)
  79. {
  80. if ((a.w == b.h))
  81. {
  82. Matrix t = new Matrix(b.w, a.h, new double[a.h, b.w]);
  83.  
  84. for (int i = 0; i < a.h; i++)
  85. for (int j = 0; j < b.w; j++)
  86. {
  87. double u = 0;
  88. for (int k = 0; k < a.w; k++)
  89. u += a.v[i, k] * b.v[k, j];
  90. t.v[i, j] = u;
  91. }
  92.  
  93. return t;
  94. }
  95. else
  96. {
  97. return new Matrix(0, 0, new double[0, 0]);
  98. }
  99. }
  100. public Matrix T()
  101. {
  102. Matrix t = new Matrix(h, w, new double[w, h]);
  103. for (int i = 0; i < h; i++)
  104. for (int j = 0; j < w; j++)
  105. t.v[j, i] = v[i, j];
  106. return t;
  107. }
  108. public string print(Matrix a = null)
  109. {
  110. string s = "";
  111. int l = 0;
  112. for (int i = 0; i < h; i++)
  113. {
  114. s += '(';
  115. for (int j = 0; j < w; j++)
  116. {
  117. s += (Convert.ToDecimal(Math.Round(v[i, j], 15))).ToString();
  118. for (int k = 1; k <= (26 - (Convert.ToDecimal(Math.Round(v[i, j], 15))).ToString().Length); k++)
  119. {
  120. s += " ";
  121. l = k;
  122. }
  123.  
  124. }
  125. s = s.Remove(s.Length - l * 2);
  126. s += ')';
  127. for (int k = 1; k <= l; k++)
  128. s += " ";
  129. if (a != null)
  130. {
  131. s += '\t';
  132. s += '(';
  133. for (int j = 0; j < a.w; j++)
  134. {
  135. s += (Convert.ToDecimal(Math.Round(a.v[i, j], 7))).ToString();
  136. for (int k = 1; k <= (18 - (Convert.ToDecimal(Math.Round(a.v[i, j], 7))).ToString().Length); k++)
  137. {
  138. s += " ";
  139. l = k;
  140. }
  141.  
  142. }
  143. s = s.Remove(s.Length - l * 2);
  144. s += ')';
  145. }
  146. s += '\n';
  147. }
  148. return s;
  149. }
  150. public double N1()
  151. {
  152. double d = 0;
  153. for (int j = 0; j < w; j++)
  154. d += Math.Abs(v[0, j]);
  155. for (int i = 1; i < h; i++)
  156. {
  157. double s = 0;
  158. for (int j = 0; j < w; j++)
  159. s += Math.Abs(v[i, j]);
  160. if (s > d) d = s;
  161. }
  162. return d;
  163. }
  164. public double N2()
  165. {
  166. double d = 0;
  167. if (w == 1)
  168. {
  169. for (int i = 0; i < h; i++)
  170. d += v[i, 0] * v[i, 0];
  171. }
  172. else if (h == 1)
  173. {
  174. for (int j = 0; j < w; j++)
  175. d += v[0, j] * v[0, j];
  176. }
  177. return Math.Sqrt(d);
  178. }
  179. public double N8()
  180. {
  181. double d = 0;
  182. for (int i = 0; i < h; i++)
  183. d += Math.Abs(v[i, 0]);
  184. for (int j = 1; j < w; j++)
  185. {
  186. double s = 0;
  187. for (int i = 0; i < h; i++)
  188. s += Math.Abs(v[i, j]);
  189. if (s > d) d = s;
  190. }
  191. return d;
  192. }
  193. public void Gauss(Matrix b)
  194. {
  195. Matrix A = new Matrix(3, 3, v);
  196. Matrix An = new Matrix(3, 3, v);
  197. Matrix bo = new Matrix(1, 3, b.v);
  198. (Application.OpenForms[0] as Form1).richTextBox2.Text += "Метод Гаусса:" + '\n' + "Прямой ход:" + '\n';
  199. for (int i = 0; i < h; i++)
  200. {
  201. for (int j = i; j < w; j++)
  202. {
  203. v[i, j] = v[i, j] / An.v[i, i];
  204. if (j == i) b.v[i, 0] = b.v[i, 0] / An.v[i, i];
  205. (Application.OpenForms[0] as Form1).richTextBox2.Text +=
  206. print(b) + '\n';
  207. for (int k = i + 1; k < h; k++)
  208. {
  209. v[k, j] = v[k, j] - An.v[k, i] * v[i, j];
  210. if (i == j) b.v[k, 0] = b.v[k, 0] - An.v[k, i] * b.v[i, 0];
  211. (Application.OpenForms[0] as Form1).richTextBox2.Text += print(b) + '\n';
  212. }
  213. }
  214. An = new Matrix(3, 3, v);
  215.  
  216. }
  217. (Application.OpenForms[0] as Form1).richTextBox2.Text += "Обратный ход:" + '\n';
  218. double[,] vector = new double[3, 1];
  219. double s = 0;
  220. for (int i = 2; i >= 0; i--)
  221. {
  222. for (int j = i + 1; j <= 2; j++)
  223. s += v[i, j] * vector[j, 0];
  224. vector[i, 0] = b.v[i, 0] - s;
  225. s = 0;
  226. }
  227.  
  228. Matrix Ans = new Matrix(1, 3, vector);
  229. (Application.OpenForms[0] as Form1).richTextBox2.Text += Ans.print() + '\n';
  230. (Application.OpenForms[0] as Form1).richTextBox2.Text += "Вектор невязки:" + '\n';
  231. double[,] mist = new double[3, 1];
  232. Matrix R = new Matrix(1, 3, mist);
  233. R = A * Ans - bo;
  234. (Application.OpenForms[0] as Form1).richTextBox2.Text += R.print() + '\n';
  235. }
  236. public void GaussColumn(Matrix b)
  237. {
  238. double max = v[0, 0];
  239. double zb = b.v[0, 0];
  240. double[,] zm = new double[1, w];
  241. Matrix z = new Matrix(w, 1, zm);
  242. for (int i = 0; i < w; i++)
  243. z.v[0, i] = v[0, i];
  244. int m = 0;
  245. (Application.OpenForms[0] as Form1).richTextBox3.Text += "Метод Гаусса с выбором по столбцу:" + '\n';
  246. for (int j = 0; j < h - 1; j++)
  247. {
  248. max = v[j, j];
  249. for (int i = j; i < w; i++)
  250. {
  251. if (v[i, j] > max)
  252. {
  253. max = v[i, j];
  254. m = i;
  255. }
  256. }
  257. for (int k = 0; k < w; k++)
  258. z.v[0, k] = v[m, k];
  259. zb = b.v[m, 0];
  260. for (int k = 0; k < w; k++)
  261. v[m, k] = v[j, k];
  262. b.v[m, 0] = b.v[j, 0];
  263. for (int k = 0; k < w; k++)
  264. v[j, k] = z.v[0, k];
  265. b.v[j, 0] = zb;
  266. (Application.OpenForms[0] as Form1).richTextBox3.Text += print(b) + '\n';
  267. }
  268. Matrix A = new Matrix(3, 3, v);
  269. Matrix An = new Matrix(3, 3, v);
  270. Matrix bo = new Matrix(1, 3, b.v);
  271. (Application.OpenForms[0] as Form1).richTextBox3.Text += "Прямой ход:" + '\n';
  272. for (int i = 0; i < h; i++)
  273. {
  274. for (int j = i; j < w; j++)
  275. {
  276. v[i, j] = v[i, j] / An.v[i, i];
  277. if (j == i) b.v[i, 0] = b.v[i, 0] / An.v[i, i];
  278. (Application.OpenForms[0] as Form1).richTextBox3.Text += print(b) + '\n';
  279. for (int k = i + 1; k < h; k++)
  280. {
  281. v[k, j] = v[k, j] - An.v[k, i] * v[i, j];
  282. if (i == j) b.v[k, 0] = b.v[k, 0] - An.v[k, i] * b.v[i, 0];
  283. (Application.OpenForms[0] as Form1).richTextBox3.Text += print(b) + '\n';
  284. }
  285. }
  286. An = new Matrix(3, 3, v);
  287.  
  288. }
  289. (Application.OpenForms[0] as Form1).richTextBox3.Text += "Обратный ход:" + '\n';
  290. double[,] vector = new double[3, 1];
  291. double s = 0;
  292. for (int i = 2; i >= 0; i--)
  293. {
  294. for (int j = i + 1; j <= 2; j++)
  295. s += v[i, j] * vector[j, 0];
  296. vector[i, 0] = b.v[i, 0] - s;
  297. s = 0;
  298. }
  299.  
  300. Matrix Ans = new Matrix(1, 3, vector);
  301. (Application.OpenForms[0] as Form1).richTextBox3.Text += Ans.print() + '\n';
  302. (Application.OpenForms[0] as Form1).richTextBox3.Text += "Вектор невязки:" + '\n';
  303. double[,] mist = new double[3, 1];
  304. Matrix R = new Matrix(1, 3, mist);
  305. R = A * Ans - bo;
  306. (Application.OpenForms[0] as Form1).richTextBox3.Text += R.print() + '\n';
  307. }
  308. public void det()
  309. {
  310. Matrix A = new Matrix(3, 3, v);
  311. Matrix An = new Matrix(3, 3, v);
  312. double d = 1;
  313. string s = "";
  314. (Application.OpenForms[0] as Form1).richTextBox4.Text += "Определитель:" + '\n' + "Приведем к виду верхнетреугольной матрицы с помощью метода Гаусса:" + '\n';
  315. for (int n = 0; n < h; n++)
  316. {
  317. for (int i = n; i < h; i++)
  318. {
  319. for (int j = n; j < w; j++)
  320. {
  321. v[i, j] = v[i, j] / An.v[i, n];
  322. }
  323. (Application.OpenForms[0] as Form1).richTextBox4.Text += print() + '\n';
  324. d *= An.v[i, n];
  325. if ((Convert.ToDecimal(Math.Round(An.v[i, n], 10))).ToString()[0] == '-') s += '(' + (Convert.ToDecimal(Math.Round(An.v[i, n], 10))).ToString() + ')' + " * ";
  326. else s += (Convert.ToDecimal(Math.Round(An.v[i, n], 10))).ToString() + " * ";
  327. }
  328. An = new Matrix(3, 3, v);
  329. for (int j = 0; j < w; j++)
  330. {
  331. for (int k = n + 1; k < h; k++)
  332. {
  333. v[k, j] = v[k, j] - v[n, j];
  334. }
  335. }
  336. An = new
  337. Matrix(3, 3, v);
  338. (Application.OpenForms[0] as Form1).richTextBox4.Text += print() + '\n';
  339. }
  340. s = s.Remove(s.Length - 2);
  341. (Application.OpenForms[0] as Form1).richTextBox4.Text += "det A = " + s + "= " + (Convert.ToDecimal(Math.Round(d, 10))).ToString() + '\n';
  342. }
  343. public void AE()
  344. {
  345. double[,] e = new double[3, 3];
  346. e[0, 0] = 1; e[0, 1] = 0; e[0, 2] = 0;
  347. e[1, 0] = 0; e[1, 1] = 1; e[1, 2] = 0;
  348. e[2, 0] = 0; e[2, 1] = 0; e[2, 2] = 1;
  349. double[,] e1 = new double[3, 1];
  350. Matrix b = new Matrix(3, 3, e);
  351. Matrix E = new Matrix(3, 3, e);
  352. Matrix newA = new Matrix(3, 3, v);
  353. Matrix A = new Matrix(3, 3, v);
  354. Matrix Az = new Matrix(3, 3, v);
  355. Matrix An = new Matrix(3, 3, v);
  356. (Application.OpenForms[0] as Form1).richTextBox5.Text += "Нахождение обратной матрицы с помощью метода Гаусса:" + '\n' + "Прямой ход:" + '\n';
  357. (Application.OpenForms[0] as Form1).richTextBox5.Text += Az.print(b) + '\n';
  358. for (int i = 0; i < h; i++)
  359. {
  360. for (int j = i; j < w; j++)
  361. {
  362. Az.v[i, j] = Az.v[i, j] / An.v[i, i];
  363. for (int l = j - i; l < j + 1; l++)
  364. {
  365. if (i != 1 || j != 2 || l!=1)
  366. b.v[i, l] = b.v[i, l] / An.v[i, i];
  367. }
  368. (Application.OpenForms[0] as Form1).richTextBox5.Text += Az.print(b) + '\n';
  369. for (int k = i + 1; k < h; k++)
  370. {
  371. Az.v[k, j] = Az.v[k, j] - An.v[k, i] * Az.v[i, j];
  372. for (int l = j - i; l < j + 1; l++)
  373. {
  374. if (i != 1 || j != 2 || l != 1)
  375. b.v[k, l] = b.v[k, l] - An.v[k, i] * b.v[i, l];
  376. }
  377. (Application.OpenForms[0] as Form1).richTextBox5.Text += Az.print(b) + '\n';
  378. }
  379. }
  380. An = new Matrix(3, 3, Az.v);
  381. }
  382. (Application.OpenForms[0] as Form1).richTextBox5.Text += "Обратный ход:" + '\n';
  383. double[,] Ao = new double[3, 3];
  384. for (int q = 0; q < b.w; q++)
  385. {
  386. double s = 0;
  387. for (int i = 2; i >= 0; i--)
  388. {
  389. for (int j = i + 1; j <= 2; j++)
  390. s += Az.v[i, j] * Ao[j, q];
  391. Ao[i, q] = b.v[i, q] - s;
  392. s = 0;
  393. }
  394.  
  395. Matrix Ans = new Matrix(3, 3, Ao);
  396. (Application.OpenForms[0] as Form1).richTextBox5.Text += Ans.print() + '\n';
  397. for (int l = 0; l < 3; l++)
  398. {
  399. newA.v[l, q] = Ans.v[l, q];
  400. }
  401. }
  402. An = new Matrix(3, 3, A.v);
  403. Az = new Matrix(3, 3, A.v);
  404. (Application.OpenForms[0] as Form1).richTextBox5.Text += "Обратная матрица:" + '\n' + newA.print() + '\n';
  405. }
  406. public void AnswerWithAE(Matrix q)
  407. {
  408. double[,] e = new double[3, 3];
  409. e[0, 0] = 1; e[0, 1] = 0; e[0, 2] = 0;
  410. e[1, 0] = 0; e[1, 1] = 1; e[1, 2] = 0;
  411. e[2, 0] = 0; e[2, 1] = 0; e[2, 2] = 1;
  412. double[,] e1 = new double[3, 1];
  413. Matrix b = new Matrix(1, 3, e1);
  414. Matrix bo = new Matrix(1, 3, q.v);
  415. Matrix E = new Matrix(3, 3, e);
  416. Matrix newA = new Matrix(3, 3, v);
  417. Matrix A = new Matrix(3, 3, v);
  418. Matrix Az = new Matrix(3, 3, v);
  419. Matrix An = new Matrix(3, 3, v);
  420. (Application.OpenForms[0] as Form1).richTextBox6.Text += "Нахождение решения с помощью обратной матрицы:" + '\n' + "Вычисляем обратную матрицу (подробнее см. предыдушую вкладку):" + '\n';
  421. for (int c = 0; c < 3; c++)
  422. {
  423. for (int l = 0; l < 3; l++)
  424. {
  425. b.v[l, 0] = e[c, l];
  426. }
  427. for (int i = 0; i < h; i++)
  428. {
  429. for (int j = i; j < w; j++)
  430. {
  431. Az.v[i, j] = Az.v[i, j] / An.v[i, i];
  432. if (j == i) b.v[i, 0] = b.v[i, 0] / An.v[i, i];
  433. for (int k = i + 1; k < h; k++)
  434. {
  435. Az.v[k, j] = Az.v[k, j] - An.v[k, i] * Az.v[i, j];
  436. if (i == j) b.v[k, 0] = b.v[k, 0] - An.v[k, i] * b.v[i, 0];
  437. }
  438. }
  439. An = new Matrix(3, 3, Az.v);
  440. }
  441. double[,] vector = new double[3, 1];
  442. double s = 0;
  443. for (int i = 2; i >= 0; i--)
  444. {
  445. for (int j = i + 1; j <= 2; j++)
  446. s += Az.v[i, j] * vector[j, 0];
  447. vector[i, 0] = b.v[i, 0] - s;
  448. s = 0;
  449. }
  450. Matrix Ans = new Matrix(1, 3, vector);
  451. for (int l = 0; l < 3; l++)
  452. {
  453. newA.v[l, c] = Ans.v[l, 0];
  454. }
  455. An = new Matrix(3, 3, A.v);
  456. Az = new Matrix(3, 3, A.v);
  457. }
  458. (Application.OpenForms[0] as Form1).richTextBox6.Text += "Обратная матрица:" + '\n' + newA.print() + '\n';
  459. (Application.OpenForms[0] as Form1).richTextBox6.Text += "Тогда, решение можно найти по формуле A^(-1)*b:" + '\n' + (newA *
  460. q).print() + '\n';
  461. (Application.OpenForms[0] as Form1).richTextBox6.Text += "Вектор невязки:" + '\n';
  462. double[,] mist = new double[3, 1];
  463. Matrix R = new Matrix(1, 3, mist);
  464. R = A * (newA * q) - bo;
  465. (Application.OpenForms[0] as Form1).richTextBox6.Text += R.print() + '\n';
  466. }
  467. public void cond()
  468. {
  469. double[,] e = new double[3, 3];
  470. e[0, 0] = 1; e[0, 1] = 0; e[0, 2] = 0;
  471. e[1, 0] = 0; e[1, 1] = 1; e[1, 2] = 0;
  472. e[2, 0] = 0; e[2, 1] = 0; e[2, 2] = 1;
  473. double[,] e1 = new double[3, 1];
  474. Matrix b = new Matrix(1, 3, e1);
  475. Matrix E = new Matrix(3, 3, e);
  476. Matrix newA = new Matrix(3, 3, v);
  477. Matrix A = new Matrix(3, 3, v);
  478. Matrix Az = new Matrix(3, 3, v);
  479. Matrix An = new Matrix(3, 3, v);
  480. (Application.OpenForms[0] as Form1).richTextBox7.Text += "Нахождение числа обусловленности:" + '\n' + "Вычисляем обратную матрицу (подробнее см. предыдушие вкладки):" + '\n';
  481. for (int c = 0; c < 3; c++)
  482. {
  483. for (int l = 0; l < 3; l++)
  484. {
  485. b.v[l, 0] = e[c, l];
  486. }
  487. for (int i = 0; i < h; i++)
  488. {
  489. for (int j = i; j < w; j++)
  490. {
  491. Az.v[i, j] = Az.v[i, j] / An.v[i, i];
  492. if (j == i) b.v[i, 0] = b.v[i, 0] / An.v[i, i];
  493. for (int k = i + 1; k < h; k++)
  494. {
  495. Az.v[k, j] = Az.v[k, j] - An.v[k, i] * Az.v[i, j];
  496. if (i == j) b.v[k, 0] = b.v[k, 0] - An.v[k, i] * b.v[i, 0];
  497. }
  498. }
  499. An = new Matrix(3, 3, Az.v);
  500. }
  501. double[,] vector = new double[3, 1];
  502. double s = 0;
  503. for (int i = 2; i >= 0; i--)
  504. {
  505. for (int j = i + 1; j <= 2; j++)
  506. s += Az.v[i, j] * vector[j, 0];
  507. vector[i, 0] = b.v[i, 0] - s;
  508. s = 0;
  509. }
  510. Matrix Ans = new Matrix(1, 3, vector);
  511. for (int l = 0; l < 3; l++)
  512. {
  513. newA.v[l, c] = Ans.v[l, 0];
  514. }
  515. An = new Matrix(3, 3, A.v);
  516. Az = new Matrix(3, 3, A.v);
  517. }
  518. (Application.OpenForms[0] as Form1).richTextBox7.Text += "Обратная матрица:" + '\n' + newA.print() + '\n';
  519. (Application.OpenForms[0] as Form1).richTextBox7.Text += "Тогда, для октаэдрической нормы число обусловленности будет равно:" + (A.N1() * newA.N1()).ToString() + '\n';
  520. (Application.OpenForms[0] as Form1).richTextBox7.Text += "A для кубической нормы оно будет равно:" + (A.N8() * newA.N8()).ToString() + '\n';
  521. }
  522. }
  523. public Form1()
  524. {
  525. InitializeComponent();
  526. double[,] d = new double[2, 2];
  527. d[0, 0] = 1.00; d[0, 1] = 0.99;
  528. d[1, 0] = 0.99; d[1, 1] = 0.98;
  529. Matrix A = new Matrix(2, 2, d);
  530. d = new double[2, 2];
  531. d[0, 0] = -9800; d[0, 1] = 9900;
  532. d[1, 0] = 9900; d[1, 1] = -10000;
  533. Matrix iA = new Matrix(2, 2, d);
  534. d = new double[2, 1];
  535. d[0, 0] = 1.99;
  536. d[1, 0] = 1.97;
  537. Matrix B = new Matrix(1, 2, d);
  538. d = new double[2, 1];
  539. d[0, 0] = -0.000097;
  540. d[1, 0] = 0.000106;
  541. Matrix dB = new Matrix(1, 2, d);
  542. d = new double[2, 1];
  543. d[0, 0] = 1.00;
  544. d[1, 0] = 1.00;
  545. Matrix X = new Matrix(1, 2, d);
  546. d = new double[2, 1];
  547. d[0, 0] = 3.00;
  548. d[1, 0] = -1.0203;
  549. Matrix dX = new Matrix(1, 2, d);
  550. richTextBox1.Text = "Рассмотрим исходную систему Ax = b и систему с возмущенной правой частью Ax' = (b + Δb)." + '\n';
  551. richTextBox1.Text += "Где: А = " + '\n' + A.print() + '\n';
  552. richTextBox1.Text += "b = " + '\n' + B.print() + '\n';
  553. richTextBox1.Text += "Δb = " + '\n' + dB.print() + '\n';
  554. richTextBox1.Text += "Вектор x = " + '\n' + X.print() + '\n';
  555. richTextBox1.Text += "Вектор x' = " + '\n' + dX.print() + '\n';
  556. richTextBox1.Text += "Вектор невязки уравнения Ax = b:" + '\n' + (A * X - B).print() + '\n';
  557. richTextBox1.Text += "Вектор невязки уравнения Ax' = (b + Δb):" + '\n' + (A * dX - B - dB).print() + '\n';
  558. richTextBox1.Text += "Фактическая относительная погрешность (с использованием октаэдрической нормы):" + '\n' + ((dX - X).N1() / X.N1()).ToString() + '\n';
  559. richTextBox1.Text += "Фактическая относительная погрешность (с использованием кубической нормы):" + '\n' + ((dX - X).N8() / X.N8()).ToString() + '\n';
  560. richTextBox1.Text += "Число обусловленности (с использованием октаэдрической нормы):" + '\n' + (A.N1() * iA.N1()).ToString() + '\n';
  561. richTextBox1.Text += "Число обусловленности (с
  562. использованием кубической нормы):" + '\n' + (A.N8() * iA.N8()).ToString() + '\n';
  563. richTextBox1.Text += "Теоретическая относительная погрешность (с использованием октаэдрической нормы):" + '\n' + (A.N1() * iA.N1() * dB.N1() / B.N1()).ToString() + '\n';
  564. richTextBox1.Text += "Теоретическая относительная погрешность (с использованием кубической нормы):" + '\n' + (A.N8() * iA.N8() * dB.N8() / B.N8()).ToString() + '\n';
  565. }
  566.  
  567. private void button1_Click(object sender, EventArgs e)
  568. {
  569. double[,] d = new double[3, 3];
  570. d[0, 0] = (double)numericUpDown1.Value; d[0, 1] = (double)numericUpDown6.Value; d[0, 2] = (double)numericUpDown9.Value;
  571. d[1, 0] = (double)numericUpDown2.Value; d[1, 1] = (double)numericUpDown5.Value; d[1, 2] = (double)numericUpDown8.Value;
  572. d[2, 0] = (double)numericUpDown3.Value; d[2, 1] = (double)numericUpDown4.Value; d[2, 2] = (double)numericUpDown7.Value;
  573. Matrix A = new Matrix(3, 3, d);
  574. double[,] db = new double[3, 1];
  575. db[0, 0] = (double)numericUpDown12.Value;
  576. db[1, 0] = (double)numericUpDown11.Value;
  577. db[2, 0] = (double)numericUpDown10.Value;
  578. Matrix b = new Matrix(1, 3, db);
  579. richTextBox2.Clear();
  580. richTextBox3.Clear();
  581. richTextBox4.Clear();
  582. richTextBox5.Clear();
  583. richTextBox6.Clear();
  584. richTextBox7.Clear();
  585. A.Gauss(b);
  586. A = new Matrix(3, 3, d);
  587. b = new Matrix(1, 3, db);
  588. A.GaussColumn(b);
  589. A = new Matrix(3, 3, d);
  590. A.det();
  591. A = new Matrix(3, 3, d);
  592. A.AE();
  593. A = new Matrix(3, 3, d);
  594. b = new Matrix(1, 3, db);
  595. A.AnswerWithAE(b);
  596. A = new Matrix(3, 3, d);
  597. A.cond();
  598. }
  599. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement