Решение системы линейных уравнений методом простых итераций - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, дорогие друзья. У меня задание, написанное в заголовке. Код ругается на строку z(v,o)=k(i,i) Он выдает сообщение "Индекс находился вне границ массива". Подскажите пожалуйста, как решить эту проблему? Вот собственно сам код:
Листинг программы
  1. Module Module1
  2. Sub Main()
  3. Dim m, a, i, j, y, n, p, MAXJ, MAXI, MAX As Double
  4. Console.Write("Введите количество уравнений системы= ")
  5. n = Val(Console.ReadLine()) 'кол-во строк'
  6. m = n + 1 'кол-во столбцов = кол-ву строк'
  7. Dim x(n, m) As Single
  8. For i = 1 To n
  9. For j = 1 To m
  10. x(i, j) = InputBox("Ввод коэффициента (" & i & " ; " & j & ")") 'ввод коэффициентов матрицы A|B'
  11. Next j
  12. Next i
  13. '----------------------------------------------------------------------—
  14. '----------------------------------------------------------------------—
  15. 'ВЫВОД УРАВНЕНИЙ
  16. Console.WriteLine()
  17. Console.Write("введенные уравнения:")
  18. Console.WriteLine()
  19. For i = 1 To n
  20. For j = 1 To m
  21. If j < m Then
  22. Console.Write("({0}x{1})", x(i, j), j)
  23. If j < m - 1 Then
  24. Console.Write("+")
  25. End If
  26. Else
  27. Console.Write("={0}", x(i, j))
  28. End If
  29. Next j
  30. Console.WriteLine()
  31. Next i
  32. '----------------------------------------------------------------------—
  33. '----------------------------------------------------------------------—
  34. Dim f(n, m) As Single
  35. For i = 1 To n
  36. For j = 1 To m
  37. f(i, j) = x(i, j)
  38. Next j
  39. Next i
  40.  
  41. For i = 1 To n
  42. MAX = x(i, 1)
  43. MAXI = i
  44. MAXJ = 1
  45. For j = 1 To m - 1
  46. If MAX < x(i, j) Then
  47. MAX = x(i, j)
  48. MAXI = i
  49. MAXJ = j
  50. End If
  51. Next j
  52. For y = 1 To m - 1
  53. p = x(MAXJ, y)
  54. x(MAXJ, y) = x(MAXI, y)
  55. x(MAXI, y) = p
  56. p = f(MAXJ, y)
  57. f(MAXJ, y) = f(MAXI, y)
  58. f(MAXI, y) = p
  59. Next y
  60. p = f(MAXJ, m)
  61. f(MAXJ, m) = f(MAXI, m)
  62. f(MAXI, m) = p
  63. Next i
  64. Console.WriteLine()
  65. Console.Write("упорядоченные уравнения: ")
  66. Console.WriteLine()
  67. For i = 1 To n
  68. For j = 1 To m
  69. If j < m Then
  70. Console.Write("({0}x{1})", f(i, j), j)
  71. If j < m - 1 Then
  72. Console.Write("+")
  73. End If
  74. Else
  75. Console.Write("={0}", f(i, j))
  76. End If
  77. Next j
  78. Console.WriteLine()
  79. Next i
  80. '----------------------------------------------------------------------—
  81. '----------------------------------------------------------------------—
  82. Console.WriteLine()
  83. Console.Write("выражаем x:")
  84. Console.WriteLine()
  85. Dim k(n, m) As Single
  86. For i = 1 To n
  87. For j = 1 To m
  88. k(i, j) = x(i, j)
  89. Next j
  90. Next i
  91.  
  92. For i = 1 To n
  93. a = f(i, i)
  94. k(i, i) = a / a
  95. For j = 1 To n
  96. If (j < i Or j > i) Then
  97. k(i, m) = f(i, m) / a
  98. k(i, j) = -((f(i, j)) / a)
  99. End If
  100. Next j
  101. Next i
  102. For i = 1 To n
  103. Console.Write("{0}x{1}=", k(i, i), i)
  104. For j = 1 To m
  105. If j < m And (j < i Or j > i) Then
  106. Console.Write("({0}x{1})", k(i, j), j)
  107. If j < m Then
  108. Console.Write("+")
  109. End If
  110. End If
  111. Next j
  112. Console.Write("{0}", k(i, m))
  113. Console.WriteLine()
  114. Next i
  115. '----------------------------------------------------------------------—
  116. '----------------------------------------------------------------------—
  117. Dim dMAX, r, g As Double
  118. Console.WriteLine()
  119. Console.Write("высчитываем иксы:")
  120. Console.WriteLine()
  121. g = 10000
  122. Dim u(g) As Double
  123. Dim d1(g) As Double
  124. Dim e, o, v, q As Double
  125. dMAX = 0.0015
  126. Dim z(100000, n * 2 + 1) As Double
  127. For i = 0 To 100000
  128. For j = 1 To n * 2 + 1
  129. If j < n * 2 + 1 Then
  130.  
  131. z(i, j) = 0
  132. Else
  133. z(i, n * 2 + 1) = dMAX
  134. End If
  135. Next j
  136. Next i
  137. e = 0.001
  138. r = 0
  139. v = 1
  140. Do While dMAX > e
  141. o = 0
  142. For i = 1 To n
  143. o = o + 1
  144. For j = 1 To n
  145. If (i < j Or i > j) Then
  146. k(i, i) = k(i, j) * z(i - 1, j) + r
  147. r = k(i, i)
  148. End If
  149. Next j
  150. k(i, i) = k(i, i) + k(i, m)
  151. z(v, o) = k(i, i)
  152. Next i
  153. o = 0
  154. q = 1
  155. For j = n + 1 To 2 * n
  156. z(v, j) = Math.Abs(z(v, q) - z(v - 1, q))
  157. q = q + 1
  158. If dMAX < z(v, j) Then
  159. dMAX = z(v, j)
  160. End If
  161. Next j
  162. z(v, n * 2 + 1) = dMAX
  163. v = v + 1
  164. Loop
  165. Console.WriteLine("{0}", dMAX)
  166. For i = 1 To n
  167. Console.Write("X{0}= {1} ", i, z(i, j))
  168. Next i
  169.  
  170. Console.ReadLine()
  171. End Sub
  172. End Module
169 строка
точнее 161, прошу прощения.
проблема решена. тут куча ошибок, поэтому не заморачивайтесь.

Решение задачи: «Решение системы линейных уравнений методом простых итераций»

textual
Листинг программы
  1. Dim z(100000, n * 2 + 1) As Double
  2.     '-------------
  3.     '-------------
  4.     v = 1
  5.     Do While dMAX > e
  6.                 '-------------
  7.                 '-------------
  8.             z(v, o) = k(i, i) ' наверняка значение v вылазит за пределы 100000 раньше, чем перестает выполняться условие  dMAX > e
  9.                  '-------------
  10.                  '-------------
  11.             v = v + 1
  12.      Loop

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы