0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
1 | |
Перемножение матриц разных размерностей20.01.2011, 12:43. Показов 17828. Ответов 9
Метки нет (Все метки)
Здравствуйте уважаемые форумчане. Есть у меня такой вопрос.
Решая задачу химической кинетики необходимо решить систему дифф. уравнений. столкнулся с такой проблемой, что мне надо перемножить матрицу типа [ 0 1 0 1 0 0 0 1 0 -1 1 0 0 . . . . ....................... ....................... 0 1 1 1 ..........1] - размер этой матрицы 70х30 а вот вторая должна быть в такой форме [C1*k1, C1*C2*k1, C3*C4*k3 .... ..............................................] - размер этой матрицы 1х70 Перемножая эти матрицы, транспонируя первую матрицу - получится матрица - которую в последующим я должен решить. Каждое получившееся значение матрицы - будет дифф. уравнением] пример: [k1*k2*C1+C2*k10*k12+2k1*k2*k6*C1*C2*c4+...+C1*k1 ............................................................................... ............................................................................... kn*km*Cz*cn..................................................+Cn*km] то есть далее я решаю систему дифф. уравнений где: dt/dc1=k1*k2*C1+C2*k10*k12+2k1*k2*k6*C1*C2*C4+........+C1*k1 как можно это решить - к сожалению я не селен в матлабе, может кто сможет вообще скинуть пример в матлабе - любой - а я посомтрю и разберусь. Я так понимаю решать это надо с помощью m-file задавая функцию... заранее спасибо. С Уважением Алексей.
0
|
20.01.2011, 12:43 | |
Ответы с готовыми решениями:
9
Перемножение матриц Перемножение матриц разного размера Массивы больших размерностей Спектр обобщенных размерностей |
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
|
|
20.01.2011, 16:10 | 2 |
Сообщение было отмечено Памирыч как решение
Решение
Уважаемый, Алексей.Перемножить матрицы А(70х30) и В(1х70) можно только так:
В(1х70)* А(70х30) =С(1х30) или так А'(30x70)*B'(70x1)=C'(30x1) В интернете море статей, посвященным решению диф. уравнений. Дерзайте!
0
|
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
20.01.2011, 20:43 [ТС] | 3 |
Это понятно и понятно как решать дифф. уравнения. Не понятно как в матлабе записать символьную матрицу и перемножить её с числовой матрицей, вот этого не понимаю. Я уже кучу всего перечитал, но не найти. То есть что именно необходимо:
A=(1 0 1 0 0 0 0 0) и так далее - это первая матрица, а вот во второй должно быть примерно так произведение kn с Сm, то есть матрица В=(k1*C1 C2*k2 .... ) и так далее. Так вот как мне сделать чтобы создать эту матрицу с произведением K*C. и потом её перемножить чтобы получить данные. Вот это не понятно. Объясните пожалуйста. За предыдущий ответ тоже огромное спасибо! P.S. что делал я: я символьно задавал так A=sym('[k1*C1; k2*C2; ....]') - но он не воспринимает k1*C1 - как произведение, а так же такую матрицу нельзя перемножить с желаемой.
0
|
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
|
||||||
20.01.2011, 21:36 | 4 | |||||
А если так?
A = [ c1, c2] [ c3, c4] B = [ k1, k2] [ k3, k4] C = [ c1*k1+c2*k3, c1*k2+c2*k4] [ c3*k1+c4*k3, c3*k2+c4*k4] D = 1 2 5 1 ans = [ c1*k1+c2*k3+5*c1*k2+5*c2*k4, 2*c1*k1+2*c2*k3+c1*k2+c2*k4] [ c3*k1+c4*k3+5*c3*k2+5*c4*k4, 2*c3*k1+2*c4*k3+c3*k2+c4*k4] >>
0
|
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
20.01.2011, 23:22 [ТС] | 5 |
К сожалению, если матрица имеет вид:
А=[k1 k2 k3 k4 ... ... ... kn] а матрица B B=[C1 C2 C3 C4 ... ... Cm] складываться - такие матрицы складываются а вот не перемножаются и выдает ошибку: ??? Error using ==> sim.mtimes at 31 Inner matrix dimensions must agree. Что делать дальше? По логике вещей же должна получиться матрица вида: D=[k1*C1 k2*C2 k3*C3 ... kn*Cm]
0
|
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
|
||||||
20.01.2011, 23:28 | 6 | |||||
Нудно сатрицу-строку умножить на матрицу-столбец и все получится.
A = [ c1, c2, c3, c4] B = k1 k2 k3 k4 C = c1*k1+c2*k2+c3*k3+c4*k4 >>
0
|
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
21.01.2011, 00:12 [ТС] | 7 |
но ведь это не то что требуется, так получается перемножение именно столбца со строкой, а что же делать для того чтобы перемножить столбцы? Просто может я не правильно объясняю.
Попробую написать обычный пример сейчас - это будет интересно: Вот смотрите: У меня есть некая скажем химическая реакция: (C1)(C2) (k1) (C3) это обозначает следующее (С1,С2,С3-это компоненты,k1-это реакция первая) H2+ O2 = H2O (C3)(k2)(C4)(C4)(C2) H2O = H + H + O2 Вот такая забавная скажем реакция. И для того чтобы выяснить как меняются концентрации по времени, я должен написать и режить дифф. уравнение следующего вида: dc\dt=km*Cn Каким образом я более легкие задачи реализовывал в MathCad: 1. Записываю матрицу в которой показываю когда и какие компоненты участвуют: NN C1 C2 C3 C4 (k1) -1 -1 1 0 (k2) 0 1 -1 1 здесь (1) - компонент находится с правой стороны (- 1) - компонент находится с левой стороны реакции (0) - компонент отсутствует в реакции 2. Записываю матрицу в которой описываю реакции,это делается перемножением вышеупомянутой С - (концентрацией компонента и k1 - реакцией процесса) (вот тут и проблема, в mathcad можно реализовать, а как реализовать это в matlab - не получается) Создаем матрицу - она получается у нас размером 1*2 (1 столбец 2 строки) r(k,C) = [k1*C1*C2 k2*C3] 3. Я транспонирую 1 матрицу NN C1 C2 C3 C4 (k1) -1 -1 1 0 (k2) 0 1 -1 1 получаем: NN k1 k2 C1 -1 0 C2 -1 1 C3 1 -1 C4 0 1 4 Перемножаю 1 матрицу со второй. Получается следующая матрица 1*4: resultatDc\dt= [-C1*C2*k1 C3*k2-C1*C2*k1 C1*C2*k1-C3*k2 C3*k2 ] и в итоге каждая получившееся строчка в этой матрице это и есть то самое уравнение которое я решаю: dc1|dt = -C1*C2*k1 dc2|dt = C3*k2-C1*C2*k1 dc3|dt = C1*C2*k1-C3*k2 dc4|dt = C3*k2 и просто решается эта система уравнений. Как мне сделать тоже самое но в матлаб. Почему есть такая необходимость, маткад к сожалению не в состоянии обработать такого размера матрицу как я заявлял выше. До 20 уравнений ещё нормально, а потом всё, и таблицы не помогают. Я решал до этого в маткаде такие вещи. А теперь мне надо решить где не 2 уравнения а 70 уравнений (k70) и элементов не 4 (С4) а 30 (С30). Вот так. С Уважением Алексей.
0
|
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
22.01.2011, 00:36 [ТС] | 8 |
А можно хотя бы написать, что ответа не будет? А то я тут жду! :? )
0
|
2833 / 2130 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
|
|
22.01.2011, 07:36 | 9 |
Уважаемый, aspi, Ваша задача требует время, чтобы в ней разобраться и моего желания делать это. Я никаких обязательств Вам не давала и ничего Вам не должна. Надеюсь Вы понимаете, что есть у меня дела и по важней. Единственное, что Вам остается ждать и благодарить (чего Вы не разу не сделали) за каждое участие в Вашей проблеме.
С уважением Галина Борисовна.
0
|
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
|
|
22.01.2011, 11:06 [ТС] | 10 |
Собственно это я и хотел получить, что задача к сожалению для многих сложная.
Спасибо за Ваши старания, попробую на другом форуме.
0
|
22.01.2011, 11:06 | |
22.01.2011, 11:06 | |
Помогаю со студенческими работами здесь
10
Перемножение и сложение матриц разных размерностей Перемножение разных по размеру матриц Перемножение двух матриц которые хранятся в разных файлах Перемножение матриц, умножение матриц на вектор, сложение матриц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |