2014 dxdy logo

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

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




 
 Вектор параметров для ode45
Сообщение23.03.2011, 21:41 
Аватара пользователя
Друзья, кто нибудь передавал ode45 вектор параметров вот так:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
----------------------------------
clear all
close all
clc

param = [1 2];
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);
[T,Y] = ode45(@rigid,[0 12],[0 1 1],options,param);

% Plotting the columns of the returned array Y versus T shows the solution

figure('color','w')
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')

----------------------------------

function dy = rigid(t, y, param)

% dy = zeros(3,1);    % a column vector

dy1 = param' * y(2) * y(3);
dy2 = -y(1) .* y(3);
dy3 = -0.51 * y(1) .* y(2);

dy = [dy1'; dy2'; dy3'];
 

?

Мне нужно получить решения для вектора параметров [1 2].

 
 
 
 
Сообщение26.03.2011, 12:37 
Аватара пользователя
Непростая задачка, верно? )

 
 
 
 Re: Вектор параметров для ode45
Сообщение26.03.2011, 23:53 
Не понятно, какую систему вам надо решить.
Здесь:
Код:
dy = [dy1'; dy2'; dy3'];

конкатенация разноразмерных матриц.

 
 
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 13:41 
Аватара пользователя
K-3 в сообщении #427825 писал(а):
Не понятно, какую систему вам надо решить.

Ту, что я описал.

K-3 в сообщении #427825 писал(а):
Здесь:
Код:
dy = [dy1'; dy2'; dy3'];

конкатенация разноразмерных матриц.

Согласен, это конкатенация. Не вижу, чтобы матрицы были разноразмерными. :-)

 
 
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 16:10 
dy1 - столбец из двух компонент, dy2, dy3 - скаляры

 
 
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 23:31 
Аватара пользователя
K-3 в сообщении #428060 писал(а):
dy1 - столбец из двух компонент, dy2, dy3 - скаляры

Это вы в отладке посмотрели? или просто ваши соображения?

 
 
 
 
Сообщение28.03.2011, 08:28 
Аватара пользователя
Последний вопрос снимается :) Вы правы, K-3.

Мой вопрос, можно перефразировать вот так:
Цитата:
Можно ли решить систему оду $\vec{y} = f(\vec{x},\vec{a})$ векторно в Matlab без использования цикла по параметру $\vec{a}=(a_1,\dots,a_n)$?

 
 
 
 Re: Вектор параметров для ode45
Сообщение28.03.2011, 18:53 
В принципе можно как-то так:

Код:
function dy = rigid(~, y, param)

dy11 = param(1) * y(2) * y(3);
dy12 = -y(1) .* y(3);
dy13 = -0.51 * y(1) .* y(2);

dy21 = param(2) * y(5) * y(6);
dy22 = -y(4) .* y(6);
dy23 = -0.51 * y(4) .* y(5);

dy = [dy11; dy12; dy13; dy21; dy22; dy23];

 
 
 
 
Сообщение29.03.2011, 07:16 
Аватара пользователя
Увы, если размерность $dim(\overrightarrow{param})=100$ - это вызовет дополнительные трудности :P

 
 
 
 Re: Вектор параметров для ode45
Сообщение29.03.2011, 08:48 
В чем именно?

 
 
 
 
Сообщение29.03.2011, 12:47 
Аватара пользователя
В функции rigid будет теперь не $2 \cdot 3$ строк, а $N \cdot 3,~N = 100$.

 
 
 
 
Сообщение29.03.2011, 13:38 
Это разве много?

 
 
 
 
Сообщение29.03.2011, 16:05 
Аватара пользователя
Да, если они прописываются каждый раз своими руками, а вектор параметров каждый раз меняется.
А по вашему - это в порядке вещей? :wink:

 
 
 
 Re: Вектор параметров для ode45
Сообщение29.03.2011, 16:16 
Зачем же руками?
Как-то так:
Код:
function dy = rigid(~, y, param)

np = length(param);

y = reshape(y, 3, np);
dy = zeros(3, np);

dy(1, :) = param .* y(2, :) .* y(3, :);
dy(2, :) = -y(1, :) .* y(3, :);
dy(3, :) = -0.51 * y(1, :) .* y(2, :);

dy = dy(:);

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


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