2014 dxdy logo

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

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




 
 Вопрос к тем, кто разбирается в "Mathematica"е
Сообщение18.10.2006, 23:13 
Ребята!

Подскажите, пожалуйста, кто знает, как заставить Математику решить диффур в циклическом порядке (чтобы она, например, записывала значения в массив, при каждом шаге)

У меня чего то не получается - в цикле решать не хочет. А в единичном порядке решает, т.е.
без цикла. Подскажите, кто знает, можно ли её заставить или нет?
Например такое:

Цитата:
V = 5 * 10^5
d = 1.5 / 2
k = 10
b = 10^15 * k^(10/7)
T = 3.16 * 10^7 * 5 * 10^5
PERIOD = T
difp := p' [t] == b * p[t]^(1/14) * Cos[hi[t]]^(2*d)
difhi := hi ' [t] ==b* ( p[t])^(1/14) * Sin[hi[t]] * Cos[hi[t]]^(2*d - 1)
dif := {difp, difhi, p[ 0] == 0.02, hi[0] == 0.1}

For[ z = 1, z < 10, z = z + 1,
sover = NDSolve[dif, {p[t], hi[t]}, {t, 0, T];
gt[t_] = Evaluate[hi[t] /. %];
Plot[gt[t] , {t, 0, T}];
gt[PERIOD][[1]]]

 
 
 
 Re: Вопрос к тем, кто разбирается в "Mathematica"е
Сообщение19.10.2006, 00:54 
Ogre7 писал(а):
У меня чего то не получается - в цикле решать не хочет. А в единичном порядке решает, т.е.
без цикла. Подскажите, кто знает, можно ли её заставить или нет?

У Вас не получается по многим причинам:
- в теле цикла не хватает одной фигурной скобки при задании интервала интегрирования;
- даже если решать систему не в цикле, то результат лежит в интервале от нуля до 1.6x10^-16, а это очень маленький интервал;
- если Вы используете gt[PERIOD][[1]]] как двумерный массив, то это неправильно, поскольку, как минимум, нельзя в качестве индекса массива использовать вещественное число PERIOD;
- для накопления значений лучше использовать списки.
Цитата:
V = 5*10^5;
d = 1.5/2;
k = 10;
b = 10^15*k^(10/7);
T = 3.16*10^7*5*10^5;
PERIOD = T;
difp := p'[t] == b*p[t]^(1/14)*Cos[hi[t]]^(2*d);
difhi := hi'[t] == b*(p[t])^(1/14)*Sin[hi[t]]*Cos[hi[t]]^(2*d - 1);
dif := {difp, difhi, p[0] == 0.02, hi[0] == 0.1};
gt = {};
For[z = 1, z < 10, z = z + 1, sover = NDSolve[dif, {p[t], hi[t]}, {t, 0, T}];
gt = Append[gt, Evaluate[hi[t] /. sover]];
];

После этого можно обращаться к элементам списка по индексам: gt[[1]], gt[[2]],.... Каждый элемент - решение.

Вы не расскажете, для чего десять раз подряд решать одну и ту же систему дифференциальных уравнений?

 
 
 
 to Zlog
Сообщение19.10.2006, 08:43 
Огромное спасибо :P . Очень ценные замечания.
Сегодня же попробую.

ПС. На самом деле, я скобку использовал просто, при наборе в форуме забыл.

Систему, предпологается решать произвольное число раз. Короче говоря, просто получить выборку по аргументам и значениям функций. Потом нарисовать и посмотреть, что получается.

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


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