求教关于数值积分的问题
mathematica吧
全部回复
仅看楼主
level 3
5rru6t67 楼主
这个程序是利用有限元的方法求一个一维的数值积分
一般来说,网格更密的话精度更高;但在这个程序中,无论怎么修改网格数量,数值积分的结果都不会改变,想请问一下各位吧友能不能看出有什么问题,感谢感谢
程序中有设置一个衡量精度的语句,结果距离1越近表示精度越高
求解数值积分的程序
D1 = RegionUnion[Rectangle[{1, 0}, {RD, LD}]];
\[CapitalOmega] =
DiscretizeRegion[D1,
MeshRefinementFunction ->
Function[{vertices, area},
Block[{rD, zD}, {rD, zD} = Mean[vertices];
If[1 <= rD <= 1 + wD, area > 0.1, area > 1]]]]
<< NDSolve`FEM`;
{state} =
NDSolve`ProcessEquations[{D[sD[rD, zD], {rD, 2}] +
1/rD D[sD[rD, zD], {rD, 1}] == 0},
sD, {rD, zD} \[Element] \[CapitalOmega]]
Points = state["FiniteElementData"]["FEMMethodData"]["ElementMesh"];
%["Wireframe"]
Np = Length[Points[[1]]]
solE = First[
NDSolve[{D[sD[rD, zD, tD], {rD, 2}] +
1/rD D[sD[rD, zD, tD], {rD, 1}] ==
P[rD] D[sD[rD, zD, tD], {tD, 1}],
DirichletCondition[ sD[rD, zD, tD] == 1, rD == 1],
sD[rD, zD, 0] == Exp[-1000 (rD - 1)]},
sD, {tD, 0, tfD}, {rD, zD} \[Element] \[CapitalOmega],
Method -> {"FiniteElement",
"MeshOptions" -> {"MaxCellMeasure" -> 0.01}}]]
衡量精度的程序:
DsD[rD_, zD_, tD_] := D[sD[rD, zD, tD, {rD, 1}]] /. solE;
value = \[Beta]*(NIntegrate[
D[sD[rD, zD, tD] /. solE, {tD, 1}]*rD/\[Alpha], {rD, 1,
1 + wD}, {zD, 0, LD}, {tD, 0, tfD}] +
NIntegrate[
D[sD[rD, zD, tD] /. solE, {tD, 1}]*rD, {rD, 1 + wD, RD}, {zD, 0,
LD}, {tD, 0, tfD}])/
NIntegrate[DsD[rD, zD, tD] /. rD = 1, {zD, 0, LD}, {tD, 0, tfD}]
2022年02月24日 08点02分 1
level 3
5rru6t67 楼主
这是主体程序的图
不好意思,其中有一些预先要设置的参数忘了给出
rw=0.05;(* m *)
w=0.05;(* m *)
Kr=3.265*10^-5;(* aquifer *)
Krp=3.265*10^-7;(* skin-zone *)
Ss=0.00001;(* aquifer *)
Ssp=0.00001;(* skin-zone *)
\[Alpha]=1;(* Ss/Ssp *)
wD=1;(* w/rw *)
\[Beta]=100;(* Kr/Krp *)
\[Delta]=0.00001*0.05;(* Ss*rw *)
wm=Log[1+wD];
SKp=(1.+0.5*wD)*wD*\[Delta]/\[Alpha];
SK=wm*\[Beta];(* skin factor *)
2022年03月03日 03点03分 2
吧务
level 15
1. 参数还是漏了,RD, LD都没给。
2. NIntegrate[DsD[rD, zD, tD] /. rD = 1 这里明显不对。
3. 为什么精度可以用这个方法衡量?
2022年03月05日 03点03分 3
1