Умножение матриц 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д