2013-06-26 2 views
1

Я работаю над решением решения уравнения частичной дифференциальности, а второй закон Диффузии Fick. Я смог создать 3D-график, используя функции NDSolve и Plot3D. код используется:Численное решение для заданного параметра в NDSolve (Mathematica)

NDSolve[{D[c[t, h], t] == 1*D[c[t, h], h, h], 
       c[0, h] == Erfc[h/(2*81.2)], 
       c[t, 0] == 1, 
      c[t, 4000] == 3.08*^-18}, c, {t, 0, 900}, {h, 0, 274}] 

Вместо графического представления, я хотел бы найти численные точки графика при Т = 900. Я хотел бы знать, как поставить в т = 900 в команде NDSolve (или другой функций), чтобы генерировать детализированные числовые точки решения.

ответ

0

Попробуйте сохранить решение в переменной первой:

e = NDSolve[{D[c[t, h], t] == 1*D[c[t, h], h, h], c[0, h] == Erfc[h/(2*81.2)], c[t, 0] == 1, c[t, 4000] == 3.08*^-18}, c, {t, 0, 900}, {h, 0, 274}] 

Тогда мы можем вычислить это выражение для наших желаемых величин:

Evaluate[c[900, 10] /. e] 
(*{0.914014}*) 

Или сделать его более универсальным, мы можем использовать Манипулирование:

Manipulate[Evaluate[c[t, h] /. e], {t, 0, 900}, {h, 0, 274}] 

Manipulate

Обновление: Учитывая информацию, полученную мной из комментариев ниже; мы можем определить функцию как д [Т, Н], которое даст нам решение в виде функции:

q[t_, h_] := Evaluate[c[t, h] /. e] 
q[900, 10] 
(*{0.914014}*) 
+0

чуть аккуратнее, так как мы знаем, что есть одно решение определить 'е = с /. First @ NDSolve..', то вы можете напрямую использовать e как: 'e [900,10] -> .91' – agentp

+0

@george Это хорошо. – Ali

+0

Большое спасибо, Джордж! Это именно то, что я пытался сделать! Но я не могу определить e = c /. First @ NDSolve .. У меня появилось сообщение об ошибке: Первый :: нормальный: неатомическое выражение ожидается в позиции 1 в First [NDSolve]. >> ReplaceAll :: reps: {First [NDSolve] ..} не является ни списком правил замены, ни действительной таблицей диспетчеризации, и поэтому не может использоваться для замены. >> Как я могу это исправить? –