Умножение матриц 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
Листинг программы
Option Explicit
Dim N As Integer, i As Integer, j As Integer, p As Integer, j1 As Integer
Dim s() As Double, s1() As Double, vector() As Double, vector1() As Double
Dim k As Integer
Dim max As Double, st
Private Sub Command1_Click()
''в свойствах
''Text1.MultiLine = True: Text1.ScrollBars = 3
''Text2.MultiLine = True: Text2.ScrollBars = 3
''Text3.MultiLine = True: Text3.ScrollBars = 3
Dim c(2) As String
c(1) = "вводим %": c(2) = "вводим соотв вероятн"
On Error Resume Next
 
                 'вводим размерность матрицы [N x N]
N = InputBox("вводим размерность матрицы", , 5)
If IsNumeric(N) And N > 1 Then
Else
MsgBox "!"
End If
                ' вводим элементы матрицы
ReDim s(N, N): ReDim s1(N, N)
For i = 1 To N
  For j = 1 To N
    s(i, j) = Val(Replace(InputBox("вводим   s(" & i & "," & j & ")", , 0.1), ",", "."))
    s1(i, j) = s(i, j)
  Next j
Next i
               ' вводим вектор процент/вероятность
ReDim vector(N, 2)
  For i = 1 To N
   For j = 1 To 2
    vector(i, j) = Val(Replace(InputBox(c(j)), ",", "."))
    Next j
  Next i
               ' вводим колл.периодов
k = Val(InputBox("", , 3))
               ' произведение матрицы на себя
Dim t As Double
For p = 1 To k
 For i = 1 To N
    For j = 1 To N
       t = 0
       For j1 = 1 To N
         t = t + s1(i, j1) * s(j1, j)
       Next j1
       s1(i, j) = t
    Next j
  Next i
Next p
             ' вывод произведения
Text1.Text = ""
 For i = 1 To N
   For j = 1 To N
    Text1.Text = Text1.Text & s1(i, j) & "   "
   Next j
     Text1.Text = Text1.Text & vbCrLf
  Next i
             'произведение матрицы на вектор
ReDim vector1(N)
Text2.Text = ""
 For i = 1 To N
  vector1(i) = 0
    For j = 1 To N
       vector1(i) = vector1(i) + s1(j, i) * vector(j, 2)
    Next j
    Text2.Text = Text2.Text & vector1(i) & " --- "
  Next i
            'опр максимума
max = vector1(1): st = vector(1)
For i = 2 To N
If max < vector1(i) Then
max = vector1(i)
st = vector(i, 1)
End If
Next i
            'вывод результата
Text3.Text = "p ---  " & max & vbCrLf & " % --- " & st
'MsgBox "p ---  " & max & vbCrLf & " % --- " & st
End Sub

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


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

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

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