2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Процедура в Mathematica
Сообщение20.01.2010, 00:14 
Здравствуйте Ув.Гуру
У меня такой вопрос: вот надо матрицу на матрицу умножить в процедуре, не могу разобраться с процедурой. Для начала пытаюсь вывести просто матрицу через проц. как это правильно зделать? Мой вариант:
Код:
Mtx[_a1, _a2, _a3, _a4] := block[{A}, A = {{a1, a2}, {a3, a4}} MatrixForm[A]]

и запрос затем:
Код:
Mtx[1, 2, 3, 4]

Выводит:
Код:
Mtx[1, 2, 3, 4]

чет нето...
Помагите пож-ста.

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 16:28 
с вводом выводом разобрался, теперь еще вопрос:
как передать параметр i в цикле, например for [ i=1, i<10, i++, ...
далее нужно будет C[i] или C{i} вот этот параметр как передается правильно? неодин из написаных вариантов нестал работать...

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 20:24 
Аватара пользователя
pointXY в сообщении #281923 писал(а):
с вводом выводом разобрался, теперь еще вопрос:
как передать параметр i в цикле, например for [ i=1, i<10, i++, ...
далее нужно будет C[i] или C{i} вот этот параметр как передается правильно? неодин из написаных вариантов нестал работать...


С[[i]], если под C подразумевается список/таблица.

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 20:45 
Спасибо, разобрался с индексами...
Прошу посмотреть код и указать ошибку:
Код:
a[1, 1] = 1
a[1, 2] = 2
a[1, 3] = 3
a[2, 1] = 4
a[2, 2] = 5
a[2, 3] = 6
a[3, 1] = 7
a[3, 2] = 8
a[3, 3] = 9

b[1, 1] = 1
b[1, 2] = 2
b[1, 3] = 3
b[2, 1] = 4
b[2, 2] = 5
b[2, 3] = 6
b[3, 1] = 7
b[3, 2] = 8
b[3, 3] = 9

A = {{a[1, 1], a[1, 2], a[1, 3]}, {a[2, 1], a[2, 2],
   a[2, 3]}, {a[3, 1], a[3, 2], a[3, 3]}}
B = {{b[1, 1], b[1, 2], b[1, 3]}, {b[2, 1], b[2, 2],
   b[2, 3]}, {b[3, 1], b[3, 2], b[3, 3]}}
MatrixForm[A]
MatrixForm[B]
в первой части не должно быть ошибки, но вдруг.
далее:
Код:
mtx[A, B] := Block[{A, B},
  For[i = 1, i < 4, i++,
    For[j = 1, j < 4, j++,
     c[i_, j_] = 0;
     For[k = 1, k < 4, k++,
      c[i_, j_] = c[i, j] + a[i, k]*b[k, j]
      ]]]
   MatrixForm[{{c[1, 1], c[1, 2], c[1, 3]}, {c[2, 1], c[2, 2],
      c[2, 3]}, {c[3, 1], c[3, 2], c[3, 3]}}]]
mtx[A, B]

результат:
Код:
150 150 150
150 150 150
150 150 150

когда должен быть:
Код:
30 36 42
66 81 96
102 126 150

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 21:05 
Аватара пользователя
pointXY в сообщении #282044 писал(а):
Спасибо, разобрался с индексами...
Прошу посмотреть код и указать ошибку:
Код:
a[1, 1] = 1
a[1, 2] = 2
a[1, 3] = 3
a[2, 1] = 4
a[2, 2] = 5
a[2, 3] = 6
a[3, 1] = 7
a[3, 2] = 8
a[3, 3] = 9

b[1, 1] = 1
b[1, 2] = 2
b[1, 3] = 3
b[2, 1] = 4
b[2, 2] = 5
b[2, 3] = 6
b[3, 1] = 7
b[3, 2] = 8
b[3, 3] = 9

A = {{a[1, 1], a[1, 2], a[1, 3]}, {a[2, 1], a[2, 2],
   a[2, 3]}, {a[3, 1], a[3, 2], a[3, 3]}}
B = {{b[1, 1], b[1, 2], b[1, 3]}, {b[2, 1], b[2, 2],
   b[2, 3]}, {b[3, 1], b[3, 2], b[3, 3]}}
MatrixForm[A]
MatrixForm[B]
в первой части не должно быть ошибки, но вдруг.
далее:
Код:
mtx[A, B] := Block[{A, B},
  For[i = 1, i < 4, i++,
    For[j = 1, j < 4, j++,
     c[i_, j_] = 0;
     For[k = 1, k < 4, k++,
      c[i_, j_] = c[i, j] + a[i, k]*b[k, j]
      ]]]
   MatrixForm[{{c[1, 1], c[1, 2], c[1, 3]}, {c[2, 1], c[2, 2],
      c[2, 3]}, {c[3, 1], c[3, 2], c[3, 3]}}]]
mtx[A, B]

результат:
Код:
150 150 150
150 150 150
150 150 150

когда должен быть:
Код:
30 36 42
66 81 96
102 126 150


Это вообще что? :shock: Зачем такие перенавороты для того, чтобы просто перемножить две матрицы? Странная какая-то форма записи. Зачем вы пишете a[1,1] = 1, потом из этого множества делаете матрицу простым перечислением? Чем не угодила запись A={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}? И обращайтесь спокойно к любому элементу матрицы как A[[i,j]]. Далее, как связано произведение матриц A и B с тем, что написано в функции, в функцию передаете матрицы, а работаете там с величинами, которые определены до матрицы?
Замените c[i_, j_] на c[i, j] и ваше "еретическое" перемножение матриц тоже по случайному совпадению даст верный результат. А вообще проще было бы написать A.B и получить ответ.

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 21:32 
Спасибо))
A={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} пробовал - неполучалось цикл зделать. Мне нужна процедура, которая перемножает две любые матрицы размером 3х3, у меня значения этих матриц задаются вначале и дальше процедура. А функцией dot по условию нельзя пользоваться.

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 21:50 
Аватара пользователя
pointXY в сообщении #282072 писал(а):
Спасибо))
A={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} пробовал - неполучалось цикл зделать. Мне нужна процедура, которая перемножает две любые матрицы размером 3х3, у меня значения этих матриц задаются вначале и дальше процедура. А функцией dot по условию нельзя пользоваться.


Ну если бы вы писали в своих циклах что-то типа С[[i,j]]=С[[i,j]]+A[[i, k]]*B[[k, j]], то все бы работало и с такой формой записи A={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, только матрицу C надо было бы определять как 3 на 3 с нулевыми элементами.

 
 
 
 Re: Процедура в Mathematica
Сообщение20.01.2010, 22:33 
Leierkastenmann спасибо за помощ.

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group