Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
LittleSunny
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 5
#1

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

29.09.2010, 22:23. Просмотров 5333. Ответов 9
Метки нет (Все метки)

Всем здравствуйте!!!
Новый учебный год, новые суровые будни.. Думала хоть этот год пройдет без проблем.. но не тут-то было...
Задача в общем не сложная...

"Розглянемо стан банку 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. выделение из него наибольшего числа

Буду безгранично благодарна за помощь...
0
Вложения
Тип файла: xls lab1.xls (33.5 Кб, 124 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2010, 22:23
Ответы с готовыми решениями:

Программа на VBA для вычисления матриц
Дана матрица: A11*X1+A12*X2+….+A1N*XN = B1 A21*X1+A22*X2+….+A2N*XN =...

VBA в Excel
нужна очень ваша помощь завтра сдавать прогу а я нихрена не шарю! есть...

Программа VBA в Excel
День добрый! Помогите создать программу: Необходимо распределить...

Странности с кодом VBA (Excel) в VB
Пишу прогу на VB6. Для формирования отчётов в Excel вставил в основной код...

Ячейки - События (VBA for Excel)
Знаю, что строка Worksheets('Листик').OnSheetActivate = 'Zap' запускает...

9
gaw
6632 / 1499 / 169
Регистрация: 09.01.2010
Сообщений: 4,273
29.09.2010, 23:34 #2
программка в VB или VBA ?
0
LittleSunny
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 5
29.09.2010, 23:42  [ТС] #3
Блин, как-то не хорошо получилось((

Хотя, на самом деле, для меня не имеет никакой разницы где её написать. Важен результат.
0
gaw
6632 / 1499 / 169
Регистрация: 09.01.2010
Сообщений: 4,273
30.09.2010, 00:21 #4
так вот же он, - результат
Цитата Сообщение от LittleSunny Посмотреть сообщение
4. Вывод: через два года вероятностью 0,51% процентная ставка будет составлять 6%.
0
LittleSunny
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 5
30.09.2010, 00:28  [ТС] #5
мне нужно по схеме этой задачи написать программу. что бы вводились разные данные матриц, векторов и периодов. что бы она автоматически сама делала вычисления.
0
Alex77755
10728 / 3303 / 547
Регистрация: 13.02.2009
Сообщений: 9,722
30.09.2010, 11:13 #6
Тебе нужно сюда
И для чего даны
в першому кварталі першого року ймовірності стану мали наступні знчення (p1(0),4; p2(0),2; p3(0),15; p4(0),15; p5(0),1),
Что-то я не нашол где их применили. Ненужные данные?

Добавлено через 17 минут
Цитата Сообщение от LittleSunny Посмотреть сообщение
мне нужно по схеме этой задачи написать программу. что бы вводились разные данные матриц, векторов и периодов. что бы она автоматически сама делала вычисления.
А по сути нужно прочитать методичку:
1. Исходные данные показывать? Где?
2. Результаты промежуточных вычислений показывть? Где? На этом листе или на листе результатов(так бывает часто в курсовых)
3.Какова вообще форма вывода результата
Если имеется методичка - обращайся в личку или на мыло
0
LittleSunny
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 5
30.09.2010, 17:16  [ТС] #7
Методички никакой нет, так бы я и сама справилась.. где выводить тоже не важно.
как бы выводится окошко с вопросом "какая размерность матрицы?".. потом окошко с пустыми клеточками для ввода. тоже самое для вектора. потом вводится период(кол-во умножений)
в конце выводится окончательный результат(вектор) и снизу его наибольшее число. всё

никаких пром вычислений не нужно..
0
Alex77755
10728 / 3303 / 547
Регистрация: 13.02.2009
Сообщений: 9,722
30.09.2010, 20:51 #8
Запрос размерности:
Visual Basic
1
Razmer = InputBox("Какая размерность матрицы?", "Как бы окошко с вопросом..", 8)
- потом окошко с пустыми клеточками для ввода
Вот тут сложней. Или надо выводить форму и грузить в неё текстбоксы согласно размеру матрицы.
А проще вывести тот же InputBox и попросить ввести элементы через какой-нибудь разделитель. Например через пробел или точку с запятой.
Потом разбить Split по элементам. Например:
Visual Basic
1
MS = Split(InputBox("Введите элементы матрицы через пробел", "Ввод матрицы"), " ")
0
gaw
6632 / 1499 / 169
Регистрация: 09.01.2010
Сообщений: 4,273
01.10.2010, 09:23 #9
в качестве примера
без проверок и окошка с пустыми клеточками для ввода
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
1
LittleSunny
0 / 0 / 0
Регистрация: 29.09.2010
Сообщений: 5
02.10.2010, 00:19  [ТС] #10
gaw, спасибо огромнийшее!!!!!!!!! Не могу даже найти подходящих слов!!! Признательна немерено!!!!
0
02.10.2010, 00:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2010, 00:19

Запуск кода из VBA в Excel
Подскажите пожалуйста, знает кто, как запустить с помощью кода в VBA код в VBA...

Набор случайных чисел vba excel
Sub GoodNewsEveryone() Const N As Integer = 10 Dim A(N) As Integer Dim i...

Операции сложения/умножения в VBA/Excel.
Добрый вечер, уважаемые программисты. Прошу помощи в решении задачи - написании...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru