《計算力學》中強調的分部積分在Mathematica中是無法直接操作的,Mathematica中遇到D[v,{x,2}]時,會將D[v,{x,2}]的結果直接計算出來,並帶入積分式。如果D[v,{x,2}]=0,則積分結果等於0,這顯然不能解決《計算力學》中的問題。故寫代碼如下:
n=4;
Print["Order Number (v): ",n]
u=x^3;
Print["u = ",u]
v=7x^2+7;
Print["v = ",v]
vv=D[v,{x,n}];
Print["Differential v (vv): ",vv]
vvv=vv;
k=0;
Print[""]
Print["Begin Intergrating by parts..."]
Print[""]
If[vv==0,While[vv==0,vv=D[v,{x,n-k-1}];m=(-1)^k*(D[u,{x,k}] vv);k=k+1;Print["Step ",k];Print["Order (k) = ",k-1];Print["First Part (m) = ",m];Print["u in Second Part = ",(D[u,{x,k}])];Print["vv in Second Part = ",vv];Print[""]];Print["Result: ",Simplify[(-1)^(k-1)(m-(\[Integral](D[u,{x,k}])vv\[DifferentialD]x))]],m=u D[v,{x,n-1}];Print["Result: ",Simplify[(-1)^k(m-(\[Integral](D[u,{x,k+1}])D[v,{x,n-1}]\[DifferentialD]x))]]];
Print[""]
Print["Normal Intergration Result: ",Simplify[\[Integral]u vvv\[DifferentialD]x]]
其中v相當於形函數,n是對v求導的階數,程序的基本原理判斷對v求導後判斷是否為0,若為0,則降低求導的階數,也就是積一次分,直到其導數不為0為止。發現不能直接分部積分是Mathematica的重大缺陷,把這段小程序當個補丁吧。
需要注意的是:v中x的次數要小於等於n,否則對v求導後裡面仍有x項,不能判斷其導數是否為0,故不能進行分部積分(這種情況用Mathematica直接積分可以得到結果)。這個問題有待進一步解決。
[
本帖最后由 aprilchu43 于 2008-5-24 10:42 编辑 ]