/* UG-II, Unit II: enhancement problem checks. Run with: maxima -q -b unit-2-problem-checks.mac Every labelled check must print the literal value 0. */ kill(all)$ display2d:false$ print("UG-II UNIT II: ENHANCEMENT PROBLEM CHECKS")$ round_check(label,expr,scale,target) := block([got],got:round(scale*float(expr)), print(label,"=",got-target))$ tolerance_check(label,expr,tol) := print(label,"=",if abs(float(expr))0,b>0,cbox>0,L>0)$ B5_1 : 2/a*integrate(V0*sin(%pi*x/a),x,0,a)$ B5_2 : 2/a*integrate(V0*sin(2*%pi*x/a),x,0,a)$ print("24 solved 1 first coefficient residual =",radcan(B5_1-4*V0/%pi))$ print("24 solved 1 second coefficient residual =",radcan(B5_2))$ u24top : 4*V0/(3*%pi)*sinh(3*%pi*y/a)/sinh(3*%pi*b/a) *sin(3*%pi*x/a)$ print("24 solved 1 mode PDE residual =", trigsimp(diff(u24top,x,2)+diff(u24top,y,2)))$ print("24 solved 1 x=0 residual =",subst(x=0,u24top))$ print("24 solved 1 x=a residual =",trigsimp(subst(x=a,u24top)))$ print("24 solved 1 y=0 residual =",subst(y=0,u24top))$ gamma24 : sqrt((%pi/a)^2+(2*%pi/b)^2)$ u24box : V0*sin(%pi*x/a)*sin(2*%pi*y/b) *sinh(gamma24*z)/sinh(gamma24*cbox)$ print("24 solved 2 box PDE residual =", radcan(trigsimp(diff(u24box,x,2)+diff(u24box,y,2) +diff(u24box,z,2))))$ print("24 solved 2 z=0 residual =",subst(z=0,u24box))$ print("24 solved 2 z=c residual =", radcan(subst(z=cbox,u24box) -V0*sin(%pi*x/a)*sin(2*%pi*y/b)))$ u24n1 : 100*sinh(%pi/4)/sinh(%pi/2)$ round_check("24 numerical 1 potential",u24n1,10000,377470)$ B24n2_1 : 2*integrate(x*(1-x)*sin(%pi*x),x,0,1)$ B24n2_2 : 2*integrate(x*(1-x)*sin(2*%pi*x),x,0,1)$ print("24 numerical 2 B1 residual =",radcan(B24n2_1-8/%pi^3))$ print("24 numerical 2 B2 residual =",radcan(B24n2_2))$ gamma24n3 : %pi*sqrt((2/(3/10))^2+(1/(2/5))^2)$ round_check("24 numerical 3 gamma",gamma24n3,10000,223681)$ round_check("24 numerical 4 amplitude", sinh(%pi/2)/sinh(%pi),1000000,199268)$ /* 2025-06-26: fixed string and rectangular membrane. */ Atri(nv) := 2/L* (integrate(2*h*x/L*sin(nv*%pi*x/L),x,0,L/2) +integrate(2*h*(1-x/L)*sin(nv*%pi*x/L),x,L/2,L))$ print("26 solved 1 A1 residual =",trigsimp(radcan(Atri(1)-8*h/%pi^2)))$ print("26 solved 1 A2 residual =",trigsimp(radcan(Atri(2))))$ print("26 solved 1 A3 residual =", trigsimp(radcan(Atri(3)+8*h/(9*%pi^2))))$ f26_12 : 60*sqrt((1/(3/5))^2+(2/(3/5))^2)$ round_check("26 solved 2 square frequency",f26_12,1000,223607)$ print("26 solved 2 degeneracy residual =", ratsimp(60*sqrt((1/(3/5))^2+(2/(3/5))^2) -60*sqrt((2/(3/5))^2+(1/(3/5))^2)))$ print("26 numerical 1 frequency residual =",180/(2*(3/4))-120)$ print("26 numerical 2 frequency residual =",5*120-600)$ node26 : sin(5*%pi*(3/20)/(3/4))^2 +sin(5*%pi*(3/10)/(3/4))^2 +sin(5*%pi*(9/20)/(3/4))^2 +sin(5*%pi*(3/5)/(3/4))^2$ print("26 numerical 2 node residual =",trigsimp(node26))$ B26n3 : (1/5)/(200*%pi)$ round_check("26 numerical 3 velocity coefficient",B26n3,10^9,318310)$ f26n4 : 60*sqrt((2/(4/5))^2+(3/(3/5))^2)$ round_check("26 numerical 4 membrane frequency",f26n4,1000,335410)$ /* 2025-06-28: circular membrane and Bessel zeros. */ root01 : find_root(bessel_j(0,z),z,2,3)$ root02 : find_root(bessel_j(0,z),z,5,6)$ root11 : find_root(bessel_j(1,z),z,3,4)$ root12 : find_root(bessel_j(1,z),z,7,8)$ tolerance_check("28 root J0-1 residual",bessel_j(0,root01),10.0^(-12))$ tolerance_check("28 root J0-2 residual",bessel_j(0,root02),10.0^(-12))$ tolerance_check("28 root J1-1 residual",bessel_j(1,root11),10.0^(-12))$ tolerance_check("28 root J1-2 residual",bessel_j(1,root12),10.0^(-12))$ round_check("28 printed alpha01",root01,10^10,24048255577)$ round_check("28 printed alpha02",root02,10^10,55200781103)$ round_check("28 printed alpha11",root11,10^10,38317059702)$ round_check("28 printed alpha12",root12,10^10,70155866698)$ round_check("28 solved 1 frequency", 90*root01/(2*%pi*(1/4)),1000,137786)$ round_check("28 solved 1 angular frequency", 90*root01/(1/4),1000,865737)$ round_check("28 solved 2 frequency", 100*root12/(2*%pi*(2/5)),1000,279141)$ round_check("28 solved 2 nodal radius", (2/5)*root11/root12,10^6,218468)$ tolerance_check("28 solved 2 fixed-rim residual", bessel_j(1,root12),10.0^(-12))$ round_check("28 numerical 1 frequency ratio", root02/root01,10^5,229542)$ a28n3 : 1/5$ j28n3 : bessel_j(1,root01)$ A28n3 : sqrt(2)/(a28n3*abs(j28n3))$ round_check("28 numerical 3 printed J1",j28n3,10^10,5191474973)$ round_check("28 numerical 3 normalization amplitude", A28n3,10^4,136205)$ tolerance_check("28 numerical 3 radial normalization residual", A28n3^2*a28n3^2*j28n3^2/2-1,10.0^(-12))$ angular28 : sqrt(3)*cos(2*phi)+sin(2*phi)-2*cos(2*phi-%pi/6)$ print("28 numerical 4 angular identity residual =", ratsimp(sqrt(3)*cos(2*phi)+sin(2*phi) -2*(cos(2*phi)*cos(%pi/6) +sin(2*phi)*sin(%pi/6))))$ print("28 numerical 4 first node residual =", trigsimp(subst(phi=%pi/3,angular28 +2*cos(2*phi-%pi/6))))$ print("28 numerical 4 second node residual =", trigsimp(subst(phi=5*%pi/6,angular28 +2*cos(2*phi-%pi/6))))$ /* 2025-06-30: one-dimensional heat flow. */ B30_1 : 2/L*integrate(T0*sin(%pi*x/L),x,0,L)$ B30_2 : 2/L*integrate(T0*sin(2*%pi*x/L),x,0,L)$ print("30 solved 1 B1 residual =",radcan(B30_1-4*T0/%pi))$ print("30 solved 1 B2 residual =",radcan(B30_2))$ T30 : 20+60*x+10*sin(%pi*x)*exp(-%pi^2*t/100)$ print("30 solved 2 PDE residual =", trigsimp(diff(T30,t)-diff(T30,x,2)/100))$ print("30 solved 2 left-boundary residual =",subst(x=0,T30)-20)$ print("30 solved 2 right-boundary residual =",subst(x=1,T30)-80)$ print("30 solved 2 initial-profile residual =", trigsimp(subst(t=0,T30)-(20+60*x+10*sin(%pi*x))))$ round_check("30 solved 2 midpoint temperature", subst([x=1/2,t=2],T30),10000,582087)$ t30half : (1/2)^2*log(2)/((12/10^6)*%pi^2)$ round_check("30 numerical 1 half-life seconds",t30half,100,146314)$ round_check("30 numerical 1 half-life minutes",t30half/60,10000,243856)$ ratio30 : exp(-8*(1/100)*%pi^2*2)$ round_check("30 numerical 2 mode ratio",ratio30,10^6,206153)$ B30n3 : 2*100*integrate(x*(1-x)*sin(%pi*x),x,0,1)$ print("30 numerical 3 coefficient-form residual =", radcan(B30n3-800/%pi^3))$ round_check("30 numerical 3 coefficient value",B30n3,10000,258012)$ t30n4 : (2/5)^2*log(100)/(4*(2/10^5)*%pi^2)$ round_check("30 numerical 4 decay seconds",t30n4,1000,933203)$ round_check("30 numerical 4 decay minutes",t30n4/60,10000,155534)$ print("UG-II UNIT II: ALL ENHANCEMENT CHECKS COMPLETE")$ quit();