【问题标题】:Numerical Solution for a specified parameter in NDSolve (Mathematica)NDSolve (Mathematica) 中指定参数的数值解
【发布时间】:2013-06-26 03:57:21
【问题描述】:

我正在研究解决偏微分方程的解决方案,确切地说是 Fick 的第二扩散定律。 我能够使用 NDSolve 和 Plot3D 函数生成 3D 图。 使用的代码:

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}]

我想找到图形在 t = 900 处的数字点,而不是图形表示。 我想知道如何将 t = 900 放入 NDSolve(或其他函数)中,以生成解的详细数值点。

【问题讨论】:

    标签: math wolfram-mathematica bioinformatics pde


    【解决方案1】:

    先尝试将解决方案保存在变量中:

    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:

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

    更新: 考虑到我从以下 cmets 收到的信息;我们可以定义一个像 q[t,h] 这样的函数,它会给我们一个函数的解决方案:

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

    【讨论】:

    • 有点整洁,因为我们知道有一个解决方案定义 e = c /. First@NDSolve.. 然后你可以直接使用 e 为:e[900,10] -> .91
    • 非常感谢乔治!!这正是我想要做的!但我似乎无法定义 e = c /。 First@NDSolve.. 我收到一条错误消息:First::normal: Nonatomic expression expected at position 1 in First[NDSolve]. >> ReplaceAll::reps: {First[NDSolve]..} 既不是替换规则列表也不是有效的调度表,因此不能用于替换。 >> 我该如何解决这个问题?
    • 你需要把整个表达式 First@NDsolve[ equations , vars, etc ] 太长才能输入评论..
    猜你喜欢
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多