Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/97: Рейтинг темы: голосов - 97, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 20.01.2011
Сообщений: 6
1

Перемножение матриц разных размерностей

20.01.2011, 12:43. Показов 17828. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане. Есть у меня такой вопрос.
Решая задачу химической кинетики необходимо решить систему дифф. уравнений.
столкнулся с такой проблемой, что мне надо перемножить матрицу типа
[ 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
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2011, 12:43
Ответы с готовыми решениями:

Перемножение матриц
Добрый день, подскажите пжлст. почему Матлаб отказывается перемножать матрицы записанные следующим...

Перемножение матриц разного размера
Всем здравствуйте! У меня есть одна задачка, необходимо перемножить матрицы разной размерность А и...

Массивы больших размерностей
Нужно создать массив чисел большого размера (порядка 100000х100000 точек типа double). Оперативной...

Спектр обобщенных размерностей
Кто знает как построить спектр обобщенных размерностей для одномерного сигнала в Matlab? Должен...

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)
В интернете море статей, посвященным решению диф. уравнений. Дерзайте!
Вложения
Тип файла: rar Диф уравн_MatLab.rar (889.0 Кб, 166 просмотров)
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
А если так?

C
1
2
3
4
5
6
7
clc
syms c1 c2 c3 c4 k1 k2 k3 k4
A=[c1 c2;c3 c4]
B=[k1 k2 ;k3 k4]
C=A*B
D=[1 2; 5 1]
C*D
Результат:
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
Нудно сатрицу-строку умножить на матрицу-столбец и все получится.
C
1
2
3
4
5
clc
syms c1 c2 c3 c4 k1 k2 k3 k4
A=[c1 c2 c3 c4]
B=[k1; k2 ; k3; k4]
C=A*B
Результат:
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.01.2011, 11:06
Помогаю со студенческими работами здесь

Перемножение и сложение матриц разных размерностей
Делал я значит задание на перемножение матриц разных размерностей. А второе задание, сложение...

Перемножение разных по размеру матриц
Код для перемножения различных по размер матриц (соответственно которые можно перемножить), код на...

Перемножение двух матриц которые хранятся в разных файлах
Ребят, всем привет. такая проблема: надо рассчитать произведение двух матриц, которые хранятся в...

Перемножение матриц, умножение матриц на вектор, сложение матриц
Помогите пожалуйста написать программу, которая производит основные действия с матрицами...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru