[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)