последовательное умножение матрицы самой на себя...

Программирование на Visual Basic for Applications
muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

последовательное умножение матрицы самой на себя...

Сообщение muter » 07.05.2005 (Сб) 19:05

Дана матрица А(n, n), где сумма всех элементов матрицы равна 1 и
0<=a[i,j]<=1. Составить программу последовательного умножения матрицы самой на себя. Процесс закончить, когда все элементы двух последовательных матриц будут отличаться друг от друга меньше, чем на 10^-3 .

Как сделать условие, чтобы элементы отличались друг от друга на
10 ^-3 степени тобишь на 0.001.?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.05.2005 (Вс) 4:51

Если (Abs([максимальный элемент матрицы] минус [минимальный элемент матрицы]) < .001), то выполняется.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

Сообщение muter » 08.05.2005 (Вс) 6:32

что выполняется - перемножение?
максимальный и минимальный элемент каждый раз искать в цикле, где идет последовательно е перемножение?

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 08.05.2005 (Вс) 7:04

muter
GSerg привел условие, по которому ты найдешь элементы, которые отличаются друг от друга меньше, чем на 10^-3
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

Сообщение muter » 08.05.2005 (Вс) 19:23

я правильно вас понял?
Код: Выделить всё
max = -3.402823
min = 3.402823
1:
For i = 1 To n
For j = 1 To n
b(i, j) = a(i, j) * b(i, j)
If max < b(i, j) Then max = b(i, j)
If min > b(i, j) Then min = b(i, j)
Next j
Next i

If Abs(max - min) < 0.001 Then GoTo 1

'вывод конечного массива


uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 08.05.2005 (Вс) 22:40

Че-то по-моему никто не понял условия задачи. Если я его правильно понимаю, то мы имеем последовательность матриц A(i), где A(i+1)=A(i)*A(i), и процесс надо заканчивать, если каждый элемент матрицы A(i+1) отличается от соответствующего элемента матрицы A(i) не более, чем на 0.001. Я не прав?

Кроме того, muter, из того примера, который ты привел, у меня зародилось подозрение, что ты не знаешь, как перемножаются матрицы. Я снова не прав?

muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

Сообщение muter » 09.05.2005 (Пн) 4:08

возможно ты прав, подскажи?

muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

Сообщение muter » 09.05.2005 (Пн) 4:12

Код: Выделить всё
{ вычисление произведения матриц }
{подсчет матрицы AxB}
for y = 1 to count  'спускаемся вниз по строкам
   for x = 1 to Count  'идем по элементам строк вправо
   R = 0                      'обнуляем сумму произведений
  for i= 1 to Count      'идем под горизонтали Mat1 и по вертикали
   r= R + mat1[i, y]*Mat2[x, i]
  ResMat1[x, y]= R              'Resmat1[x, y] = результат = R
  next i
next x
next y


теперь я прав?

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 09.05.2005 (Пн) 22:30

Ага, теперь, вроде, похоже, только строчки "ResMat1[x, y]= R" и "next i" стоило бы поменять местами, а то лишние операции происходят. А по исходной задачке тогда все просто - пробегаешь циклом все элементы двух матриц и смотришь, отличаются ли они по модулю (Abs) больше, чем на 0,001, если да, то выходишь из цикла и продолжаешь умножать до посинения :)

muter
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 29.04.2005 (Пт) 19:05

Сообщение muter » 10.05.2005 (Вт) 5:59

Код: Выделить всё
2:
p = 0
For i = 1 To n
For j = 1 To n
b(i, j) = a(i, j) * b(i, j)
If Abs(b(i, j) - a(i, j)) < 0.001 Then p = p + 1
a(i, j) = b(i, j)
Next j
Next i
If p = n * n Then
GoTo 1
Else
GoTo 2
End If
1:

а разве не так происходит перемножение матриц?
что значит перемножить матрицу саму на себя?
это
пример:
0.25 0.25 :arrow: 0.0625 0.0625
0.125 0.5 :arrow: 0.015625 0.25


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList