File:DiffusionMicroMacro.gif
Από Wikimedia Commons
Μετάβαση στην πλοήγηση
Πήδηση στην αναζήτηση
DiffusionMicroMacro.gif (360 × 300 εικονοστοιχεία, μέγεθος αρχείου: 402 KB, τύπος MIME: image/gif, κυκλικά επαναλαμβανόμενο, 60 καρέ, 6,5 s)
File information
Δομημένα δεδομένα
Λεζάντες
Σύνοψη
[επεξεργασία]ΠεριγραφήDiffusionMicroMacro.gif |
English: Diffusion from a microscopic and macroscopic point of view. Initially, there are solute molecules on the left side of a barrier (magenta line) and none on the right. The barrier is removed, and the solute diffuses to fill the whole container. Top: A single molecule moves around randomly. Middle: With more molecules, there is a clear trend where the solute fills the container more and more evenly. Bottom: With an enormous number of solute molecules, the randomness is gone: The solute appears to move smoothly and systematically from high-concentration areas to low-concentration areas, following Fick's laws.
Image is made in Mathematica, source code below. |
Ημερομηνία | |
Πηγή | Έργο αυτού που το ανεβάζει |
Δημιουργός | Sbyrnes321 |
Αδειοδότηση
[επεξεργασία]Public domainPublic domainfalsefalse |
Εγώ, ο κάτοχος των πνευματικών δικαιωμάτων αυτού του έργου, δημοσιεύω αυτό το έργο ως κοινό κτήμα. Αυτό ισχύει σε παγκόσμια κλίμακα. Σε ορισμένες χώρες αυτό μπορεί να μην είναι νομικά εφικτό. Αν ναι: Παραχωρώ σε οποιονδήποτε το δικαίωμα να χρησιμοποιήσει αυτό το έργο "για οποιονδήποτε σκοπό", χωρίς κανέναν όρο, εκτός και αν τέτοιοι όροι τίθενται από την νομοθεσία |
<< Mathematica source code >>
(* Source code written in Mathematica 6.0, by Steve Byrnes, 2010. I release this code into the public domain. Sorry it's messy...email me any questions. *) (*Particle simulation*) SeedRandom[1]; NumParticles = 70; xMax = 0.7; yMax = 0.2; xStartMax = 0.5; StepDist = 0.04; InitParticleCoordinates = Table[{RandomReal[{0, xStartMax}], RandomReal[{0, yMax}]}, {i, 1, NumParticles}]; StayInBoxX[x_] := If[x < 0, -x, If[x > xMax, 2 xMax - x, x]]; StayInBoxY[y_] := If[y < 0, -y, If[y > yMax, 2 yMax - y, y]]; StayInBoxXY[xy_] := {StayInBoxX[xy[[1]]], StayInBoxY[xy[[2]]]}; StayInBarX[x_] := If[x < 0, -x, If[x > xStartMax, 2 xStartMax - x, x]]; StayInBarY[y_] := If[y < 0, -y, If[y > yMax, 2 yMax - y, y]]; StayInBarXY[xy_] := {StayInBarX[xy[[1]]], StayInBarY[xy[[2]]]}; MoveAStep[xy_] := StayInBoxXY[xy + {RandomReal[{-StepDist, StepDist}], RandomReal[{-StepDist, StepDist}]}]; MoveAStepBar[xy_] := StayInBarXY[xy + {RandomReal[{-StepDist, StepDist}], RandomReal[{-StepDist, StepDist}]}]; NextParticleCoordinates[ParticleCoords_] := MoveAStep /@ ParticleCoords; NextParticleCoordinatesBar[ParticleCoords_] := MoveAStepBar /@ ParticleCoords; NumFramesBarrier = 10; NumFramesNoBarrier = 50; NumFrames = NumFramesBarrier + NumFramesNoBarrier; ParticleCoordinatesTable = Table[0, {i, 1, NumFrames}]; ParticleCoordinatesTable[[1]] = InitParticleCoordinates; For[i = 2, i <= NumFrames, i++, If[i <= NumFramesBarrier, ParticleCoordinatesTable[[i]] = NextParticleCoordinatesBar[ParticleCoordinatesTable[[i - 1]]], ParticleCoordinatesTable[[i]] = NextParticleCoordinates[ParticleCoordinatesTable[[i - 1]]]];]; (*Plot full particle simulation*) makeplotbar[ParticleCoord_] := ListPlot[{ParticleCoord, {{xStartMax, 0}, {xStartMax, yMax}}}, Frame -> True, Axes -> False, PlotRange -> {{0, xMax}, {0, yMax}}, Joined -> {False, True}, PlotStyle -> {PointSize[.03], Thick}, AspectRatio -> yMax/xMax, FrameTicks -> None]; makeplot[ParticleCoord_] := ListPlot[ParticleCoord, Frame -> True, Axes -> False, PlotRange -> {{0, xMax}, {0, yMax}}, Joined -> False, PlotStyle -> PointSize[.03], AspectRatio -> yMax/xMax, FrameTicks -> None] ParticlesPlots = Join[Table[makeplotbar[ParticleCoordinatesTable[[i]]], {i, 1, NumFramesBarrier}], Table[makeplot[ParticleCoordinatesTable[[i]]], {i, NumFramesBarrier + 1, NumFrames}]]; (*Plot just the first particle in the list...Actually the fifth particle looks better. *) FirstParticleTable = {#[[5]]} & /@ ParticleCoordinatesTable; FirstParticlePlots = Join[Table[makeplotbar[FirstParticleTable[[i]]], {i, 1, NumFramesBarrier}], Table[makeplot[FirstParticleTable[[i]]], {i, NumFramesBarrier + 1, NumFrames}]]; (* Continuum solution *) (* I can use the simple diffusion-on-an-infinite-line formula, as long as I correctly periodically replicate the initial condition. Actually just computed nearest five replicas in each direction, that was a fine approximation. *) (* k = diffusion coefficient, visually matched to simulation. *) k = .0007; u[x_, t_] := If[t == 0, If[x <= xStartMax, 1, 0], 1/2 Sum[ Erf[(x - (-xStartMax + 2 n xMax))/Sqrt[4 k t]] - Erf[(x - (xStartMax + 2 n xMax))/Sqrt[4 k t]], {n, -5, 5}]]; ContinuumPlots = Join[ Table[Show[ DensityPlot[1 - u[x, 0], {x, 0, xMax}, {y, 0, yMax}, ColorFunctionScaling -> False, AspectRatio -> yMax/xMax, FrameTicks -> None], ListPlot[{{xStartMax, 0}, {xStartMax, yMax}}, Joined -> True, PlotStyle -> {Thick, Purple}]], {i, 1, NumFramesBarrier}], Table[ DensityPlot[1 - u[x, tt], {x, 0, xMax}, {y, 0, yMax}, ColorFunctionScaling -> False, AspectRatio -> yMax/xMax, FrameTicks -> None], {tt, 1, NumFramesNoBarrier}]]; (*Combine and export *) TogetherPlots = Table[GraphicsGrid[{{FirstParticlePlots[[i]]}, {ParticlesPlots[[i]]}, {ContinuumPlots[[i]]}}, Spacings -> Scaled[0.2]], {i, 1, NumFrames}]; Export["test.gif", Join[TogetherPlots, Table[Graphics[], {i, 1, 5}]], "DisplayDurations" -> {10}, "AnimationRepititions" -> Infinity ]
Ιστορικό αρχείου
Πατήστε σε μια ημερομηνία/ώρα για να δείτε το αρχείο όπως εμφανιζόταν εκείνη την χρονική στιγμή.
Ημερομηνία/Ώρα | Μικρογραφία | Διαστάσεις | Χρήστης | Σχόλιο | |
---|---|---|---|---|---|
τρέχον | 13:41, 7 Μαρτίου 2012 | 360 × 300 (402 KB) | Dratini0 (συζήτηση | Συνεισφορά) | Just removed the white last fram for aesthetic purposes, and prologed the display time of the last frame to mark the reatart of the animation. | |
19:37, 25 Μαρτίου 2010 | 360 × 300 (402 KB) | Aiyizo (συζήτηση | Συνεισφορά) | Optimized animation, converted to 256 color mode | ||
09:57, 16 Ιανουαρίου 2010 | 360 × 300 (529 KB) | Sbyrnes321 (συζήτηση | Συνεισφορά) | sped up bottom panel to match better with middle panel | ||
09:46, 16 Ιανουαρίου 2010 | 360 × 300 (508 KB) | Sbyrnes321 (συζήτηση | Συνεισφορά) | {{Information |Description={{en|1=Diffusion from a microscopic and macroscopic point of view. Initially, there are solute molecules on the left side of a barrier (purple line) and none on the right. The barrier is removed, and the solute diffuses to fill |
Δεν μπορείτε να αντικαταστήσετε αυτό το αρχείο.
Χρήση αρχείου
Η ακόλουθη σελίδα χρησιμοποιεί προς αυτό το αρχείο:
Καθολική χρήση αρχείου
Τα ακόλουθα άλλα wiki χρησιμοποιούν αυτό το αρχείο:
- Χρήση σε ar.wikipedia.org
- Χρήση σε ast.wikipedia.org
- Χρήση σε bn.wikipedia.org
- Χρήση σε ca.wikipedia.org
- Χρήση σε cy.wikipedia.org
- Χρήση σε el.wikipedia.org
- Χρήση σε en.wikipedia.org
- Χρήση σε es.wikipedia.org
- Χρήση σε et.wikipedia.org
- Χρήση σε fa.wikipedia.org
- Χρήση σε fi.wikipedia.org
- Χρήση σε fr.wikipedia.org
- Χρήση σε ga.wikipedia.org
- Χρήση σε gl.wikipedia.org
- Χρήση σε he.wikipedia.org
- Χρήση σε hi.wikipedia.org
- Χρήση σε is.wikipedia.org
- Χρήση σε kk.wikipedia.org
- Χρήση σε no.wikipedia.org
- Χρήση σε pl.wikipedia.org
- Χρήση σε pt.wikipedia.org
- Χρήση σε ro.wikipedia.org
- Χρήση σε sh.wikipedia.org
- Χρήση σε sk.wikipedia.org
- Χρήση σε sl.wikipedia.org
- Χρήση σε sr.wikipedia.org
- Χρήση σε ta.wikipedia.org
- Χρήση σε vi.wikipedia.org
- Χρήση σε zh.wikipedia.org
Δείτε περισσότερη καθολική χρήση αυτού του αρχείου.