[HN Gopher] Poisson's Equation
       ___________________________________________________________________
        
       Poisson's Equation
        
       Author : mferraro89
       Score  : 570 points
       Date   : 2021-07-06 14:20 UTC (8 hours ago)
        
 (HTM) web link (mattferraro.dev)
 (TXT) w3m dump (mattferraro.dev)
        
       | thendrill wrote:
       | Very very well written and enlightening article. Love this guy's
       | writing.
        
       | cornel_io wrote:
       | > This oval (called a separatrix) has the special property that
       | no wind flows through it at all. It acts just like a solid
       | surface. We have already assembled a reasonably accurate
       | simulation of how air flows around an ellipse in some confined
       | space like a wind tunnel!
       | 
       | My understanding of airflow simulation (undergrad-level at best)
       | is that the correct boundary condition is almost without
       | exception the no-slip one: air should be stationary at the
       | surface of each object, not just have zero flow across it.
       | 
       | Am I correct that the calculation mentioned above really only
       | applies to the "dry liquid" scenario where there is no drag and
       | zero viscosity?
        
         | mferraro89 wrote:
         | You are correct! The simulation as written does not handle the
         | no slip condition. The simulated "air" is inviscid and
         | irrotational. You would need to tackle a few more things in
         | order to have a really accurate simulation.
        
           | SubiculumCode wrote:
           | Thanks for the awesome write-up.writer's note. The first
           | paragraph of your conclusion would have served better as your
           | introductory paragraph.
        
       | tobmlt wrote:
       | See also from Keenan Crane and company (discrete differential
       | geometry):
       | 
       | http://ddg.cs.columbia.edu/SGP2014/LaplaceBeltrami.pdf
       | 
       | "The Swiss Army knife of geometric operators."
       | 
       | I always thought that was cool since I usually think of diffusion
       | in the context of fluid flow.
        
       | zitterbewegung wrote:
       | Sorry but can there be more context to why it is a powerful tool?
        
         | nyghtly wrote:
         | The opening of this article had me recalling an old TED talk:
         | "People don't buy what you do, they buy why you do it."
         | 
         | Of course, the author here isn't really selling anything, at
         | least not to the lay man. He's writing niche articles for a
         | niche audience. That is to say, not me.
         | 
         | https://www.ted.com/talks/simon_sinek_how_great_leaders_insp...
        
         | wildmanx wrote:
         | This is a typical issue with HN posts.
         | 
         | Some poor soul wrote a somewhat competent and maybe even
         | lengthy blog post / article about something they really care
         | about and are knowledgeable about. It may be directed at a
         | specific audience, or maybe just screaming into the void to
         | record down some insight they had for themselves to read again
         | later, or similar. And they use a more-than-necessary general
         | title like "the best tool you'll ever see" with "you" meaning
         | either just themselves or a narrow target audience or so.
         | 
         | And then somebody comes along who finds it interesting, submits
         | it to HN, it makes front page, and now it looks like the poor
         | author with their more-general-than-needed title is making a
         | general statement about sth for the _changed_ audience which is
         | the HN crowd, but which is distinctly different from the
         | original target audience.
         | 
         | Case in point: The articles author self describes as: "I'm an
         | aerospace engineer that writes software. I love math and
         | science, and I have two cats."
         | 
         | For an aerospace engineer this all makes a lot of sense and is
         | a super great tool, I'm sure. It's just not for the overall HN
         | crowd. And it's not the authors fault.
        
           | _Nat_ wrote:
           | > For an aerospace engineer this all makes a lot of sense and
           | is a super great tool, I'm sure.
           | 
           | The article seems like a decent introduction to the Poisson-
           | equation. But the original title was _very_ misleading.
           | 
           | Because the Poisson-equation isn't some super-useful tool so
           | much as a Day-1 topic discussed in intro-level classes. It's
           | a really simple equation compared to others used in
           | Engineering, Math, and Physics, so it's often introduced as a
           | starting point.
        
           | rawtxapp wrote:
           | Just to point out, it seems like the author themselves
           | submitted the story to HN. Still I agree with your reasoning,
           | but I think slight clickbaity titles do get clicks which is
           | why we keep seeing them.
        
             | MontyCarloHall wrote:
             | Yup. This wouldn't get nearly the same amount of attention
             | if the title were "Poisson's equation is the most powerful
             | tool in your toolbox _for finding steady-state solutions to
             | the heat equation with arbitrarily placed sources_ "
        
               | pbhjpbhj wrote:
               | Yes, I would love it if HN had optional descriptive
               | titles as subtitles to the main story titles (which would
               | then always be the title given by the author at the time
               | of submission).
        
               | crazygringo wrote:
               | But it'd make a helluva lot more sense.
               | 
               | I tried to skim the article, I started to read comments,
               | and it's only now that I've gotten to yours that I have
               | the slightest idea of what this article is even about.
               | 
               | If it wouldn't get as much attention with that title,
               | then perhaps it isn't appropriate for HN in the first
               | place.
        
               | retzkek wrote:
               | The examples are about heat transfer, because it is an
               | intuitive concept for most people, but as the article
               | explains Poisson's Equation and these methods can be
               | applied to a broad range of problems.
        
           | weinzierl wrote:
           | Well said. There is also the other extreme, where articles of
           | the kind you described don't "use a more-than-necessary
           | general title" but one that is so specific and narrow that it
           | will never fly on HN, even if the content is otherwise a good
           | fit for a valuable HN discussion.
           | 
           | The dilemma with titles is that most of them fall into one of
           | two categories:
           | 
           | - titles where the author didn't put much effort into
           | 
           | - titles where the author tried too hard
           | 
           | The first category is often confusing because the article
           | doesn't fit the title well. The second category often ends up
           | as clickbait.
        
           | chris_st wrote:
           | Except prionassembly's post here shows it's WAY more useful
           | than the original "model physical things" of the original
           | article. Also glad this is here, if only to surface such
           | interesting things!
        
           | [deleted]
        
           | [deleted]
        
           | shoto_io wrote:
           | Seems like we need a disallow robots.txt equivalent!
        
           | franciscop wrote:
           | From the poster sharer username here in HN it seems "the poor
           | author" is also the one sharing it here, so it seems this
           | blog post is at least partly directed to the general HN
           | audience, not like the hypothetical situation you are placing
           | here. So the whole "It's just not for the overall HN crowd"
           | is probably not a valid point?
           | 
           | I found it a throwback to my university years, but I did
           | study Industrial Engineering with thermodynamics, fluid
           | mechanics and whatnot so I did find it interesting. I'm
           | pretty sure it's usable by a bunch of people in HN as well in
           | many fields where software intends to emulate the real world,
           | like designing a smart appliance, games, VR, etc.
        
             | wildmanx wrote:
             | What's getting confusing with this discussion is that the
             | title has changed. Now it's just "Poisson's Equation". But
             | before it was "Most Powerful Tool not yet in your Toolbox"
             | which was _really_ off topic for a mainly sw dev crowd.
             | 
             | That the author himself submitted it (under that original
             | title?) would then be his own "fault". But my general
             | original point remains.
        
           | RicoElectrico wrote:
           | I'd rather have more submissions like this on the HN
           | frontpage than the slew of entrepreneurship advice (good or
           | bad), programming-languages-du-jour and disguised content
           | marketing.
           | 
           | Anyway, the premise that "everything I see has to appeal to
           | me" would best stay on YouTube where it originated.
        
             | quaintdev wrote:
             | There should exist a subreddit for exactly these type of
             | articles which are in depth. Who know article like this may
             | want someone to learn something entirely different than
             | their domain and then they end up applying it in their
             | domain in a whole new way.
        
             | alisonkisk wrote:
             | Please don't sling pointless insults. That would best stay
             | on...nowhwere, will it belongs.
             | 
             | Parent's concern was for the misleading titles that appear
             | on HN, due to HN's fear of submitters.
        
             | SubiculumCode wrote:
             | It IS a good article, but the audience of the article is
             | fairly specific yet left unspecified. As a general
             | principal in technical writing it is advisable to start
             | with a "why you should care" statement because this
             | naturally informs the reader about the context.
        
               | wheelinsupial wrote:
               | Is the second section "when would I use this" sufficient
               | to provide a "why you should care statement"? Or is there
               | a more common way to call this out in technical writing?
               | Perhaps an "intended audience" or "necessary
               | prerequisites"?
        
               | SubiculumCode wrote:
               | I mean there is nothing "wrong" with starting at the 2nd
               | paragraph (and that was was just for the more limited
               | Laplace version of Poisson's), its just not generally the
               | most effective writing style. Yes, there is some
               | subjectivity here, but writing is hard, and it is only
               | through criticism that we learn to be better technical
               | writers.
               | 
               | The first paragraph of the conclusion would have better
               | served as the Introductory remark: "Poisson's equation
               | comes up in many domains. Once you know how to recognize
               | it and solve it, you will be capable of simulating a very
               | wide range of physical phenomena." That is a great
               | sentence. I'm interested now, and I know its context.
        
             | wildmanx wrote:
             | I didn't intend to demand "everything I see has to appeal
             | to me". I was merely pointing out that the meaning and
             | impact of a headline are relative to the target audience
             | and this was an example that illustrated the difference.
             | With the effect that somebody somewhat rightfully asked "eh
             | what is this about again"?
             | 
             | The HN crowd has a different average toolbox than the
             | article's author, so the apparent mismatch between headline
             | and article content was confusing.
        
         | cpp_frog wrote:
         | It is easier to study from a theoretical point of view (easier
         | that the heat or the wave equation: [1], Ch. 2), and it's
         | easier to implement a solving method. When you are learning the
         | finite element method, this is one of the first examples that
         | people use to test if they got the right implementation.
         | 
         | Now, I wonder if the author regards it important in his
         | particular area (aerospace engineering), I'm new to the field
         | so I don't see how. Right now I'm reading a book [0] on models
         | to solve problems concerning aerospace applications and they
         | mostly use a simplified form of the Navier-Stokes equations
         | together with some elasticity assumptions.
         | 
         | [0] _Fluid Structure Interacion_ , Morand-Ohayon.
         | 
         | [1] _Partial Differential Equations_ , Evans.
        
           | leephillips wrote:
           | If you take the divergence of the incompressible Navier-
           | Stokes equations you get a Poisson equation for the pressure,
           | with a function of velocity on the RHS. So it's important in
           | fluid dynamics.
        
         | OnlyOneCannolo wrote:
         | It's a simple and general method that works in many domains,
         | which is an usual combination.
         | 
         | The other ways of solving the example of arbitrary heat sources
         | and sinks on a plate range from hacky combinations of simpler
         | methods, to tedious math, to complicated general methods. If
         | you switch from heat to pressure distribution, you'd have the
         | same types of options, but the specific methods would be
         | different.
        
         | hasmanean wrote:
         | Apropos of nothing, some of my first programming lessons were
         | FORTRAN programs from my dads old engineering textbooks. The
         | book's graphics showed them being handwritten on graph paper
         | and even showed the punch cards they would ultimately be put
         | on.
         | 
         | One of the most impressive programs solved Laplaces equation
         | for heat flow in a pipe. They used some mysterious plotting
         | library that put ASCII art to draw contour lines and output
         | directly to a line printer. I thought it was the coolest thing
         | ever, but it was hard for a high school kid to understand.
         | 
         | Over the years I've thought of writing that program in a modern
         | language, but it was never worth the time and effort to go over
         | that FORTRAN program in detail. Numerical methods are too often
         | explained from the point of view of mathematicians and
         | engineers, and not computer programmers.
         | 
         | The blog post here is 1000x more readable and much higher
         | quality and does a lot to demystify the subject. I especially
         | like his progression from simple brute force methods to more
         | efficient solutions...which is the natural way to learn. His
         | comment about "Laplace's equation just means every point is the
         | average of its neighbours" is perfect.
         | 
         | Believe or it not I was in need of just such a tutorial ... for
         | something I've been thinking about at work. His article really
         | hit the spot and I'm grateful for it.
        
       | heinrichhartman wrote:
       | This guy has exactly two posts on his blog. The other one is on a
       | completely different topic but great read as well:
       | 
       | https://mattferraro.dev/posts/cnc-router
        
       | Robotbeat wrote:
       | I have used Poisson's Equation recently. Actually, something
       | similar. Been coding up some thermal conductivity calculations
       | form scratch.
       | 
       | What's nice about the Laplace equation is that there are some
       | exact analytical solutions in some situations which is really
       | helpful for validating numerical codes and sanity checking. It's
       | also simple enough to implement in an Excel spreadsheet, Color
       | coding the cells to indicate temperature. Good sort of "no code"
       | example of the concept.
        
       | Synaesthesia wrote:
       | We referred to this method of numerically solving Poisson's
       | equation by successively averaging values, as the method of
       | relaxation.
        
       | pgustafs wrote:
       | Great post, one nitpick -- I wouldn't say that a matrix is a
       | "sparsely defined" function, but rather a function defined on a
       | finite grid. It might also be worth pointing out that same
       | approach works for any graph, not just a grid.
        
         | wildmanx wrote:
         | Also, what's confusing is that algebra usually uses matrices to
         | describe linear functions from n-dimensional to m-dimensional
         | vector spaces. Matrix has n rows, m columns, you give it an
         | n-dim vector and after matrix multiplication you get back an
         | m-dim vector.
         | 
         | The author uses a matrix quite differently. You give it two
         | integer coordinates i and j and it gives you the value at
         | position (i, j) back. That's a valid use, but not quite what
         | you'd expect in a math-oriented article.
        
           | burnished wrote:
           | Can you link to context for this? I learned both in linear
           | algebra, so it seems like either would be just as 'expected'.
        
             | mixedmath wrote:
             | Here's a concrete example. The first matrix in the post is
             | f = [[1, 1, 1], [1, 1, 1], [1, 1, 1]].
             | 
             | In linear algebra, we would interpret this as a linear map.
             | A true equation would be f([1, 2, 3]^T) = [6, 6, 6]^T
             | (where I'm using ^T to mean "transpose to a column
             | vector").
             | 
             | But here, the author means f(1, 2) = 1, i.e. the (1,2)
             | coordinate of the matrix is 1.
        
               | burnished wrote:
               | Thank you! Yes, I agree, thank you for explaining that to
               | me.
        
               | wildmanx wrote:
               | And interestingly, both are connected. If d_i somewhat
               | hand-wavingly expresses the vector d_i = (0, ..., 0, 1,
               | 0, ... 0) with the 1 at position i, then given matrix M
               | you can do
               | 
               | f(i, j) := d_i^T * M * d_j
               | 
               | The RHS is using classical matrix multiplication, and the
               | function value will be the matrix' entry at column i, row
               | j.
        
           | mferraro89 wrote:
           | Thanks for calling this out, I thought it might cause
           | confusion. Matrices are super weird objects because they
           | don't fit nicely into the {scalar, vector, function,
           | operator} classes that maybe we're used to. A matrix is a
           | function in that it can take in a vector and map it to a new
           | vector. It is also an operator in that it can take in some
           | other matrix (a function!) and give you a transformed matrix
           | (a new function). It is also a function in the sense that it
           | can map vectors to scalars, where the input vectors (x, y)
           | are the coordinates and the scalar stored there is the
           | output. All of this gets further complicated by the fact that
           | the elements of a matrix can be scalars, complex numbers, or
           | even matrices! They are really strange objects and maybe I'll
           | write up a whole post just about that strangeness.
        
             | yccs27 wrote:
             | Just writing down the connections here for myself and maybe
             | others:
             | 
             | A matrix represents a linear function taking a vector and
             | returning a vector, written as
             | 
             | w = M v
             | 
             | Matrix multiplication corresponds to function composition.
             | 
             | Vectors can be indexed, and we can view them as a function
             | i -> v[i] defined on the indexing set. We can also define
             | basis vectors b_i, such that b_i[j] is 1 at index j=i and 0
             | otherwise. Any vector can be written as a weighted sum of
             | basis vectors, with the vector components as coefficients:
             | 
             | v = S_i v[i] b_i
             | 
             | where S_i represents summation over the index i.
             | 
             | Matrices can be indexed with two indices, and this is
             | closely related to vector indexing: For a matrix M, we have
             | 
             | M[i, j] = (M b_j)[i]
             | 
             | Each column of the matrix represents its output for a
             | certain basis vector as input. By writing a vector as a sum
             | of basis vectors and using linearity, we get the well-known
             | matrix-vector multiplication formula:
             | 
             | (M v)[i] = S_j M[i, j] v[j]
        
       | niffydroid wrote:
       | You lost me at equation
        
       | pm90 wrote:
       | This was a very interesting read even as someone who probably has
       | no practical use for these tools.
        
         | davidkuhta wrote:
         | > probably
         | 
         | can lead you to some fun places.
        
           | xbar wrote:
           | I am intrigued, but I think I still need a bridge to help me
           | get to practical uses in my my fields involving (largely)
           | non-physical systems.
        
       | jbay808 wrote:
       | A friend of mine broke a badminton racket during a match, and I
       | was struck by how the sharply bent and twisted metal rim was
       | transformed into a smooth, continuously double-curved surface by
       | the racket weave. I looked closely at the balance of tension in
       | the woven cord, thought of how it resembles Poisson's equation,
       | and suddenly it all made sense.
       | 
       | Edit - it looked something like this:
       | 
       | https://thumbs.dreamstime.com/b/broken-badminton-racket-phot...
        
         | [deleted]
        
         | codethief wrote:
         | Hmmm, this looks more like a minimal surface, i.e. a solution
         | to the minimal-surface equation[0], than a solution to
         | Poisson's equation. Then again, both equations are of elliptic
         | type.
         | 
         | Some links for people who've never heard of minimal surfaces:
         | 
         | https://en.wikipedia.org/wiki/Minimal_surface
         | 
         | https://minimalsurfaces.blog/ (lots of illustrations)
         | 
         | https://makmanx.github.io/math3435s18/talks/MSE.pdf (brief
         | intro with historical remarks and illustrations)
         | 
         | [0]: More specifically, it's a solution to Plateau's problem:
         | https://en.wikipedia.org/wiki/Plateau%27s_problem
        
           | jbay808 wrote:
           | Isn't Poisson's equation basically describing a minimal
           | surface for small z?
           | 
           | I'm not saying the badminton racket follows _exactly_ a
           | (discrete) 2D Poisson equation. But it 's certainly related
           | enough to be more than a surface similarly.
           | 
           | The cords are under high tension, which means that any
           | curvature along x (that is, dz^2/dx^2) will result in a net
           | z-axis tension force unless balanced by an oppositely curved
           | cord running in the y direction. Since it's in static
           | equilibrium, there can be no unbalanced forces and so that
           | must be the case. Therefore at each intersection, (d^2/dx^2 +
           | d^2/dy^2)z = 0, which is Poisson's equation in 2D for z
           | height being the function. Approximately, assuming equal
           | tension in x and y, small z, and so on.
        
             | codethief wrote:
             | I didn't say you're _completely_ wrong, either. :) (In
             | fact, I stressed that both equations are of elliptic type,
             | so solutions might look similar.)
             | 
             | One can make a similar heuristic argument, though, as to
             | why the surface you observed should follow the minimal-
             | surface equation.
             | 
             | EDIT, as you've updated your comment:
             | 
             | > Isn't Poisson's equation basically describing a minimal
             | surface for small z?
             | 
             | Small _changes_ in z, I think.
        
             | gpsx wrote:
             | I think that is good intuition. The transverse force is the
             | second derivative of the transverse position, to first
             | order. But then there are higher order effects in it. I
             | think that is where that math breaks down.
        
       | alisonkisk wrote:
       | The article never explains why [?]2 means "average of neighbors".
       | It's the divergence of the gradient, which is (one kind of)
       | n-dimensional 2nd derivative.
       | 
       | In a one-dimensional function, the second derivative is 0 when
       | there is no curvature, aka a straight line (of any slope), and
       | any point on a line is equal to the average of its neighborhood.
       | A plane also has this property, but in 2+ dimensions you can also
       | make other shapes (like saddles), that are made up of lines (like
       | a plane) but the lines are twisted relative to each other in
       | interesting ways (like "string art"). You can also visualize (aka
       | impose a coordinate system for) these surfaces as having positive
       | curvature (concave up) in one direction, and exactly opposite
       | negative curvature (convex up, or concave down) in the orthogonal
       | direction, summing to 0.
        
       | daleroberts wrote:
       | Here is my implementation in python of the Poisson equation on an
       | arbitrary 2D domain using the finite element method. I used this
       | for teaching a course in partial differential equations:
       | 
       | https://github.com/daleroberts/poisson
        
       | powderpig wrote:
       | I too hate the coloured plots but I can tell you as a Stress &
       | Structures engineer who works with ANSYS regularly, it does help
       | when assessing material limits and strain energies. This is
       | especially true when you're working with models where temperature
       | is time dependent.
       | 
       | A great article, one to bookmark for sure.
        
       | WalterBright wrote:
       | A _very_ understandable explanation of it, and its uses.
        
       | sgarrity wrote:
       | I thought poisson's equation was expressed as: <><
        
       | MauranKilom wrote:
       | > From here we could use Bernoulli's equation to find the
       | pressure distribution, which we could integrate over the surface
       | to find drag and lift and so on. With a few tweaks we could
       | simulate rotational flow, vortex panels, real wing profiles, and
       | so on.
       | 
       | > With just a few simple building block we're already edging up
       | on real computational fluid dynamics. All this just by adding up
       | some matrices!
       | 
       | Correct me if I'm wrong, but the only "real" CFD you could solve
       | with this are incompressible potential flows [0]. Solving Navier
       | Stokes is clearly not just "a few tweaks away" from the Laplace
       | equation, but I would be curious which tweaks would take you to
       | e.g. rotational flows.
       | 
       | [0]: https://en.wikipedia.org/wiki/Potential_flow
        
       | seemslegit wrote:
       | That's such a presumptuous title, the author does not know what
       | other powerful tools my toolbox lacks.
        
       | pphysch wrote:
       | The notion that the simple Laplace solver can scale to grids of
       | arbitrary size, without modification, is a bit misleading for
       | practical purposes. Computational performance will tank or zero
       | out if memory hierarchy constraints are not considered. The
       | author does mention high-performance solutions like multigrid.
       | However, even a basic successive overrelaxation algorithm like
       | the one shown can be partitioned and parallelized, and it is a
       | very good programming exercise to implement a partitioning scheme
       | using MPI or even a low-performance messaging library (or even
       | just optimize for cache sizes on a single device, with no network
       | transport).
       | 
       | Like the transition from the elegant, 5-character Laplace
       | equation to the relatively verbose and complex numerical Julia
       | solver, there is an additional and necessary step in making the
       | numerical solution further scalable with present technology. In
       | particular, the notion that the computational boundaries map
       | nicely to the physical boundaries must be thrown out, because now
       | we must respect the layer of "virtual boundaries" between the
       | partitions.
        
       | Chris2048 wrote:
       | Reminds me of 3Blue1Brown "Divergence and curl":
       | 
       | https://www.youtube.com/watch?v=rB83DpBJQsE
        
       | vlmutolo wrote:
       | > It is customary when simulating heat flow to use a wacky color
       | palette where red is hot and blue is cold, with all kinds of
       | intermediate colors in between
       | 
       | In an otherwise excellent article, this is the only issue I could
       | find. We really need to stop using/recommending/normalizing
       | rainbow color maps (i.e. jet). They actively confuse readers by
       | creating visual artifacts that aren't actually in the data.
       | 
       | This article has some great explanations and visuals.
       | 
       | https://jakevdp.github.io/blog/2014/10/16/how-bad-is-your-co...
       | 
       | The original post uses a rainbow color map to represent
       | temperature-related things because having a diverging color map
       | is often a useful intuition for temperature heat maps. But in
       | that case, we should prefer one of the following diverging color
       | maps listed on the matplotlib site (this list definitely isn't
       | exhaustive, but it is helpful).
       | 
       | https://matplotlib.org/stable/_images/sphx_glr_colormaps_004...
       | 
       | More on matplotlib's well-chosen color maps:
       | 
       | https://matplotlib.org/stable/tutorials/colors/colormaps.htm...
        
         | just_temp wrote:
         | Can not agree with this more, if people want to plot something
         | that is linear please use a perceptually linear colormap! Just
         | a one second glance at the Mona Lisa in rainbow/Jet is enough
         | to make you gouge your eyes out.
         | https://peterjamesthomas.com/2017/09/15/hurricanes-and-data-...
         | 
         | For a more technical description the information behind the
         | newer matplotlib defaults, particularly the scipy talk, is
         | great. https://bids.github.io/colormap/
         | 
         | And for those that do not like the matplotlib options, colorcet
         | provides a wider range of alternatives that are not trash
         | (unlike Jet) https://colorcet.holoviz.org/index.html
        
       | s-macke wrote:
       | You can also use it to solve labyrinths. Just put a high pressure
       | at the beginning and a low pressure at the end. Solve the Poisson
       | equation. The path through the labyrinth is always the steepest
       | slope. In [1] you can see a small implementation of the idea.
       | 
       | [1] https://simulationcorner.net/maze/
        
       | Lichtso wrote:
       | Last year a Monte Carlo approach to estimate the solution quickly
       | was discovered. It works somewhat similar to diffusion curves.
       | 
       | https://www.cs.cmu.edu/~kmcrane/Projects/MonteCarloGeometryP...
        
       | prionassembly wrote:
       | My (unorthodox and somewhat rickety) note-taking gizmo uses
       | Poisson's equation to classify (continuously) entries.
       | 
       | Basically the note-taking gizmo is a graph. Nodes are given
       | conceptual masses either through pagerank or betweenness
       | centrality (i.e. either through how many random walks or how many
       | shortest paths cross a node). Then we calculate a potential
       | energy (gravity potential) if we by inverting the graph laplacian
       | (a few methods are available). Special attention is given to
       | nodes that "float the most.
       | 
       | E: forgot to link to it! https://github.com/asemic-
       | horizon/sursis/
        
         | chris_st wrote:
         | That looks really cool -- I presume it has some way to enter
         | more than a single word/phrase in a node? Not sure linking
         | individual words is useful for me :-) I should just try it, of
         | course...
        
         | throwamon wrote:
         | I guess I don't have the background to see how useful this can
         | be, but something tells me it can be very useful. Would you
         | mind doing an ELI5?
        
       | SavantIdiot wrote:
       | I could have used this 32(!) years ago when I was struggling in
       | college. (This and 3b1b.)
       | 
       | It amazes me just how many key topics were so inaccessible to the
       | majority of the class at engineering school. I base this on
       | observations from group study sessions and the hyper-aggressive
       | test curves.
       | 
       | I knew lots of people who never got the hang of div/grad/curl, or
       | a Jacobians, or eignenvectors, or Z-transforms... These are key
       | engineering concepts, you'd think colleges would bend over
       | backwards to make sure these concepts are learned as succinctly
       | as possible rather than add a curve to a test that makes a 23 out
       | of 100 an "A" grade.
       | 
       | I'm digressing, and complaining, but the counter argument has
       | always been: you're not supposed to learn everything in college,
       | you're supposed to learn how to learn. Sure, right, but who has
       | time to keep learning advanced calculus after college? (Well, I
       | still study math & physics for fun, but over the course of
       | decades, not years.) Not being able to see the world through
       | these lenses I think means missing key engineering perspectives
       | and relationships.
       | 
       | Anyway, very well written article.
        
         | p_j_w wrote:
         | >I could have used this 32(!) years ago when I was struggling
         | in college.
         | 
         | I was struggling with this material more like 15 years ago, but
         | same. I wish someone had explained the LaPlacian like this when
         | I was in Multivariable calculus:
         | 
         | >Find me a function f where every value everywhere is the
         | average of the values around it.
         | 
         | It's so simple and easy to grasp, yet provides so much insight
         | into what's going on when you're doing the actual calculation
         | behind the operation, but is so easy to lose sight of when
         | you're overwhelmed with figuring out the 'mechanics' of it and
         | everything else that was covered in the day's lesson plan.
        
         | MontyCarloHall wrote:
         | > rather than add a curve to a test that makes a 23 out of 100
         | an "A" grade.
         | 
         | For people wondering why fresh college grads they interview
         | somehow have 4.0 averages yet can't code FizzBuzz during an
         | interview, this is the answer.
         | 
         | It's also why good hiring managers do not even bother to look
         | at GPAs listed on CVs. They are so inflated as to be totally
         | meaningless.
        
           | SavantIdiot wrote:
           | That's not true at all. When someone drops 200 resumes on
           | your desk and says, "Find 10 candidates to interview by
           | tomorrow", you need some initial sort criteria.
           | 
           | The truth, my criteria were: #1: university, #2: GPA, #3:
           | keywords. Sure, I was bitten a few times (I hired an MIT
           | master's student who was utterly helpless), but over the
           | course of years doing this, some patterns emerge, and high-
           | GPA absolutely correlates with good candidates.
           | 
           | Sure, there might be a 2.0/4.0 who is a whiz, but sorry
           | charlie, I'm not gonna picky your resume, so apply yourself
           | or start your own company, because a low GPA means you don't
           | give a shit or have some other problem.
        
             | MontyCarloHall wrote:
             | I agree that GPA is useful as a binary indicator--if it's
             | abominably low, like a 2.0 in your example, it's a red
             | flag. But a 4.0 is no more predictive of being a good hire
             | than, say, a 3.3. It's also very school-dependent. Some
             | places inflate grades a lot more than others.
             | 
             | In my own anecdotal experience, I omitted my GPA entirely
             | from my CV when looking for jobs straight out of college
             | and got interviews at every single place I applied. It's
             | not nearly as important as a lot of people think.
        
               | SavantIdiot wrote:
               | > But a 4.0 is no more predictive of being a good hire
               | than, say, a 3.3
               | 
               | Ironically I graduated with a 3.4, and I did feel guilty
               | for not passing on resumes with GPAs as low as mine. But
               | as I said, when I had many other tasks to do for work,
               | and then had to stop them all to sort resumes (we all
               | took turns), it was hard to justify excursions when there
               | were so many 4.0s. It is a sad truth that new college
               | grads almost all look the same on paper...
        
           | TrackerFF wrote:
           | Obviously depends on the school, and how much grade inflation
           | (or deflation) they've gone through. When I studied
           | Electrical Engineering, class average was 2.8 or so. The few
           | students that actually had anything _close_ to a 4.0 were
           | terrific students.
           | 
           | I remember in our real analysis class, the professor started
           | with a comment (to the class) in the lines of:
           | 
           |  _" This is a demanding class. Top performing students
           | usually spend 25-35 hours a week on the problem sets alone,
           | and top grades are rarely awarded - some years there are zero
           | A's. Please take the weekend to consider if you really need
           | or want to take this class."_
           | 
           | FWIW, this was no top University - but then again, grade
           | inflation is not that bad in STEM, from my experience.
        
         | lordnacho wrote:
         | I feel the same. How can it be that I went to a world famous
         | institution providing 2-to-1 student-teacher ratios, but I
         | still think the best explanations are these modern internet
         | explanations? I guess the best explanations just bubble up in
         | the modern environment.
         | 
         | > you're not supposed to learn everything in college, you're
         | supposed to learn how to learn
         | 
         | But to learn how to learn, you gotta learn some things to a
         | somewhat decent degree. I think at some point you need to have
         | these linalg/divgradcurl things down, if only briefly. You
         | might forget any particular topic, but if you've indexed it you
         | should be able to pick it up again, particularly in the modern
         | learning environment.
         | 
         | Just imagine coding without access to StackOverflow.
        
           | SavantIdiot wrote:
           | > Just imagine coding without access to StackOverflow.
           | 
           | That was the beginning of my career in the PC industry!
           | 
           | C compilers for PCs were in their infancy, so all of the code
           | I was writing was x86 assembly using MASM 6 on MS-DOS 5.2
           | (hello TSRs and config.sys).
           | 
           | I forget the company, but some tech house published a giant
           | 500 page PC encyclopedia every year that listed all of the
           | x86 CPU instructions, IO ports, interrupts, DOS interrupts,
           | etc. The last issue I had was white with pink lines on it and
           | weighed about 3 kilos! Then the internet showed up and that
           | all went away.
           | 
           | Well, except the mentors. Mentors will always be a step-
           | function way to learn new material.
        
           | sdenton4 wrote:
           | Interesting to think a bit about student/teacher ratios
           | (STR).
           | 
           | The up-side is that with a low STR (2:1), the teacher can
           | adapt to the particular strengths and weaknesses of the
           | students, to get the best reinforcement. The /downside/ is
           | that the students will typically also have fewer teachers
           | overall, and are maybe stuck with a bad one. (This is the
           | problem of bad grad school advisors in a nutshell...) In this
           | world, teachers are very expensive, though, so we end up with
           | students competing for access to good teachers, by paying
           | super-high tuitions, dedicating their early childhood to
           | olympic-level basketweaving, etc.
           | 
           | In the medium-STR regime (30:1 or 100:1), we get the worst
           | case: There's no teacher adaptation to individual students,
           | but teachers are still the bottleneck.
           | 
           | The internet has something to say about extremely high STR
           | (1MM:1). In this regime, things flip and any teacher can
           | teach every student: Teachers are no longer scarce, and so
           | have to compete on giving the best instruction. Instruction
           | quality increases as a result. And on the flip side, there's
           | no student competition, which /maybe/ causes student quality
           | to drop.
        
             | hasmanean wrote:
             | The flip is an emergent property of the 1 Million to 1
             | student teacher ratio.
        
             | mywittyname wrote:
             | > which /maybe/ causes student quality to drop.
             | 
             | Not maybe. Absolutely. Even paid-for online courses have a
             | relatively high drop out rate.
             | 
             | But that's okay. It's the price to pay to achieve the
             | volume needed to pay for great instruction. I can take a
             | music theory class from an instructor who would never waste
             | their time teaching someone like me. Even though I may not
             | get much more than entertainment value from it. I'm
             | effectively subsidizing the students who do learn something
             | concrete from the course.
             | 
             | There might be an argument to be made that pandering to an
             | "edutainment" crowd might reduce the quality of
             | instruction, but a good instructor should be able to find
             | the right balance.
        
             | MontyCarloHall wrote:
             | The latter regime is less a function of the ratio itself
             | and more a function of the total number of accessible
             | teachers, and the ability to switch teachers at will to
             | find the one most suited to your learning style. If a
             | university had 100 teachers all teaching the same course in
             | the low or medium STR regimes and students were able to
             | easily swap between teachers at will, the effect would be
             | the same.
        
               | sdenton4 wrote:
               | The ratio is really what matters more than absolute
               | numbers; it tells us where the bottleneck is (supply or
               | demand).
               | 
               | If the STR is 2:1 and you've got 1000 teachers, it means
               | you've got 2000 students. If only 5% of teachers are good
               | (see: sturgeon's law), you've still got competition
               | centered on the student side, as 2k students fight to get
               | into the classes with the 50 good teachers.
        
               | MontyCarloHall wrote:
               | Ah, I get your point now. In my hypothetical example, you
               | could still have those 2000 students enrolled with only
               | the 50 good teachers. The overall STR would still be 2:1,
               | but most of the teachers would have no students, so the
               | effective STR would be 40:1.
               | 
               | The main thing distinguishing online education is the
               | ability for students to all flock to the good teachers
               | and completely abandon the crappy ones.
        
           | mensetmanusman wrote:
           | The answer is statistics: what is more likely, that the best
           | explainer of a certain topic is within a group of people you
           | have access to, or that person is somewhere else in the
           | world?
           | 
           | This is very analogous to the problem industrial research
           | groups face trying to answer a certain problem, e.g. 'how do
           | we ensure that our team is the most likely to solve a
           | particular problem first?'
           | 
           | This is why start up acquisitions are so common even among
           | the best funded tech companies.
        
             | lordnacho wrote:
             | Might also have something to do with the explanation size:
             | this Poisson thing is one little thing. With the internet,
             | it's perfectly acceptable to just do a blog post on one
             | little thing.
             | 
             | Previously, if you were to write a textbook or teach a
             | tutorial, you needed to teach a bunch of things.
             | 
             | So in the internet age there's a bunch of fine grained
             | "best explanations" coming from a variety of authors that
             | beats the best that one guy can do across a range of
             | topics.
        
           | nimish wrote:
           | Turns out that mathematics pedagogy is poor, in general.
           | Especially for geometry and vector calculus, where it's
           | either obsolete, busted systems or incredibly abstruse ones.
           | 
           | Skipping over div/grad/curl and Gibbs-Heaviside vector
           | calculus by going straight to differential forms and Clifford
           | algebras (geometric calc) would save a bunch of heartache and
           | pointless effort.
           | 
           | Linear algebra is essential since the whole point of
           | differentiation is to construct linear approximations of
           | functions...among other things.
        
           | pfortuny wrote:
           | Honest question. 2-to-1 student-teacher ratio?? Where is
           | that? Totally stunned.
        
             | lordnacho wrote:
             | Oxford, and the place out in the marshes.
             | 
             | It's not that there aren't massive lectures, tutorials are
             | in addition to those.
             | 
             | Not bad value actually, despite what I said earlier. You do
             | get to ask about whatever your mental block is, and the
             | tutor is gonna know. But studying is time consuming, an
             | hour is not as much time as it seems. You probably learn
             | the most on your own, which nowadays ought to mean on the
             | internet.
        
               | pfortuny wrote:
               | Oh I thought it was accross the pond. I knew about Oxford
               | etc. but for whatever reason I took it to be in the
               | Colonies.
        
               | lordnacho wrote:
               | On that side I suspect some of the smaller liberal arts
               | colleges are your best bet for small classes. But I'm no
               | expert on the overseas possessions.
        
               | nimish wrote:
               | Yeah, the idea was/is that you spend 5-10hrs studying for
               | every hour in tutorial. You got what you put in.
        
             | ectopod wrote:
             | Oxford tutorials do this. They typically have one, two or
             | three students.
        
               | sideshowb wrote:
               | Cambridge also
        
         | amoorthy wrote:
         | Agreed! It's one reason I'm bullish about our children learning
         | and applying math better than us.
         | 
         | Btw, 3 Blue 1 Brown's videos on linear algebra [1] are
         | similarly awesome and of course his video on Fourier is
         | magnificent [2]. Another awesome math explanation is on game
         | theory by Nicky case [3].
         | 
         | [1] https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2
         | x.... (you'll finally learn what a determinant is!) [2]
         | https://www.youtube.com/watch?v=spUNpyF58BY [3]
         | https://ncase.me/trust/
        
         | senthil_rajasek wrote:
         | 30 yrs ago the internet was still in its infancy and good
         | engineering teachers were available to only a chosen few and
         | closed out to the rest of the world.
         | 
         | I stayed curious and learning. Better and better teaching
         | methods became accessible thanks to the maturing internet. I
         | started to understand ideas in engineering much better.
         | 
         | Alas, there is no way I can express this progress in a resume
         | but learning and understanding satisfies my curiosity.
        
         | bradstewart wrote:
         | For me at least, at a large public university with a highly-
         | rated engineering department, it mostly came down to math
         | courses being taught by TAs/new faculty who were not primarily
         | interested in teaching.
         | 
         | When I had actual engineering dept courses on these topics
         | (frequency domain comes to mind), I grok'ed it pretty quickly.
         | But the math lectures were basically spent doing practice
         | problems from the book, without any sort of insight or
         | practical application.
         | 
         | I just wanted to build shit in college.
        
         | jozvolskyef wrote:
         | The generation growing up today is the first that can broadly
         | learn mathematics from mathematicians rather than from
         | teachers, and we should encourage them to do so.
         | 
         | When I was 12-16, I was interested in physics enough that I
         | would study it in my free time just for fun, solving problems
         | from the Physics Olympiad. I could solve lots of the problems
         | with just intuition, until I stumbled upon the sliding chain
         | problem. I spent about a week pondering over it with no
         | results. I approached my math teacher. He admitted defeat and
         | referred me to the physics teacher. If I remember correctly,
         | the physics teacher avoided admitting he didn't know how to
         | solve it and didn't give me any pointers. I was demotivated for
         | a while and soon replaced my interest in Physics with hacking
         | computers. I wonder whether this could still be a problem today
         | when anything can be found on YouTube. There's a lot of noise,
         | too. How long does it take the average curious kid to find the
         | signal that is 3b1b, MIT OCW, etc?
        
           | texaslonghorn3 wrote:
           | It is certainly much easier. But if that kind of self study
           | culture doesn't already exist in one's own school, either
           | encouraged by teachers or classmates, it may take a much
           | bigger leap to discover that material.
        
         | msie wrote:
         | Reminds me of the article I read yesterday about the importance
         | of drills: https://news.ycombinator.com/item?id=27735292
        
         | H8crilA wrote:
         | What's a "test curve"? How does it make 23/100 be an A grade,
         | is it some kind of CDF-based transformation that makes certain
         | % of students pass the test?
        
           | mrmuagi wrote:
           | That sounds like what it is from my experience as well but
           | it's really up to professor.
           | 
           | One exam was really hard such that your new grade was
           | sqrt(#correct/#total). Another was to make new total the
           | value of highest correct score, e.g. everybody in class got
           | 0-20 out of 100, new total is 20.
        
           | wombatpm wrote:
           | Unlike in high school where the grade percentages are pre
           | determined. ie a 90% is the cutoff for an A and it is
           | expected that students will score that or higher, College
           | professors see that as making the test too easy with the
           | potential of having too many students get A's. Instead they
           | will make the test longer or harder such that the best grade
           | is 60/100 and the average grade is around 40. The will then
           | scale things such that the top 10% get A, 20% B etc.
           | 
           | Sometime the prof screws up and the test is too hard where
           | the aveage grade is 30. Sometimes some over-achieving git
           | 'busts the curve' and scores a 95 and the next highest grade
           | is a 60 - making it hard for the prof to justify giving A's
           | to the top 10%
        
             | beerandt wrote:
             | Also, the term "curve" is literally a statistical bell
             | curve that teachers would fit the students' grade
             | distribution to.
             | 
             | Even if teachers use a different method, the term has stuck
             | as a synonym for "grade adjustment".
             | 
             | I only had a few actually do this, usually it's just a
             | fixed amount bump given to everyone's grade.
             | 
             | Only 2 or 3 times did I have a teacher curve grades down.
        
         | alisonkisk wrote:
         | Your 30 years of experience is _why_ the article makes so much
         | sense. If you saw this in college you wouldn 't have also
         | learned everything else about div and grad.
         | 
         | > these concepts are learned as succinctly
         | 
         | ? Succinctness is *why" you didn't learn multiple
         | interpretations of everything.
        
           | SavantIdiot wrote:
           | > ? Succinctness is *why" you didn't learn multiple
           | interpretations of everything.
           | 
           | Good catch. I think that was the wrong word because I was
           | learning s-transforms in three classes sophomore year:
           | differential calculus, linear systems, and thermodynamics. It
           | was the opposite of succinct because the same concept was
           | being thrown at me in three different classes from three
           | different perspectives.
        
             | sdenton4 wrote:
             | to throw one other, maybe-less-obvious, spin on it:
             | 
             | When you take a class, you see one wrong way to do things.
             | When you teach a class, you see fifty wrong ways to do
             | things.
             | 
             | Puzzling through all the different wrongs ways to think
             | about a problem really helps cement the core ideas... And
             | first-year calc students are masters of creating
             | interesting-but-wrong interpretations.
        
       | enriquto wrote:
       | Since you have written it as a symmetric, positive definite,
       | sparse linear system, why don't use a standard solver like
       | CHOLMOD which is available in Julia? (and behind octave's anti-
       | slash operator). It should be faster than the ad-hoc single-scale
       | Gauss-Seidel.
        
         | phkahler wrote:
         | At the end the author mentions there are a large number of
         | methods available for solving. Also mentions there are a much
         | larger set of applications that those discussed.
        
           | enriquto wrote:
           | Sure! But it's a bit surprising that they do not use the
           | language-provided linear solver and write simply f=A\b
        
             | SonicScrub wrote:
             | The goal of the article is educate on the mathematics, not
             | a tutorial on how best to do mathematical modelling with
             | Julia. An article like that is better served explaining the
             | inner workings of the Black Box, rather than just using the
             | Black Box.
        
             | icegreentea2 wrote:
             | Wait, how does this work? I'm really rusty, what would the
             | f, A and b correspond to here?
        
               | enriquto wrote:
               | It's the common way to solve a linear system in octave,
               | matlab and julia.
               | 
               | You have an invertible square matrix A, a vector b of the
               | same dimension, and you want to find a vector x such that
               | "A*x=b". Then you write "x=A\b", which is like
               | "x=A^(-1)*b" but does not get to compute the full inverse
               | matrix (which is useless).
        
               | hasmanean wrote:
               | Don't forget APL. I can't say for sure but I imagine this
               | \ operator came from there.
        
               | mbauman wrote:
               | It's not some obscure symbol; it's just division. It just
               | so happens that we typically "divide" matrices from the
               | left when solving equations like this (and matrix
               | "division" isn't commutative) so instead of `a/b` it's
               | `b\a`.
        
               | hasmanean wrote:
               | Yes I know. It's a solve operator...it's equivalent to
               | division only in the infinite precision world.
               | 
               | The \ operator differs from the / operator in that it
               | doesn't compute an inverse ... it solves the system of
               | equations. Solver algorithms are more numerically stable
               | ( in that you're much less likely to have large errors
               | due to wacky input data).
        
               | mbauman wrote:
               | Yes, I know. :)
               | 
               | I'd just say that solving the system of equations is the
               | best way to divide by a matrix -- that's why I put air
               | quotes around "divide" above. In Julia, right-dividing
               | matrices (with `A/B`) actually does the smart adjoint-
               | commuting thing to left-divide it and do the solve (with
               | `(B'\A')'`).
        
               | icegreentea2 wrote:
               | Sorry, yes I know about the syntax. I'm just struggling
               | with what exactly you would be plugging in. Like with
               | respect to any of the example problems given, what would
               | A and x and B be?
        
               | enriquto wrote:
               | x is f in the article
               | 
               | A is the five-point laplacian (a symmetric matrix with
               | five non-zero diagonals), as implemented in the "step"
               | function in the article, let's call it L
               | 
               | b is the datum h
               | 
               | If you set-up the sparse matrix L and the vector b (with
               | the same code that performs the iterations in the
               | article), then you can solve Poisson equation "L*f=h" by
               | doing "f=L\h".
        
               | mdturnerphys wrote:
               | You create matrices that represent the operator. For
               | instance, suppose you had a 1D function and were
               | interested in the evenly spaced points (x1, x2, x3, x4,
               | x5), with the function values at these points being
               | y1       y2       y3       y4       y5
               | 
               | If the differential equation had a first derivative in
               | it, you'd construct something like this, multiplied by
               | some constant (e.g. 1/(2*dx) for an unscaled derivative):
               | ? ? ? ? ?       -1 0 1 0 0       0 -1 0 1 0       0 0 -1
               | 0 1       ? ? ? ? ?
               | 
               | So the derivative at each element is defined by the
               | difference of the next and previous elements. Multiplying
               | the column of function values by this gives you the
               | derivatives. This doesn't work for the first and last
               | element, and in fact you'll usually modify these rows
               | depending on what boundary condition is needed, so I've
               | just left them filled in with "?".
               | 
               | For a solver, you don't know what the y values actually
               | are, so you construct a column that corresponds to the
               | right side of the differential equation. For instance, if
               | the equation was something like the trivial dy/dx = c and
               | you were using the operator above the column would be
               | ?       c       c       c       ?
               | 
               | with the first and last values to be filled in based on
               | the boundary conditions. You then left matrix divide that
               | by the operator matrix (i.e. multiply it by the inverse
               | of the operator matrix). That gives the solution to the
               | equation.
               | 
               | This is just a simple example and in practice the
               | matrices will be larger and more complex.
        
               | ChrisRackauckas wrote:
               | using LinearAlgebra, SparseArrays         N = 10
               | D1 = sparse(Tridiagonal(ones(N-1),-2ones(N),ones(N-1)))
               | Id = sparse(I,N,N)         A = kron(D1,Id) + kron(Id,D1)
               | 
               | You just use the Kronecker product to build the matrix in
               | the different directions. This, along with the
               | relationship to convolutional neural networks, is
               | described in the MIT 18.337 course notes: https://mitmath
               | .github.io/18337/lecture14/pdes_and_convoluti...
        
             | [deleted]
        
             | infogulch wrote:
             | Wow! It seems you have the magical capacity to ingest the
             | reference to an equation and instantly derive an intuition
             | for how it works and what it's useful for. Learning
             | technology this advanced has never been seen before by
             | humankind, I hope you share it with the rest of us!
        
               | burnished wrote:
               | Everything being referenced is stuff you'd learn in a
               | typical technical education as part of either calculus or
               | statistics. Your reply comes off as of defensive in a way
               | that implies that you're shocked some one would know any
               | of this stuff.
        
               | cpp_frog wrote:
               | Numerical solutions of PDE are hardly studied in a
               | typical technical education in calculus (it requires more
               | theoretical machinery) or statistics (PDEs in statistics
               | is somewhat narrow and specialized).
        
               | infogulch wrote:
               | My reply stems from enriquto's misunderstanding of the
               | purpose of the article, which is _the "typical technical
               | education" itself_. It's like they are wondering why the
               | article even exists, and isn't just a one line reference
               | to the julia docs. Clearly there's nothing wrong with
               | already having specific knowledge of a subject, but
               | questioning the purpose of technical education because
               | you already have it is bizarre.
               | 
               | Maybe an analogy would better explain my perspective. I
               | imagine that enriquto would greatly appreciate my latest
               | article, reproduced in its entirety below:
               | 
               | # Learn how to write a JSON parser
               | 
               | > j = JSON.parse("[1,2]")
               | 
               | Fin.
        
               | alisonkisk wrote:
               | Please stop attacking other commenters. instead of
               | attacking (the same person, twice!), try to understand
               | what is being said, or ask questions.
        
               | enriquto wrote:
               | Sorry for the misunderstanding, then. It was not at all
               | my purpose to disparage this article. It is a lovely
               | article and very clearly written and illustrated.
               | 
               | I'll state my point following your json parser example.
               | If you write an article about the implementation of
               | several json parsers, you may still want to call
               | JSON.parse at the end, as a sanity check that your
               | implementation is working. The function is right there
               | and you may as well say that!
               | 
               | In the present case, since the author has already set-up
               | explicitly Poisson equation as a linear system of
               | equations, it would make sense to call julia's built-in
               | solver. (If only to marvel that it is much, much faster
               | than the simple methods shown before, thus it must make
               | some really fancy stuff inside!)
        
               | infogulch wrote:
               | I agree with your point that it may be valuable to the
               | reader to also mention common libraries or built-ins that
               | solve the same problem that was discussed in the article
               | somewhere near the end. More generally, linking to
               | sources, docs, related work, or next steps can be very
               | nice for readers to further their education. Framing your
               | original comments with "the author should also mention...
               | a standard solver like CHOLMOD" or "a standard solver
               | like CHOLMOD ... as a sanity check that your
               | implementation is working" as you described would have
               | had a good chance of preventing our communication misfire
               | and avoiding my (perhaps unnecessarily strong) snark.
        
               | alisonkisk wrote:
               | It's _your_ job to control your snark, not anyone else 's
               | job.
        
         | yngvizzle wrote:
         | While CHOLMOD is great, you cannot always use the Cholesky
         | factorisation when you solve PDEs. For real-world simulations,
         | we often have to solve systems with hundreds of millions, if
         | not billions, of equations and in then case, even a highly
         | optimised direct solver like CHOLMOD fails. The fill-in simply
         | becomes too large.
         | 
         | For these small test cases, however, simply using CHOLMOD (or
         | any other sparse solver) would do the trick perfectly.
        
         | Porygon wrote:
         | Conjugate gradient descent with a multigrid preconditioner also
         | works quite well in my experience, especially for larger
         | systems.
        
       | panic_on_oops wrote:
       | Wonderful post, thank you OP!
        
       | toolslive wrote:
       | I consider Pagerank to be a discrete variation of the poission
       | equation.
        
       | mixedmath wrote:
       | I think this is a beautiful article. There's code, there's math.
       | There are many plotted examples using a variety of different
       | plotting techniques (in total, representing a 2d array as data,
       | or in black/white, or with a terrible 'jet' colormap, or as a 3d
       | terrain.
       | 
       | I very much appreciate this sort of post.
        
         | nickponline wrote:
         | Maybe you'll like these: https://nickp.svbtle.com/ (shameless
         | plug)
        
           | lesquivemeau wrote:
           | Thanks for this
        
       | Jeff_Brown wrote:
       | EDIT: I'm leaving this here to help anyone else who might have
       | been confused by this, which I imagine is likely.
       | 
       | What confused me is that the author is not treating the matrix as
       | a function from vectors to vectors, as is the customary way to
       | treat matrices as functions. Rather, they're using the matrix to
       | represent a sparse, regular sampling of a function from vectors
       | to scalars.
       | 
       | ---
       | 
       | This article makes no sense right off the bat. Here's the first
       | substantive passage:
       | 
       | "[Laplace's Equation means] Find me a function f where every
       | value everywhere is the average of the values around it ... In
       | this post, when we talk about a function f we mean a 2D matrix
       | where each element is some scalar value like temperature or
       | pressure or electric potential ... If it seems weird to call a
       | matrix a function, just remember that all matrices map input
       | coordinates (i,j) to output values f(i,j). Matrices are functions
       | that are just sparsely defined. This particular matrix does
       | satisfy Laplace's equation because each element [of the matrix]
       | is equal to the average of its neighbors."
       | 
       | The values of a function are the outputs it maps its inputs to.
       | The elements of the matrix are neither inputs nor outputs.
        
         | freeone3000 wrote:
         | The matrix _is_ the function. The elements are the outputs. The
         | coordinates are the inputs.
         | 
         | Take, for example, f(x) = x*x. Its matrix would be: f = [0, 1,
         | 4, 9, 16].
        
         | techas wrote:
         | A matrix can be seen as the discrete representation of a
         | function...
        
         | gmmeyer wrote:
         | Poisson's Equation takes another function as an input, the
         | matrix is the representation of the output of said function
        
         | jungturk wrote:
         | Think of the matrix as a precomputed lookup table.
         | 
         | Given the arguments to the function, locate the cell in the
         | matrix and use its value as the result of the function.
        
       ___________________________________________________________________
       (page generated 2021-07-06 23:00 UTC)