рдЬреВрд▓рд┐рдпрд╛ рдФрд░ рдЖрдВрд╢рд┐рдХ рдЕрдВрддрд░ рд╕рдореАрдХрд░рдг


рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рднреМрддрд┐рдХ рдореЙрдбрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХреМрд╢рд▓ рдХреЛ рдордЬрдмреВрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рддреЗрдЬ, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрдВрджрд░ PyPlot рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдореИрдЯрд▓рдкреЛрдЯрд▓рд┐рдм рдкрд╛рдпрдерди рдХреА рд╕рд╛рд░реА рд╢рдХреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪрд┐рддреНрд░ рд╣реЛрдВрдЧреЗ (рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдЫрд┐рдкреЗ рд╣реБрдП)


рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдФрд░ рддрд╛рдЬрд╛ рд╣реЛ:


рд╣реБрдб рдХреЗ рдиреАрдЪреЗ
]status Status `C:\Users\\.julia\environments\v1.0\Project.toml` [537997a7] AbstractPlotting v0.9.0 [ad839575] Blink v0.8.1 [159f3aea] Cairo v0.5.6 [5ae59095] Colors v0.9.5 [8f4d0f93] Conda v1.1.1 [0c46a032] DifferentialEquations v5.3.1 [a1bb12fb] Electron v0.3.0 [5789e2e9] FileIO v1.0.2 [5752ebe1] GMT v0.5.0 [28b8d3ca] GR v0.35.0 [c91e804a] Gadfly v1.0.0+ #master (https://github.com/GiovineItalia/Gadfly.jl.git) [4c0ca9eb] Gtk v0.16.4 [a1b4810d] Hexagons v0.2.0 [7073ff75] IJulia v1.13.0+ [`C:\Users\\.julia\dev\IJulia`] [6218d12a] ImageMagick v0.7.1 [c601a237] Interact v0.9.0 [b964fa9f] LaTeXStrings v1.0.3 [ee78f7c6] Makie v0.9.0+ #master (https://github.com/JuliaPlots/Makie.jl.git) [7269a6da] MeshIO v0.3.1 [47be7bcc] ORCA v0.2.0 [58dd65bb] Plotly v0.2.0 [f0f68f2c] PlotlyJS v0.12.0+ #master (https://github.com/sglyon/PlotlyJS.jl.git) [91a5bcdd] Plots v0.21.0 [438e738f] PyCall v1.18.5 [d330b81b] PyPlot v2.6.3 [c4c386cf] Rsvg v0.2.2 [60ddc479] StatPlots v0.8.1 [b8865327] UnicodePlots v0.3.1 [0f1e0344] WebIO v0.4.2 [c2297ded] ZMQ v1.0.0 

рдЕрдиреНрдпрдерд╛, рд╣рдореЗрдВ рдЖрдЬ рдХреЗ рд▓рд┐рдП рд╡рд╣ рд╕рдм рдХреБрдЫ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП
 julia>] pkg> add PyCall pkg> add LaTeXStrings pkg> add PyPlot pkg> build PyPlot #     build #    -      ,    pkg> add Conda #    Jupyter -    pkg> add IJulia #      pkg> build IJulia #     build 

рдЕрдм рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП!


рд╕рдореАрдХрд░рдг рд╕рд╛рдзрдирд╛


рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ, рд╢рдмреНрдж рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рджреНрд░рд╡реНрдпрдорд╛рди, рдЧрддрд┐, рдКрд░реНрдЬрд╛, рдЖрд╡реЗрд╢, рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рднреМрддрд┐рдХ рдорд╛рддреНрд░рд╛ рдХрд╛ рдПрдХ рд╕реНрдерд╛рдирд┐рдХ рдЖрдВрджреЛрд▓рди (рд╕реНрдерд╛рдирд╛рдВрддрд░рдг) рднреМрддрд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред
рд░реИрдЦрд┐рдХ рдПрдХ рдЖрдпрд╛рдореА рдкрд░рд┐рд╡рд╣рди рд╕рдореАрдХрд░рдг (рдпрд╛ рд╕рдВрд╡рд╣рди рд╕рдореАрдХрд░рдг) - рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрдВрд╢рд┐рдХ рдЕрдВрддрд░ рд╕рдореАрдХрд░рдг - рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ


 frac рдЖрдВрд╢рд┐рдХU(x,t) рдЖрдВрд╢рд┐рдХt+c frac рдЖрдВрд╢рд┐рдХU(x,t) рдЖрдВрд╢рд┐рдХx= Phi(U,x,t)

рдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХ


рдкрд░рд┐рд╡рд╣рди рд╕рдореАрдХрд░рдг рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


\ frac {\ hat {U} _i-U_i} {\ tau} + c \ frac {U_i-U_ {i-1}} {\ Delta} = \ frac {\ _i_ {i-1} + \ Phi_i} {реи}

\ frac {\ hat {U} _i-U_i} {\ tau} + c \ frac {U_i-U_ {i-1}} {\ Delta} = \ frac {\ _i_ {i-1} + \ Phi_i} {реи}


рдЬрд╣рд╛рдБ  рдпреВрдпреВ - рдКрдкрд░реА рд╕рдордп рдкрд░рдд рдкрд░ рдЧреНрд░рд┐рдб рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдпред рдпрд╣ рд╕рд░реНрдХрд┐рдЯ рдХрд░реНрдЯрди рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рд░ рд╣реИред K=c tau/ Delta<1


рдиреЙрдирд▓рд╛рдЗрдирд░ рдЯреНрд░рд╛рдВрд╕рдлрд░


 frac рдЖрдВрд╢рд┐рдХU(x,t) рдЖрдВрд╢рд┐рдХt+(C0+UC1) frac рдЖрдВрд╢рд┐рдХU(x,t) рдЖрдВрд╢рд┐рдХx= Phi(U,x,T))

рдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХрдЖрдВрд╢рд┐рдХ


рд▓рд╛рдЗрди рд╕реНрд░реЛрдд (рдЕрд╡рд╢реЛрд╖рдг рд╕реНрдерд╛рдирд╛рдВрддрд░рдг):  Phi(рдпреВ,рдПрдХреНрд╕,рдЯреА)=тИТрдмреАрдпреВрдпреВрдПрдХреНрд╕рдЯреАрдмреАрдпреВ ред рд╣рдо рд╕реНрдкрд╖реНрдЯ рдЕрдВрддрд░ рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


Uj+1i= left(1тИТ frachtB2тИТ frachtC0hxтИТ frachtC1@xUji right)Uji+UjiтИТ1 left( frachtC0hxтИТ frachtB2+ frachtC1htUji right)


 using Plots pyplot() a = 0.2 b = 0.01 ust = x -> x^2 * exp( -(xa)^2/b ) #   bord = t -> 0. #  #    - function transferequi(;C0 = 1., C1 = 0., B = 0., Nx = 50, Nt = 50, tlmt = 0.01) dx = 1/Nx dt = tlmt/Nt b0 = 0.5B*dt c0 = C0*dt/dx c1 = C1*dt/dx print("Kurant: $c0 $c1") x = [i for i in range(0, length = Nx, step = dx)]#         t = [i for i in range(0, length = Nt, step = dt)] #   -   U = zeros(Nx, Nt) U[:,1] = ust.(x) U[1,:] = bord.(t) for j = 1:Nt-1, i = 2:Nx U[i, j+1] = ( 1-b0-c0-c1*U[i,j] )*U[i,j] + ( c0-b0+c1*U[i,j] )*U[i-1,j] end t, x, U end t, X, Ans0 = transferequi( C0 = 4., C1 = 1., B = 1.5, tlmt = 0.2 ) plot(X, Ans0[:,1], lab = "t1") plot!(X, Ans0[:,10], lab = "t10") p = plot!(X, Ans0[:,40], lab = "t40") plot( p, heatmap(t, X, Ans0) ) #      

рдкрд░рд┐рдгрд╛рдо


рдЕрд╡рд╢реЛрд╖рдг рдХреЛ рдмрдврд╝рд╛рдПрдВ:


 t, X, Ans0 = transferequi( C0 = 2., C1 = 1., B = 3.5, tlmt = 0.2 ) plot(X, Ans0[:,1]) plot!(X, Ans0[:,10]) p = plot!(X, Ans0[:,40]) plot( p, heatmap(t, X, Ans0) ) 

рдкрд░рд┐рдгрд╛рдо


 t, X, Ans0 = transferequi( C0 = 1., C1 = 15., B = 0.1, Nx = 100, Nt = 100, tlmt = 0.4 ) plot(X, Ans0[:,1]) plot!(X, Ans0[:,20]) plot!(X, Ans0[:,90]) 

рд▓рдЧрднрдЧ рдЦрдЯрдЦрдЯрд╛рдпрд╛


heatmap(t, X, Ans0)


рдЧрд░реНрдореА рдХрд╛ рд╕рдореАрдХрд░рдг


рдЕрдВрддрд░ рдЧрд░реНрдореА рд╕рдореАрдХрд░рдг (рдпрд╛ рдЧрд░реНрдореА рдкреНрд░рд╕рд╛рд░ рд╕рдореАрдХрд░рдг) рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 frac рдЖрдВрд╢рд┐рдХT(x,t) рдЖрдВрд╢рд┐рдХt+D frac рдЖрдВрд╢рд┐рдХ2U(x,t) рдЖрдВрд╢рд┐рдХx2= phi(T,x,t))


рдпрд╣ рдПрдХ рдкреИрд░рд╛рдмреЛрд▓рд┐рдХ рд╕рдореАрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдордп рдЯреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкрд╣рд▓рд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рд╕реНрдерд╛рдирд┐рдХ рд╕рдордиреНрд╡рдп x рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣реИред рдпрд╣ рддрд╛рдкрдорд╛рди рдХреА рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢реАрддрд▓рди рдпрд╛ рд╣реАрдЯрд┐рдВрдЧ рдзрд╛рддреБ рдХреА рдЫрдбрд╝ (рдлрд╝рдВрдХреНрд╢рди рдЯреА рд░реЙрдб рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рдХреЗ рд╕рд╛рде рддрд╛рдкрдорд╛рди рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ)ред рдЧреБрдгрд╛рдВрдХ рдбреА рдХреЛ рддрд╛рдкреАрдп рдЪрд╛рд▓рдХрддрд╛ (рдкреНрд░рд╕рд╛рд░) рдХрд╛ рдЧреБрдгрд╛рдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рд╕реНрдерд┐рд░ рдпрд╛ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░, рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдбреА (рдЯреА, рдПрдХреНрд╕, рдЯреА) рдкрд░ рд╣реАред


рд░реИрдЦрд┐рдХ рд╕рдореАрдХрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдкреНрд░рд╕рд╛рд░ рдЧреБрдгрд╛рдВрдХ рдФрд░ рдЧрд░реНрдореА рд╕реНрд░реЛрдд рддрд╛рдкрдорд╛рди рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ)ред рдХреНрд░рдорд╢рдГ рдЕрдВрддрд░ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдпреВрд▓рд░ рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрдВрддрд░ рд╕рдореАрдХрд░рдг рдХрд╛ рдЕрдВрддрд░:


\ frac {T_ {i, n + 1} -T_ {i, n}} {\ tau} = D \ frac {T_ {i-1, n} -2T_ {i, n} + T_ {i 1 , n}} {\ Delta ^ 2} + \ phi_ {i, n} \\ \ frac {T_ {i, n + 1} -T_ {i, n}} {\ tau} = D \ frac {T {{ i-1, n + 1} -2T_ {i, n + 1} + T_ {i + 1, n + 1}} {\ Delta ^ 2} + \ phi_ {i, n}


 ╬┤(x) = x==0 ? 0.5 : x>0 ? 1 : 0 # -     startcond = x-> ╬┤(x-0.45) - ╬┤(x-0.55) #   bordrcond = x-> 0. #    D(u) = 1 #   ╬ж(u) = 0 #    #      LaTex    Tab # \delta press Tab -> ╬┤ function linexplicit(Nx = 50, Nt = 40; tlmt = 0.01) dx = 1/Nx dt = tlmt/Nt k = dt/(dx*dx) print("Kurant: $k dx = $dx dt = $dt k<0.5? $(k<0.5)") x = [i for i in range(0, length = Nx, step = dx)] #         t = [i for i in range(0, length = Nt, step = dt)] #   -   U = zeros(Nx, Nt) U[: ,1] = startcond.(x) U[1 ,:] = U[Nt,:] = bordrcond.(t) for j = 1:Nt-1, i = 2:Nx-1 U[i, j+1] = U[i,j]*(1-2k*D( U[i,j] )) + k*U[i-1,j]*D( U[i-1,j] ) + k*U[i+1,j]*D( U[i+1,j] ) + dt*╬ж(U[i,j]) end t, x, U end t, X, Ans2 = linexplicit( tlmt = 0.005 ) plot(X, Ans2[:,1], lab = "t1") plot!(X, Ans2[:,10], lab = "t10") p = plot!(X, Ans2[:,40], lab = "t40", title = "Explicit scheme") plot( p, heatmap(t, X, Ans2) ) 

рдкрд░рд┐рдгрд╛рдо


рд╣рдо рдирд┐рд╣рд┐рдд рдпреЛрдЬрдирд╛ рдФрд░ рд╕реНрд╡реАрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
 function nonexplicit(Nx = 50, Nt = 40; tlmt = 0.01) dx = 1/Nx dt = tlmt/Nt k = dt/(dx*dx) print("Kurant: $k dx = $dx dt = $dt k<0.5? $(k<0.5)\n") x = [i for i in range(0, length = Nx, step = dx)] t = [i for i in range(0, length = Nt, step = dt)] U = zeros(Nx, Nt) ╬╖ = zeros(Nx+1) ╬╛ = zeros(Nx) U[: ,1] = startcond.(x) U[1 ,:] = bordrcond.(t) U[Nt,:] = bordrcond.(t) for j = 1:Nt-1 b = -1 - 2k*D( U[1,j] ) c = -k*D( U[2,j] ) d = U[1,j] + dt*╬ж(U[1,j]) ╬╛[2] = c/b ╬╖[2] = -d/b for i = 2:Nx-1 a = -k*D( U[i-1,j] ) b = -2k*D( U[i,j] ) - 1 c = -k*D( U[i+1,j] ) d = U[i,j] + dt*╬ж(U[i,j]) ╬╛[i+1] = c / (ba*╬╛[i]) ╬╖[i+1] = (a*╬╖[i]-d) / (ba*╬╛[i]) end U[Nx,j+1] = ╬╖[Nx] for i = Nx:-1:2 U[i-1,j+1] = ╬╛[i]*U[i,j+1] + ╬╖[i] end end t, x, U end plot(X, Ans2[:,1], lab = "ex_t1") plot!(X, Ans2[:,10], lab = "ex_t10") plot!(X, Ans2[:,40], lab = "ex_t40") plot!(X, Ans3[:,1], lab = "non_t1") plot!(X, Ans3[:,10], lab = "non_t10") plot!(X, Ans3[:,40], lab = "non_t40", title = "Comparison schemes") 

рд╕рд░реНрдХрд┐рдЯ рддреБрд▓рдирд╛


рдиреЙрдирд▓рд╛рдЗрдирд░ рд╣реАрдЯ рд╕рдореАрдХрд░рдг


рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╕рдорд╛рдзрд╛рди рдиреЙрдирд▓рд╛рдЗрди рдЧрд░реНрдореА рд╕рдореАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдиреЙрдирд▓рд╛рдЗрди рдЧрд░реНрдореА рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде  phi(x,T)=103(TтИТT3) ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдерд░реНрдорд▓ рдореЛрд░реНрдЪреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХ рд╣реАрдЯрд┐рдВрдЧ рдЬрд╝реЛрди рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдлреИрд▓рддрд╛ рд╣реИ


 ╬ж(u) = 1e3*(uu^3) t, X, Ans4 = linexplicit( tlmt = 0.005 ) plot(X, Ans4[:,1], lab = "ex_t1") plot!(X, Ans4[:,10], lab = "ex_t10") plot!(X, Ans4[:,40], lab = "ex_t40", title = "Thermal front") 

рдерд░реНрдорд▓ рд╕рд╛рдордиреЗ


рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕рд╛рд░ рдЧреБрдгрд╛рдВрдХ рдХреА рдЧреИрд░-рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд▓реЗрддреЗ рд╣реИрдВ D(x,T)=T2 , рдП  phi(x,T)=103T3.5 , рддрдм рд╡реНрдпрдХреНрддрд┐ рдЕрдкрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рддрд╛рдк (рджрд╣рди рдХреЗ рд╕рд╛рде рдПрд╕ рдореЛрдб) рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдорд╛рдзреНрдпрдо рдХреЗ рджрд╣рди рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЙрд╕реА рд╕рдордп, рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реА рдирд┐рд╣рд┐рдд рдпреЛрдЬрдирд╛ рджреЛрдиреЛрдВ рд╕реНрд░реЛрддреЛрдВ рдХреА рдЧреИрд░-рдореМрдЬреВрджрдЧреА рдФрд░ рдкреНрд░рд╕рд╛рд░ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ


 D(u) = u*u ╬ж(u) = 1e3*abs(u)^(3.5) t, X, Ans5 = linexplicit( tlmt = 0.0005 ) t, X, Ans6 = nonexplicit( tlmt = 0.0005 ) plot(X, Ans5[:,1], lab = "ex_t1") plot!(X, Ans5[:,10], lab = "ex_t10") p1 = plot!(X, Ans5[:,40], lab = "ex_t40", title = "Burning with aggravation") p2 = heatmap(abs.(Ans6-Ans5), title = "Difference") #      plot(p1, p2) 

рдПрд╕ рдореЛрдб


рд╡реЗрд╡ рд╕рдореАрдХрд░рдг


рд╣рд╛рдЗрдкрд░рдмреЛрд▓рд┐рдХ рд╡реЗрд╡ рд╕рдореАрдХрд░рдг


 frac рдЖрдВрд╢рд┐рдХ2U(x,t) рдЖрдВрд╢рд┐рдХt2=c2 frac рдЖрдВрд╢рд┐рдХ2U(x,t) рдЖрдВрд╢рд┐рдХx2


рдлреИрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЖрдпрд╛рдореА рд░реИрдЦрд┐рдХ рддрд░рдВрдЧреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрд╛рд░ рдореЗрдВ рдХрдВрдкрди, рддрд░рд▓ (рдЧреИрд╕) рдореЗрдВ рдзреНрд╡рдирд┐ рдпрд╛ рдирд┐рд░реНрд╡рд╛рдд рдореЗрдВ рд╡рд┐рджреНрдпреБрдд рдЪреБрдореНрдмрдХреАрдп рддрд░рдВрдЧреЗрдВ (рдмрд╛рдж рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдореАрдХрд░рдг рдХреЛ рд╡реЗрдХреНрдЯрд░ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред


рдЗрд╕ рд╕рдореАрдХрд░рдг рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдВрддрд░ рдпреЛрдЬрдирд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд╛рдВрдЪ-рдмрд┐рдВрджреБ рдпреЛрдЬрдирд╛ рд╣реИ


\ frac {U ^ {n + 1} _i-2U ^ {n} _i + U ^ {n-1} _i} {\ tau ^ 2} = c ^ 2 \ frac {U ^ n_ {i +}} -2U ^ n_i + U ^ n_ {i-1}} {h ^ 2} \\ x_i = ih, \, t_n = \ tau


"рдХреНрд░реЙрд╕" рдирд╛рдордХ рдЗрд╕ рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдордп рдФрд░ рд╕реНрдерд╛рдирд┐рдХ рд╕рдордиреНрд╡рдп рдореЗрдВ рд╕рдЯреАрдХрддрд╛ рдХрд╛ рджреВрд╕рд░рд╛ рдХреНрд░рдо рд╣реИ рдФрд░ рд╕рдордп рдореЗрдВ рддреАрди-рдкрд░рдд рд╣реИред


 #     ╧И = x -> x^2 * exp( -(x-0.5)^2/0.01 ) #    ╧Х(x) = 0 c = x -> 1 #     function pdesolver(N = 100, K = 100, L = 2pi, T = 10, a = 0.1 ) dx = L/N; dt = T/K; gam(x) = c(x)*c(x)*a*a*dt*dt/dx/dx; print("Kurant-Fridrihs-Levi: $(dt*a/dx) dx = $dx dt = $dt") u = zeros(N,K); x = [i for i in range(0, length = N, step = dx)] #      u[:,1] = ╧И.(x); u[:,2] = u[:,1] + dt*╧И.(x); #     fill!( u[1,:], 0); fill!( u[N,:], ╧Х(L) ); for t = 2:K-1, i = 2:N-1 u[i,t+1] = -u[i,t-1] + gam( x[i] )* (u[i-1,t] + u[i+1,t]) + (2-2*gam( x[i] ) )*u[i,t]; end x, u end N = 50; #     K = 40; #    a = 0.1; #    L = 1; #   T = 1; #   t = [i for i in range(0, length = K, stop = T)] X, U = pdesolver(N, K, L, T, a) #    plot(X, U[:,1]) plot!(X, U[:,40]) 

рдкрд░рд┐рдгрд╛рдо


рдПрдХ рд╕рддрд╣ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо PyPlot рдХреЛ рдкреНрд▓реЙрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ:


рд╕рддрд╣ рдЧреНрд░рд╛рдл
 using PyPlot surf(t, X, U) 


рдФрд░ рдорд┐рдард╛рдИ рдХреЗ рд▓рд┐рдП, рддрд░рдВрдЧ рд╕рдордиреНрд╡рдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЧрддрд┐ рд╕реЗ рдлреИрд▓рддреА рд╣реИ:


 ╧И = x -> x>1/3 ? 0 : sin(3pi*x)^2 c = x -> x>0.5 ? 0.5 : 1 X, U = pdesolver(400, 400, 8, 1.5, 1) plot(X, U[:,1]) plot!(X, U[:,40]) plot!(X, U[:,90]) plot!(X, U[:,200], xaxis=("  ", (0, 1.5), 0:0.5:2) ) 

рдкрд░рд┐рдгрд╛рдо


 U2 = [ U[i,j] for i = 1:60, j = 1:size(U,2) ] #    surf(U2) #        


heatmap(U, yaxis=(" ", (0, 50), 0:10:50))


рдЖрдЬ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП:
рдкрд╛рдЗрдкреНрд▓реЙрдЯ рдЬреАрдереБрдм рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИ , рдкреНрд▓реЙрдЯ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЕрдЪреНрдЫреА рд░реВрд╕реА рднрд╛рд╖рд╛ рдХрд╛ рдЬреНрдЮрд╛рдкрди ред

Source: https://habr.com/ru/post/hi429218/


All Articles