NDSolve求解偏微分方程失败,请求修正代码以生成可运行结果
修正Mathematica偏微分方程求解代码及绘图问题
问题根源
原代码存在大量未定义的变量/函数(xE、G、b、r0、Sigmaz、Ur、Vr),这些缺失的定义导致NDSolve无法解析初始条件与方程,进而触发NDSolve::eerri错误。
修正后的可运行代码
将所有未定义部分替换为可计算的测试值或简单函数,确保方程、初始条件、边界条件能被正确解析:
ClearAll[]; (* 材料与几何参数定义 *) l = 2.5; l0 = 1.5; Eb = 210*10^9; rb = 10/1000; rhob = 7850; Eg = 35*10^9; rg = 17.5/1000; vg = 0.25; varphi = 45 Degree; Cb = 2*Pi*rb; Ab = Pi*rb^2; (* 补充未定义变量的测试值 *) xE = Eg; G = Eg/(2*(1 + vg)); b = 0.01; r0 = 0.5; (* 定义缺失的测试函数 *) Sigmaz[r_, z_, t_] = 10^6*Sin[2*Pi*r/l0]*Cos[1000*Pi*t]; Ur[r_, z_, t_] = 10^-6*Sin[2*Pi*r/l0]*Cos[1000*Pi*t]; Vr[r_, z_, t_] = -10^-3*Sin[2*Pi*r/l0]*Sin[1000*Pi*t]; (* 修正后续依赖计算 *) R = 10*Eb*rb/((Eg + xE)/2); Gg = Eg/(2*(1 + vg)); k = Gg*G/((G*Log[rg/rb] + Gg*Log[R/rb])*rb); YiTa = Tan[varphi]; z1 = b; p[x_, t_] = FullSimplify[YiTa*Sigmaz[r0 + l - x, z1, t]]; (* 偏微分方程、初始与边界条件 *) PDE1 = D[u1[x, t], {x, 2}] == rhob*D[u1[x, t], {t, 2}]/Eb + k*Cb*u1[x, t]/(Eb*Ab) + p[x, t]*Cb/(Eb*Ab); initialCondition = {Derivative[0, 1][u1][x, 0] == Vr[r0 + l - x, z1, 0], u1[x, 0] == Ur[r0 + l - x, z1, 0]}; boundaryConditions = {u1[0, t] == Ur[l + r0, z1, t], u1[l0, t] == Ur[r0 + l - l0, z1, t]}; (* 求解方程,调整步长避免过度限制 *) sol = NDSolve[{PDE1, initialCondition, boundaryConditions}, u1, {x, 0, l0}, {t, 0, 0.001}, MaxStepSize -> 0.0001]; (* 绘制结果 *) Plot3D[Evaluate[u1[x, t] /. sol], {x, 0, l0}, {t, 0, 0.0001}, PlotRange -> All, AxesLabel -> {"x", "t", "u1(x,t)"}, PlotTheme -> "Scientific"]
关键修正说明
- 补充所有未定义变量的合理测试值,确保参数链完整
- 定义
Sigmaz、Ur、Vr为随空间和时间变化的正弦/余弦函数,让初始与边界条件具备明确数值 - 调整
MaxStepSize从1e-7改为1e-4,避免过度限制求解步长导致效率低下或求解失败 - 所有表达式末尾添加分号,减少不必要的中间输出干扰
内容的提问来源于stack exchange,提问作者user23324532
相关产品推荐
相关产品推荐

