2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Вектор параметров для ode45
Сообщение23.03.2011, 21:41 
Аватара пользователя


31/01/10
42
Друзья, кто нибудь передавал 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 
Аватара пользователя


31/01/10
42
Непростая задачка, верно? )

 Профиль  
                  
 
 Re: Вектор параметров для ode45
Сообщение26.03.2011, 23:53 


10/11/06
64
Не понятно, какую систему вам надо решить.
Здесь:
Код:
dy = [dy1'; dy2'; dy3'];

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

 Профиль  
                  
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 13:41 
Аватара пользователя


31/01/10
42
K-3 в сообщении #427825 писал(а):
Не понятно, какую систему вам надо решить.

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

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

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

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

 Профиль  
                  
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 16:10 


10/11/06
64
dy1 - столбец из двух компонент, dy2, dy3 - скаляры

 Профиль  
                  
 
 Re: Вектор параметров для ode45
Сообщение27.03.2011, 23:31 
Аватара пользователя


31/01/10
42
K-3 в сообщении #428060 писал(а):
dy1 - столбец из двух компонент, dy2, dy3 - скаляры

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

 Профиль  
                  
 
 
Сообщение28.03.2011, 08:28 
Аватара пользователя


31/01/10
42
Последний вопрос снимается :) Вы правы, K-3.

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

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


10/11/06
64
В принципе можно как-то так:

Код:
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 
Аватара пользователя


31/01/10
42
Увы, если размерность $dim(\overrightarrow{param})=100$ - это вызовет дополнительные трудности :P

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


10/11/06
64
В чем именно?

 Профиль  
                  
 
 
Сообщение29.03.2011, 12:47 
Аватара пользователя


31/01/10
42
В функции rigid будет теперь не $2 \cdot 3$ строк, а $N \cdot 3,~N = 100$.

 Профиль  
                  
 
 
Сообщение29.03.2011, 13:38 


10/11/06
64
Это разве много?

 Профиль  
                  
 
 
Сообщение29.03.2011, 16:05 
Аватара пользователя


31/01/10
42
Да, если они прописываются каждый раз своими руками, а вектор параметров каждый раз меняется.
А по вашему - это в порядке вещей? :wink:

 Профиль  
                  
 
 Re: Вектор параметров для ode45
Сообщение29.03.2011, 16:16 


10/11/06
64
Зачем же руками?
Как-то так:
Код:
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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group