Умножение матриц VBA Excel

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

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

Всем здравствуйте!!! Новый учебный год, новые суровые будни.. Думала хоть этот год пройдет без проблем.. но не тут-то было... Задача в общем не сложная... "Розглянемо стан банку S1, S2, S3, S4, S5, який храктеризується відповідно відсотковими ставками 4%, 6%, 10%, 11%, 14%, які встановлюються на початку кожного кварталу і є постійними. Спостереження за роботою банку в попередній період показало, що перехідні ймовірності станів протягом кварталу змінюються досить мало і, відповідно, їх можна вважати постійними. Охарактеризуйте процес, який протікає в банку, і необхідно визначити ймовірності стану банку через 2 роки, якщо в першому кварталі першого року ймовірності стану мали наступні знчення (p1(0),4; p2(0),2; p3(0),15; p4(0),15; p5(0),1), а матриця переходу станів має наступний вигляд :" _______s1_____ s2_____ s3_____ s4_____ s5 s1_____ 0,45___0,35____0,1____ 0______0,1 s2_____ 0______0,7____ 0______0______0,3 s3_____ 0,02___ 0,3____ 0,68___ 0______0 s4_____ 0,05___ 0______0,3____0,15____0,5 s5_____ 0______0,5____ 0______0,5____ 0 4%____6%____ 10%____11%____14% 0,2____ 0,2____ 0,25____0,25____0,1 Да и схема решения простая: 1. перемножаем матрицу саму на себя столько раз, сколько у нас периодов (2 года, это 6 кварталов, следовательно 6 раз)... 0,018394755____0,514162806____0,118433817____0,128499026____0,220509596 0,01588505____ 0,509052456____0,116133666____0,133528209____0,225400619 0,015579197____0,515620571____0,138740797____0,118836189____0,211223247 0,017528251____0,506754919____0,144007938____0,116691296____0,215017596 0,016759404____0,510333922____0,131080982____0,13086598____0,210959711 2. а потом найденную матрицу умножаем на вектор процентных ставок: (0,2____0,2____0,25____0,25____0,1).Получаем аналогичный вектор: 0,016808763____0,511270317____0,130708779____0,124373916____0,216838225 3. выделяем из него самое большое число в данном случае это число 0,511270317, что находится во втором столбце и по условию с процентной ставкой 6%. 4. Вывод: через два года вероятностью 0,51% процентная ставка будет составлять 6%. (Прикрепила файл с решением) Всё-о оно просто, но мне нужно сделать по ней аля программку. и меня очень угнетает то, что у меня это абсолютно не получается( Помогите пожалуйста!!! Данная программа должна выполнять такие задачи: 1. ввод размерности матрицы 2. ввод самой матрицы 3. ввод размерности вектора 4. ввод вектора 5. ввод количества периодов ( количество умножений матрицы саму на себя) 6. вывод полученного вектора 7. выделение из него наибольшего числа Буду безгранично благодарна за помощь...

Решение задачи: «Умножение матриц VBA Excel»

textual
Листинг программы
  1. Option Explicit
  2. Dim N As Integer, i As Integer, j As Integer, p As Integer, j1 As Integer
  3. Dim s() As Double, s1() As Double, vector() As Double, vector1() As Double
  4. Dim k As Integer
  5. Dim max As Double, st
  6. Private Sub Command1_Click()
  7. ''в свойствах
  8. ''Text1.MultiLine = True: Text1.ScrollBars = 3
  9. ''Text2.MultiLine = True: Text2.ScrollBars = 3
  10. ''Text3.MultiLine = True: Text3.ScrollBars = 3
  11. Dim c(2) As String
  12. c(1) = "вводим %": c(2) = "вводим соотв вероятн"
  13. On Error Resume Next
  14.  
  15.                  'вводим размерность матрицы [N x N]
  16. N = InputBox("вводим размерность матрицы", , 5)
  17. If IsNumeric(N) And N > 1 Then
  18. Else
  19. MsgBox "!"
  20. End If
  21.                 ' вводим элементы матрицы
  22. ReDim s(N, N): ReDim s1(N, N)
  23. For i = 1 To N
  24.   For j = 1 To N
  25.     s(i, j) = Val(Replace(InputBox("вводим   s(" & i & "," & j & ")", , 0.1), ",", "."))
  26.     s1(i, j) = s(i, j)
  27.   Next j
  28. Next i
  29.                ' вводим вектор процент/вероятность
  30. ReDim vector(N, 2)
  31.   For i = 1 To N
  32.    For j = 1 To 2
  33.     vector(i, j) = Val(Replace(InputBox(c(j)), ",", "."))
  34.     Next j
  35.   Next i
  36.                ' вводим колл.периодов
  37. k = Val(InputBox("", , 3))
  38.                ' произведение матрицы на себя
  39. Dim t As Double
  40. For p = 1 To k
  41.  For i = 1 To N
  42.     For j = 1 To N
  43.        t = 0
  44.        For j1 = 1 To N
  45.          t = t + s1(i, j1) * s(j1, j)
  46.        Next j1
  47.        s1(i, j) = t
  48.     Next j
  49.   Next i
  50. Next p
  51.              ' вывод произведения
  52. Text1.Text = ""
  53.  For i = 1 To N
  54.    For j = 1 To N
  55.     Text1.Text = Text1.Text & s1(i, j) & "   "
  56.    Next j
  57.      Text1.Text = Text1.Text & vbCrLf
  58.   Next i
  59.              'произведение матрицы на вектор
  60. ReDim vector1(N)
  61. Text2.Text = ""
  62.  For i = 1 To N
  63.   vector1(i) = 0
  64.     For j = 1 To N
  65.        vector1(i) = vector1(i) + s1(j, i) * vector(j, 2)
  66.     Next j
  67.     Text2.Text = Text2.Text & vector1(i) & " --- "
  68.   Next i
  69.             'опр максимума
  70. max = vector1(1): st = vector(1)
  71. For i = 2 To N
  72. If max < vector1(i) Then
  73. max = vector1(i)
  74. st = vector(i, 1)
  75. End If
  76. Next i
  77.             'вывод результата
  78. Text3.Text = "p ---  " & max & vbCrLf & " % --- " & st
  79. 'MsgBox "p ---  " & max & vbCrLf & " % --- " & st
  80. End Sub

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


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

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

14   голосов , оценка 3.929 из 5

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

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

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