Neat, but I think it's deceptive for the website to claim this is a "new type of graphing" [1]. The fuzzy graph of F(x, y) = 0 is simply a 3D plot of z = |F(x, y)|, where z is displayed using color. In other words, F(x, y) is a constraint and z shows us how strongly the constraint is violated. Then the graph given by F(x, y) = 0 is a slice of the 3D graph. If you're claiming that you've discovered visualizing 3D graphs using color, you're about 50 years too late.
Dropping the absolute value makes a better visualization. The 3D graph for Example 4 Shadow Line has an established name, a hyperbolic paraboloid. The color graph for Example 5 Phi Equation doesn't capture the odd symmetry F(x,y)=-F(-x,y). The color graph for Example 6 Underwater Islands looks far inferior to the 3D surface.
Thanks for the feedback (you and all the others - both positive and negative). HN is such a great way to present ideas to smart people.
I may have been a little hyperbolic in the opening sentence, and may try to tighten up that language. It's true that I've encountered things like visualizing error gradients (in the ML space) in a non-binary way. And yes, mapping 3D to color (and 3D graphing) is nothing novel.
But, I think that the idea of visualizing equations using the question "How different are both sides?" instead of "Are both sides EXACTLY equal - Yes or No?" is a new way to think about it - I don't know of any other graphing app/calculator (besides https://fuzzygraph.com) that does it.
I think some would say that the "Fuzzy graph" of an equation is not a true graph of that equation because a "visualization transform" is being applied, and that only the conventional/binary graph is a valid graph of the equation. But even conventional graphing apps must apply a "visualization transformation" to the equation - something like: 'black' if Boolean(left(x, y)==right(x, y)) else 'white.
Yeah, the opening sentence is very easy to disprove. That's going to spark distrust among people who are "more mathy."
Otherwise ... the plot is obviously engaging, based on the discussion here. For people who haven't seen it before, it's a new way to think about it. It may well be a new "plot type" to most people relying on standard plotting software to visualize equations.
Maybe consider saying it's grounded in "more advanced" math than what others have brought to plotting software. That's still impressive, but it can be made pretty much true. You can cite cool math references about "implicit function theorem" or whatever. Stuff that your target audience really weren't going to just find on their own.
I think your comment is insightful, but it's also a terrible choice of words (and something we probably do too often here). I very much doubt that deception was the intent.
Sometimes, someone just reinvents the wheel (or improves on it). And if it serves to teach several thousand people about a new visualization technique, I think that's a net positive.
You are right but the author's first claim jumped to my eyes (I practice geometry) and burned them... The author seems to be just plotting the values of the implicit function y-f(x,y)...
So, good for him but some historical perspective is needed when making such sweeping claims.
“For all the history of computational mathematical visualization, graphing equations has been done in binary mode...”
Intentional or not, the linked article opens with a comically untrue statement, that, because it is verifiably false, doesn't even escape as puffery. When I encounter this sort of grandstanding in framing (generally from junior engineers or fresh-from-school product managers), I spell out just how negatively such misstatements harm the point being made.
It's a turn-off for readers, and it's unnecessary.
"You may be used to seeing graphs like..."
or
"In grade school, we learned to graph like..."
would probably be more useful than dismissal of the history of visualization of implicit functions. Hopefully, next time, the author will be a bit less grandiose.
There are some truths though that are worth showing.
1. plotting in this way shows areas that are nearly solutions which is really cool.
2. Not mentioned, but this shows gradient around the solution as well, which helps understand attractor/repulsor a bit intuitively
I mean I have generated these plots before to visualize things like error or sensitivity, but this is clean and very cool. So, credit where credit is due for spreading the idea.
I'm wondering if there are topological tools to find the hyperplane of self-intersection from that surface, which is actually the solution of the equation?
Or if given a fuzzy graph z=|F(x,y)| we can use differential geometry to find 0=F(x,y)? Does any of the these questions make sense?
For a general function F, finding the points (x, y) with F(x, y) = 0 has no closed-form solution. The entire field of mathematical optimization is largely dedicated to finding solutions to F(x, y) = 0, in one form or another.
When F has a special structure (say, low-order polynomial), we can actually find the exact solutions. More general structure (e.g. convexity, differentiability) doesn't give us the exact solution, but it lets use use clever numerical algorithms to find them. There are techniques we can use when F has little to no structure, known as "black box" methods, and they work particularly well when we have few variables. In the case of "fuzzy graphs", there are only two variables, so this software takes the approach of computing F(x, y) for every pixel on the screen. In general this doesn't work due to the curse of dimensionality, but it creates good visualizations in low dimensions :)
To answer your question directly, yes we can use differential geometry to speed up optimization. As an example, you've probably heard of gradient descent. Preconditioned gradient descent leverages the geometry of the surface to speed up convergence. In the language of differential geometry, if we're optimizing f(x), then x is "contravariant" but grad(f) is "covariant", so technically we can't just add grad(f) to x since they have different types. We first have to multiply grad(f) by a rank-2 tensor (the "preconditioner") that encodes the local curvature of f around x. This technique is used by the Adam optimizer, with the assumption that the preconditioner is diagonal.
From school you are used to think of function in their explicit form y = f(x) but you can easily turn that into the implicit form f(x) - y = 0 or more generally f(x, y) = 0. With that you can plot the graph of f(x, y) either as a 3D surface with f(x, y) being the height at point (x, y) or encode the function value at (x, y) into some color at (x, y). Where that surface is equal to zero, i.e. where it intersects the z = 0 plane, that are the points of y = f(x). Points (x, y) at which the value of f(x, y) has small non-zero magnitude are what the article calls low error points or regions, points or regions that almost satisfy y = f(x).
f(x, y) = 0 is true only for some combinations of x and y. It’s an equation to be solved, not a universal statement like ∀ x, y : f(x, y) = 0, nor a definition like f(x, y) ≔ 0 (or “≝”). The solutions to the equation are the points (x, y) where the graph has height 0. Which points these are depends on how f is defined.
For example, f might be defined as f(x, y) ≔ x² + y² – 1. Then the points (x, y) for which f(x, y) = 0 are those on the unit circle (those for which x² + y² = 1). The graph will have height 0 only for those points.
They're really two different types of equal signs.
f(x,y) = x+y might be better written as f(x,y) := x+y where := means "is defined as". Then f(x,y) = 0 is an equation that expands to x+y = 0, or in familiar intro algebra form, y=-x.
When we say "f(x, y) = 0" in this context, we also usually have a separate definition for f(x, y) provided, where that f(x, y) is not necessarily 0 at for all x,y. And so this constraint "f(x, y) = 0" means "find pairs of x and y such that it makes f(x, y) become 0".
If "f(x, y) = 0" is actually the definition of f(x, y), then yes, it would be a pretty boring graph.
Shameless plug: eight years ago, I created the following website for posting plots of complex functions using similar gradients: https://kettenreihen.wordpress.com/
Those are really cool to look at. I kept trying to click them to learn more, I wish some of them were mini blog posts to give a little bit of grounding.
Ouch, this hurts to read. It's not novel and lacks a very basic understanding of math.
The graph of y/(x^2+y^2)=(x+1)/(x^2+y^2) by definition contains the points that satisfy this equation. This is exactly the set of points for which y = x + 1.
The "fuzzy" graph is just coloring the difference between the left hand side and right hand side. This is very basic, not new, and it's definitely not "the graph of y/(x^2+y^2)=(x+1)/(x^2+y^2)".
Why would you say it's not a graph of y/(x^2+y^2)=(x+1)/(x^2+y^2)? I would argue that a conventional/binary graph is also not a "pure" representation of the equation, but rather one possible representation - one that runs it through a "left_side == right_side?" boolean filter. In fact, there is no way to visualize an equation with doing something to it.
There's an equal sign in the equation. That means it is true when y = x + 1. There's no filter we're applying, that's literally what the equation says. What you plot is f(x,y) = (y-x-1)/(x^2+y^2). The line plot is when that equals zero, the fuzzinss of it is when it doesnt. But notice that f(x,y)=0 is exactly equivalent to y=x+1. They're exactly the same. Thus, when you're plotting the fuzzy graph it is definitively _not_ a plot of y=x+1, it's a plot of z=(y-x-1)/(x^2+y^2) and those are not the same thing.
We'd only need to "apply a filter" to get the line graph if we started with z(x,y), but that's not what you wrote
I think the parent basically sensed that you're not a trained mathematician and is trying to throw their middle-school math textbook at you.
The simplest definition of a "graph of a function" is that it's a representation of the points satisfying some underlying equality. Your plot isn't that. A more conventional name would be a heatmap: a plot of a function that takes two parameters - x and y coordinates - and then assigns a third value (color) to each.
I don't think the distinction is all that interesting. They're both function plots.
The "graph" of a function is formally defined as exactly those points that make the equation true. https://en.wikipedia.org/wiki/Graph_of_a_function Granted, the graph is only one visualization of a function, and not the only valuable one.
Of course we also have to remember that functions are not the same as equations, and a given function, or more generally relation, can be represented by multiple different equations. For a trivial example, multiply both sides of your slashdot equation by a constant, or add x*y.
It's the heat map of the error surface of the equation... Fairly well understood as a concept in the land of optimization and gradient descent.
Interesting, what's being visualized there is actually a failure mode for an unidentifiable equation - the valley where the error is zero and therefore all solutions are acceptable. Introduce noise into the measurements of error and that valley being too flat causes odd behaviour
This is brilliant and oddly obvious in hindsight. Measured valuable almost always have noise, and equations rarely solve to true zero. Setting a small delta is common practice, but these graphs show that some equations may have odd behaviour when you do that.
Taking it a step further, how would simple algorithms behave when viewed in this way? Rather that just the outcome, we could observe a possibility space...
Michael Levin has talked about interesting dynamics with the bubble sort algorithm, which is only a few lines of code, that have parallels in biological processes, suggesting there is a more nuanced logic to nature that we are not seeing
Isn’t that just done in a higher level language, tweaking the algorithm to allow duplicates, and then being surprised there is clustering?
I mean, I don’t see why that is special? Correct me if I’m wrong. I like his research and views on biological electric spaces, but this I did not understand.
This is cool to look at, but isn't this just obtained by taking the absolute value of the first equation minus the second? These are very pretty visualizations—but trying to present them as some kind of "sea change" in perspective feels unhelpful.
[1] https://gods.art/fuzzy_graphs.html
https://www.desmos.com/3d/3divdux6jh
Dropping the absolute value makes a better visualization. The 3D graph for Example 4 Shadow Line has an established name, a hyperbolic paraboloid. The color graph for Example 5 Phi Equation doesn't capture the odd symmetry F(x,y)=-F(-x,y). The color graph for Example 6 Underwater Islands looks far inferior to the 3D surface.
Deleted Comment
I may have been a little hyperbolic in the opening sentence, and may try to tighten up that language. It's true that I've encountered things like visualizing error gradients (in the ML space) in a non-binary way. And yes, mapping 3D to color (and 3D graphing) is nothing novel.
But, I think that the idea of visualizing equations using the question "How different are both sides?" instead of "Are both sides EXACTLY equal - Yes or No?" is a new way to think about it - I don't know of any other graphing app/calculator (besides https://fuzzygraph.com) that does it.
I think some would say that the "Fuzzy graph" of an equation is not a true graph of that equation because a "visualization transform" is being applied, and that only the conventional/binary graph is a valid graph of the equation. But even conventional graphing apps must apply a "visualization transformation" to the equation - something like: 'black' if Boolean(left(x, y)==right(x, y)) else 'white.
Otherwise ... the plot is obviously engaging, based on the discussion here. For people who haven't seen it before, it's a new way to think about it. It may well be a new "plot type" to most people relying on standard plotting software to visualize equations.
Maybe consider saying it's grounded in "more advanced" math than what others have brought to plotting software. That's still impressive, but it can be made pretty much true. You can cite cool math references about "implicit function theorem" or whatever. Stuff that your target audience really weren't going to just find on their own.
I think your comment is insightful, but it's also a terrible choice of words (and something we probably do too often here). I very much doubt that deception was the intent.
Sometimes, someone just reinvents the wheel (or improves on it). And if it serves to teach several thousand people about a new visualization technique, I think that's a net positive.
So, good for him but some historical perspective is needed when making such sweeping claims.
Intentional or not, the linked article opens with a comically untrue statement, that, because it is verifiably false, doesn't even escape as puffery. When I encounter this sort of grandstanding in framing (generally from junior engineers or fresh-from-school product managers), I spell out just how negatively such misstatements harm the point being made.
It's a turn-off for readers, and it's unnecessary.
"You may be used to seeing graphs like..." or "In grade school, we learned to graph like..."
would probably be more useful than dismissal of the history of visualization of implicit functions. Hopefully, next time, the author will be a bit less grandiose.
Deleted Comment
https://c3d.libretexts.org/CalcPlot3D/index.html
https://www.desmos.com/3d
1. plotting in this way shows areas that are nearly solutions which is really cool.
2. Not mentioned, but this shows gradient around the solution as well, which helps understand attractor/repulsor a bit intuitively
I mean I have generated these plots before to visualize things like error or sensitivity, but this is clean and very cool. So, credit where credit is due for spreading the idea.
When F has a special structure (say, low-order polynomial), we can actually find the exact solutions. More general structure (e.g. convexity, differentiability) doesn't give us the exact solution, but it lets use use clever numerical algorithms to find them. There are techniques we can use when F has little to no structure, known as "black box" methods, and they work particularly well when we have few variables. In the case of "fuzzy graphs", there are only two variables, so this software takes the approach of computing F(x, y) for every pixel on the screen. In general this doesn't work due to the curse of dimensionality, but it creates good visualizations in low dimensions :)
To answer your question directly, yes we can use differential geometry to speed up optimization. As an example, you've probably heard of gradient descent. Preconditioned gradient descent leverages the geometry of the surface to speed up convergence. In the language of differential geometry, if we're optimizing f(x), then x is "contravariant" but grad(f) is "covariant", so technically we can't just add grad(f) to x since they have different types. We first have to multiply grad(f) by a rank-2 tensor (the "preconditioner") that encodes the local curvature of f around x. This technique is used by the Adam optimizer, with the assumption that the preconditioner is diagonal.
If f(x, y) = 0, wouldn’t using f(x, y) for the height just result in a flat graph?
For example, f might be defined as f(x, y) ≔ x² + y² – 1. Then the points (x, y) for which f(x, y) = 0 are those on the unit circle (those for which x² + y² = 1). The graph will have height 0 only for those points.
f(x,y) = x+y might be better written as f(x,y) := x+y where := means "is defined as". Then f(x,y) = 0 is an equation that expands to x+y = 0, or in familiar intro algebra form, y=-x.
g(x,y) := 0 really is a flat plane.
If "f(x, y) = 0" is actually the definition of f(x, y), then yes, it would be a pretty boring graph.
The graph of y/(x^2+y^2)=(x+1)/(x^2+y^2) by definition contains the points that satisfy this equation. This is exactly the set of points for which y = x + 1.
The "fuzzy" graph is just coloring the difference between the left hand side and right hand side. This is very basic, not new, and it's definitely not "the graph of y/(x^2+y^2)=(x+1)/(x^2+y^2)".
But then I realised they're just plotting
y/(x^2+y^2) - (x+1)/(x^2+y^2) = c
and colouring by c (i.e. a heatmap, as others have mentioned in the thread).
That's why you get a more interesting image than you'd get with y - (x + 1) = c
We'd only need to "apply a filter" to get the line graph if we started with z(x,y), but that's not what you wrote
The simplest definition of a "graph of a function" is that it's a representation of the points satisfying some underlying equality. Your plot isn't that. A more conventional name would be a heatmap: a plot of a function that takes two parameters - x and y coordinates - and then assigns a third value (color) to each.
I don't think the distinction is all that interesting. They're both function plots.
Of course we also have to remember that functions are not the same as equations, and a given function, or more generally relation, can be represented by multiple different equations. For a trivial example, multiply both sides of your slashdot equation by a constant, or add x*y.
Interesting, what's being visualized there is actually a failure mode for an unidentifiable equation - the valley where the error is zero and therefore all solutions are acceptable. Introduce noise into the measurements of error and that valley being too flat causes odd behaviour
Michael Levin has talked about interesting dynamics with the bubble sort algorithm, which is only a few lines of code, that have parallels in biological processes, suggesting there is a more nuanced logic to nature that we are not seeing
I mean, I don’t see why that is special? Correct me if I’m wrong. I like his research and views on biological electric spaces, but this I did not understand.
https://web.archive.org/web/20120208174423/https://maa.org/p...
https://observablehq.com/@rreusser/complex-function-plotter