2014 dxdy logo

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

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




 
 численное решение ОДУ не в ф. Коши
Сообщение12.12.2008, 20:04 
Диф.ур 2-го порядка. При этом заданы граничные условия в виде типа
y'(0)=3, y(2)=1.
NDSolve в Mathematica ругается и ответа не дает. Matlab вроде умеет, но я с ним плохо знаком. Можно ли эти задачи решать в Mathematica или Mathcad?

 
 
 
 
Сообщение12.12.2008, 20:47 
А где дифур?

 
 
 
 
Сообщение13.12.2008, 01:20 
Mathematica считает. А ругаться она может по-разному. Например, на неправильный синтаксис. Если есть код, приведите. Больше шансов получить конкретный ответ.

 
 
 
 Re: численное решение ОДУ не в ф. Коши
Сообщение13.12.2008, 01:47 
spyphy писал(а):
Диф.ур 2-го порядка. При этом заданы граничные условия в виде типа
y'(0)=3, y(2)=1.


А разве это нормально что граничные условия заданы в разных точках? :roll:

 
 
 
 Re: численное решение ОДУ не в ф. Коши
Сообщение13.12.2008, 10:45 
zuj писал(а):
А разве это нормально, что граничные условия заданы в разных точках?


А что же в этом ненормального?

 
 
 
 
Сообщение13.12.2008, 16:33 
Просто вспомнил что у меня математика как то ругалась когда я с граничными условиями напортачил. Тогда думаю автору и вправду проще здесь код выложить ... понятней будет.

 
 
 
 
Сообщение15.12.2008, 17:13 
Да, я здесь ошибся, Математика такие задачи в принципе решать может (для простейшего примера у меня получилось). Видимо, дело здесь в другом. Возможно, задача слишком навороченная и не исключены ошибки в условии. Буду сам ещё разбираться. Тем ни мение приведу здесь этот пример в упрощенном варианте, когда одну и ту же систему ОДУ метод DSolve решает, а метод NDSolve не решает. В более сложном варианте, когда уравнения уже нелинейные, методу DSolve эта задача тоже не посилам.

Короче, вот пример, здесь это решается и строится соот-щий график:
Код:
b1 = 2;  b2 = 3;
q1 = 2; q2 = 4;
n1 = 3; n2 = 1;
s = DSolve[{
      p1''[x] + p1[x]/b1 == 0,
      p2''[x] + p2[x]/b2 == 0,
      q1 - p1'[0] == q2 - p2'[0],
      n1*p1[0] == n2*p2[0],
      p1[-1] == 1,
      p2[1] == 1
       }, {p1, p2}, x]
f[x_] := p1[x] /. s;
f[x]
Plot[f[x], {x, 0, xm}, PlotRange -> {-3, 3}, AxesLabel -> {"x", "p"}];


Тоже самое, но численно, уже не решаемо:
Код:
xm = 2;
b1 = 2;  b2 = 3;
q1 = 2; q2 = 4;
n1 = 3; n2 = 1;
s = NDSolve[{
      p1''[x] + p1[x]/b1 == 0,
      p2''[x] + p2[x]/b2 == 0,
      q1 - p1'[0] == q2 - p2'[0],
      n1*p1[0] == n2*p2[0],
      p1[-1] == 1,
      p2[1] == 1
       }, {p1, p2}, {x, -xm, xm}]
f[x_] := p1[x] /. s;
f[x]
Plot[f[x], {x, 0, xm}, PlotRange -> {-3, 3}, AxesLabel -> {"x", "p"}];

пишет
Цитата:
NDSolve::"ndv": "For a boundary value problem, only nth order single linear ordinary differential equations is supported."

и ещё много всего.
Какие здесь возможны варианты?

 
 
 
 
Сообщение15.12.2008, 18:26 
А зачем численно решать, если можно аналитически?

 
 
 
 
Сообщение15.12.2008, 21:00 
Ну видимо случай, который можно решить аналитически, является лишь приближением к настоящей задаче.

 
 
 
 
Сообщение16.12.2008, 10:17 
Да, в общем случае, когда ур-ния нелинейные, аналического решения нет, поэтому в любом случае надо решать численно, если только это возможно вобще.

 
 
 
 
Сообщение16.12.2008, 12:27 
Не знаю как у вас, а у меня Mathematica 6.0 все великолепно решает и приведенный вами код вполне боеспособен (только после Plot стоит точки с запятыми постирать :wink: ).
У вас какая версия?

 
 
 
 
Сообщение16.12.2008, 15:59 
zuj писал(а):
У вас какая версия?

) да, я ж совсем забыл, что пользуюсь несколько устаревшей версией сего пакета, а именно ver. 4.2, поскольку более новой рабочей версии с крэками до сих пор не достал. Будем искать.
Если есть возможность, попробуйте прогнать более общий случай, чтобы знать, может ли такое решать 6-ая.
Код:
xm = 2;
q1 = 2; n1 = 3;
q2 = 1; n2 = 2;
s = NDSolve[{
      p1''[x] + p1'[x]/(1 + p1[x] +   p1[x]^2) + (p1'[x])^2/(2 + 3*p1[x] + p1[x]^2) + p1[x]/(2 + p1[x]) == 0,
      p2''[x] + p2'[x]/(2 + p2[x] + 3*p2[x]^2) + (p2'[x])^2/(3 +p2[x] + 2*p2[x]^2) + p2[x]/(3 + 2*p2[x]) == 0,
      q1 - p1'[0] == q2 - p2'[0],
      n1*p1[0] == n2*p2[0],
      p1[-1] == 1,
      p2[1] == 1
       }, {p1, p2}, {x, -xm, xm}]
f[x_] := p1[x] /. s;
f[x]
Plot[f[x], {x, 0, xm}, PlotRange -> {-3, 3}, AxesLabel -> {"x", "p"}]

 
 
 
 
Сообщение18.12.2008, 09:59 
spyphy писал(а):
Если есть возможность, попробуйте прогнать более общий случай, чтобы знать, может ли такое решать 6-ая.


Проверил ... все работает без проблем 8-).

 
 
 
 
Сообщение20.12.2008, 16:06 
Понятно, будем искать.

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


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