Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 11:12   #1
stpdqstns
Пользователь
 
Регистрация: 04.11.2012
Сообщений: 33
По умолчанию Решение системы дифференциальных уравнений(C++)

Здравствуйте. Подскажите, пожалуйста, как решить систему дифференциальны уравнений:
Цитата:
dT/dt = O - k1*T*(S - V);
dV/dt = k1*T*(S - V) - k2*V;
dD/dt = C*k1*T(S - V) - O/C - k3*T;
Как можно расчитать зависимости T(t), V(t) и D(t) при начальном условии: D(t=0) = 0.

Другие данные:
T(t=0) = 15
V(t=0) = 5
O = 21
S = 18
C = 1.5
k1 = 0.2
k2 = 1.1
k3 = 0.1
/*******************************/
В общем я сделал функцию, которая принимает параметры (T, V, O, S, C, k1, k2, k3), и в цикле мне необходимо посчитать значения T(t), V(t) и D(t), по значениям которых будет строиться график(по оси OY). Ну вобщем я попробовал такой метод:
Код:
void GetThisFuckingValues(double T,double V,double O,double S,double C,double k1,double k2,double k3)
{
     // на графике нарисуется 3 кривые

     const int cnt  = 9;
     double OX[cnt];
     double V_OY[cnt];
     double D_OY[cnt];
     double T_OY[cnt];

        double  T0=0;
	double V0=0;
	double D=0;
	for(int i = 1;i < cnt; i++)
	{
	T=T+(O-k1*T*(S-V));
	V=V+(k1*T*(S-V)-(k2*V));
	D=D+((C*k1*T)*(S-V)-(O/C)-(k3*T));
        
        V_OY[i] = V;
        D_OY[i] = D;
        T_OY[i] = T;

        OX[i] = i;
        }
    
}
Но значения T, V, D получаются астрономическими, подскажите, пожалуйста, как их правильно посчитать

Последний раз редактировалось stpdqstns; 29.05.2013 в 11:21.
stpdqstns вне форума
Старый 29.05.2013, 11:26   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Начните с простого:
Цитата:
dF/dt = F/(1+2t)
F(0) = 2
Напишите код, решающий это уравнение. Убедитесь, что F(1)=2*e^2 (e - число Эйлера, 2.71828...).
Подсказка: рассматривайте dF/dt как (F(t+dt)-F(t))/dt, где dt - какое-то малое число, скажем, 0.0001.
Abstraction вне форума
Старый 29.05.2013, 12:27   #3
stpdqstns
Пользователь
 
Регистрация: 04.11.2012
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Начните с простого:
Напишите код, решающий это уравнение. Убедитесь, что F(1)=2*e^2 (e - число Эйлера, 2.71828...).
Подсказка: рассматривайте dF/dt как (F(t+dt)-F(t))/dt, где dt - какое-то малое число, скажем, 0.0001.
Стыдно, но я даже не знаю почему dF/dt нужно рассматривать рассматривать как (F(t+dt)-F(t))/dt
stpdqstns вне форума
Старый 29.05.2013, 12:40   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ну, потому что (если не вдаваться в тонкости) dF/dt в точке t - это предел (F(t+dt)-F(t))/dt при dt стремящемся к нулю. Определение производной.
Но, поскольку пределы компьютер брать не умеет, можно попытаться ограничиться "очень маленьким" dt.
Abstraction вне форума
Старый 29.05.2013, 12:52   #5
stpdqstns
Пользователь
 
Регистрация: 04.11.2012
Сообщений: 33
По умолчанию

Дифференциальных уравнений никогда в жизни не решал: попробовал , прочитав немного теории для чайников, вот что получилось:
Цитата:
F = C*(2*t+1)/2
Правильно ли это?

upda: похоже, что нет, подставив 1, ни разу не число Эйлера получилось..

Последний раз редактировалось stpdqstns; 29.05.2013 в 12:54.
stpdqstns вне форума
Старый 29.05.2013, 12:56   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Не решайте аналитически. Считайте. Программой.
Изначально есть F(0). Можно посчитать F(0+dt). Потом F(dt+dt). Потом F(2dt+dt)...

P.S. Упс, невнимательность. dF/dt = F*(1+2t).

P.P.S. Если интересно, аналитическое решение для dF/dt = F/(1+2t), F(0)=2 - это F(t)=2*sqrt(2t+1).

Последний раз редактировалось Abstraction; 29.05.2013 в 13:01.
Abstraction вне форума
Старый 29.05.2013, 13:14   #7
stpdqstns
Пользователь
 
Регистрация: 04.11.2012
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Не решайте аналитически. Считайте. Программой.
Изначально есть F(0). Можно посчитать F(0+dt). Потом F(dt+dt). Потом F(2dt+dt)...

P.S. Упс, невнимательность. dF/dt = F*(1+2t).

P.P.S. Если интересно, аналитическое решение для dF/dt = F/(1+2t), F(0)=2 - это F(t)=2*sqrt(2t+1).
Как полулось F(t)=2*sqrt(2t+1)? Что значит подсчитать программно? Я не понимаю суть уравнения dF/dt = F/(1+2t), F(0)=2. Подставив 0 в F(t)=2*sqrt(2t+1), получается 2, а F(1), не получается 2*e^2, получается ~3.4641...
stpdqstns вне форума
Старый 29.05.2013, 14:27   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Как полулось F(t)=2*sqrt(2t+1)? Что значит подсчитать программно? Я не понимаю суть уравнения dF/dt = F/(1+2t), F(0)=2. Подставив 0 в F(t)=2*sqrt(2t+1), получается 2, а F(1), не получается 2*e^2, получается ~3.4641...
По порядку:
dF/dt = F/(2t+1) => dF/F=dt/(2t+1) => ln(F(t)) = 1/2ln(2t+1) + C => F(t) = C*exp(1/2ln(2t+1)) => F(t) = C*(2t+1)^(1/2).
F(0) = 2 = C*(2*0+1)^(1/2) = C => F(t) = 2*sqrt(2t+1). Можно подставить и проверить.

Посчитать программно - значит, написать программу, которая будет выводить F(t). Аналогично Вашему исходному заданию.

Да, F(1) в этом уравнении равно 2*sqrt(3). Мой косяк (см. P.S. в предыдущем сообщении). Получилось бы, если бы уравнение было dF/dt = F*(1+2t), с тем же начальным условием.
Abstraction вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение дифференциальных уравнений в Excel cMep4[21] Microsoft Office Excel 0 20.04.2013 12:32
Численное решение дифференциальных уравнений Sargil Помощь студентам 3 28.12.2012 11:00
РЕШЕНИЕ СИСТЕМЫ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ методом Эйлера ruslan 91 Паскаль, Turbo Pascal, PascalABC.NET 1 10.01.2011 22:12
Решение обыкновенных дифференциальных уравнений Craz Помощь студентам 0 28.11.2009 21:25