作业帮 > 综合 > 作业

mathematica 里面怎么消去二阶小

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/09/27 10:20:50
mathematica 里面怎么消去二阶小
举个栗子:一个函数里面有两项微扰项,ψ,Φ,两者都是x,y,z的函数.

ds经过运算后会出现ψ和Φ关于x,y,z的微分项,ψ和Φ都是小量,所以希望输出的式子里面只要是ψ与Φ相乘,或是他们任意阶导数相乘都变成零.例如(dψ/dx)*(dΦ/dx)=0 , ψ*Φ=0  ,ψ*ψ=0  ,(dψ/dx)*(dψ/dx)=0  ,(dψ/dx)*(dΦ/dx)*(dΦ/dx)=0
有什么函数,或是什么方法能做到吗?
mathematica 里面怎么消去二阶小
你不给具体代码的话别人很难给出有效的建议.还有你这推导公式的方法很诡异,Mathematica有很多原生的关于导数和级数的函数,你都用不上?
再问: 略长,先谢谢了
再答: 你能不要贴图直接贴代码吗。还有,你完全可以只贴一个具有你的问题的全部必备要素的最小样本。
再问: 我能给出的原始变量没有一个是已知的解析函数,都是函数形式的未知变量,我就像知道一个式子里面有a和b,我想把a和b的乘积,或者a或b的导数的乘积都换成0。
再答: 所,以,说,问题不是你这样问的。样本能不能简化,和你的原始变量是不是解析函数没有关系。比如说,你有没有想过,你其实只要把你的zz的表达式贴出来(甚至只要贴出具备你的问题的全部特征的zz的一部分)就行了?退一步说,就算你想把原始代码也给我看看,这代码似乎也没有长到塞不进问题的补充部分,目测至多就是去掉无关紧要的最后的FullSimplify的部分和Print的部分就可以塞进去。还有,你的代码写的相当啰嗦,说实话,在几分钟前,我曾一度想出血大放送地抄一下你的代码,可是抄了一会儿就把耐心丢光了,因为我发现你的头15行代码其实可以简化成:
ds = a[t]^2 (-(1 + 2 f[t, x, y, z]) dt^2 + (1 - 2 f[t, x, y, z]) (dx^2 + dy^2 + dz^2));
gab = D[ds, {{dt, dx, dy, dz}, 2}]/2;
mab = Inverse[gab];
gabu = D[gab, {{t, x, y, z}}];这段简化的重点是:一,你的大括号怎么看都是不必要的,在Mathematica里过分追求和传统数学表达式完全相同的书写是做茧自缚;二,D有五种语法,后面的两种是专门对付张量的,具体参看帮助。我几乎可以肯定你后面的代码也可以做类似的简化,但又实在是没法像对付头15行一样一眼看破,而在发现这个代码其实过分地啰嗦了的现在我是再也提不起劲来抄这些代码了。————在知乎看到你的帖子了,也找到了源代码,并且那边那位对模式的考虑有些过于复杂了,所以,这里出血大放送一下:ExpandAll@Simplify@zz /. a_[t, x, y, z] b_[t, x, y, z] -> 0 /. a_[t, x, y, z]^_ -> 0
(* 或者 *)
ExpandAll@Simplify@zz /. a_[t, __] b_[t, __] -> 0 /. a_[t, __]^_ -> 0这段代码的简化重点是:一,与Ψ和Φ有关的项(不论是否求导)全部具有[t, x, y, z]这种4参数结构,所以只要在模式里面指明这一点就不用去分别指定代数项和导数项了;二,_^_这种结构是不会匹配1次方的(要匹配可以,但要写成_^_:1 ),所以不用详细指定次数大于2。

再问: 作为一个小白,给大神跪了。。原来根本没用过Mathematica,看了一上午入门教程写的程序。。。大神太敬业了
再问: 作为一个小白,给大神跪了。。原来根本没用过Mathematica,看了一上午入门教程写的程序。。。大神太敬业了
再问: 作为一个小白,给大神跪了。。原来根本没用过Mathematica,看了一上午入门教程写的程序。。。大神太敬业了
再问: 作为一个小白,给大神跪了。。原来根本没用过Mathematica,看了一上午入门教程写的程序。。。大神太敬业了
再答: ……你是用什么方法连着追问了四遍?