cKleinhuis
|
|
« on: August 16, 2014, 12:36:58 PM » |
|
hi all, with a friend we are now attempting to formulate 2d and 3d mandelbrot equations in terms of clifford algebra, if anyone has experience in this field let us know, for me it is quite new, but simple clifford algrebras should be able to define a 2d mandelbrot and the mandelbulb should be as well definable in clifford algebra terms the goal is to achieve a huge parameter space for creating nice 3d images
|
|
|
Logged
|
---
divide and conquer - iterate and rule - chaos is No random!
|
|
|
cKleinhuis
|
|
« Reply #1 on: August 16, 2014, 12:37:29 PM » |
|
this is a paper discussing mandelbrot formula 2d using clifford algebras http://arxiv.org/abs/hep-th/9507133
|
|
|
Logged
|
---
divide and conquer - iterate and rule - chaos is No random!
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #2 on: August 16, 2014, 02:46:43 PM » |
|
I've been meaning to play around with generalized complex and see what that looks like. I'd expect like figures 1-4...figures 5 and 6 not though. Humm..... (I only quickly skimmed the paper).
|
|
|
Logged
|
|
|
|
hermann
Iterator
Posts: 181
|
|
« Reply #3 on: August 16, 2014, 05:06:39 PM » |
|
The work of William Kingdon Clifford is based on the work of Hermann Grassmann Clifford Algebra was named by William Kingdon Clifford himself Geometric Algebra. For applications often the name Geometric Algebra is used. Kram1023 started the following excellent thread on geometric algebra here at Fractal Forums: http://www.fractalforums.com/new-theories-and-research/geometric-algebra-geometric-calculus/An excellent introduction on Geometric Algebra can be found in the following paper of Alan Miller http://scholarworks.sjsu.edu/cgi/viewcontent.cgi?article=7943&context=etd_thesesWith Jehovajah we have an excellent expert on the work of Hermann Grassmann. Most of his posts here in fractal forums are on the work of Grassmann. With geometric algebra it is possible to create complex numbers, quarterions and hyper complex numbers. That means complex numbers of higher order. Hermann
|
|
« Last Edit: August 16, 2014, 05:12:40 PM by hermann »
|
Logged
|
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #5 on: August 16, 2014, 07:11:40 PM » |
|
My knowledge is weak, but I'd say that Clifford's work combines even subspaces (complex,quaternions) with odd (vectors) into arbitrary dimensions covering all dimensional subspaces and signatures. And yeah that's a clear as mud. Start the zero dimensions (scalar only). You can extend (a la Grassmann) to 1 and have two sub-spaces: 0,1. Extend to 2, now you have 0,1,2 dimensional subspaces...see Pascal's triangle, etc into arbitrary. Now the number of dimensions isn't equal to the "spatial" dimensions. So 3 spatial dimensions requires at least a 3 dimensional algebra but extra rules can be added to embedded 3D in higher dimensions to make some operations easier. The classic from LA is to be homogenous. Other examples include adding projections to infinitely.
|
|
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #6 on: August 16, 2014, 07:28:12 PM » |
|
But then again it seems like I'm misstating Grassmann as I want to think that in 3D you have a vector/bivector pair....humm...
|
|
|
Logged
|
|
|
|
|
David Makin
|
|
« Reply #8 on: August 16, 2014, 10:37:43 PM » |
|
Just add sub and mul - no inverse/divide....
|
|
|
Logged
|
|
|
|
kram1032
|
|
« Reply #9 on: August 16, 2014, 10:54:00 PM » |
|
Once you have mul, inverse (and by extension divide) is really easy for GAs: Just define the reverse of an algebraic number A=(a0, a1 e1, a2 e2....) rev(A) = to be, equivalently to complex numbers, the same number, except with all values past a0 negative (a0, -a1 e1, -a2 e2....)
then: inv(A) = rev(A)/Mul(A,rev(A)) leftDiv(A,B) = Mul(inv(A),B) rightDiv(A,B)=Mul(B,inv(A))
Another really useful operation in GA should be: Sandwich(A,B) = Mul(Mul(A,B),A) - this is used ALL the TIME. - It encodes a reflection or a rotation or, in a conformal GA setting, a translation, scaling, etc... - In a conformal GA, any conformal transformation can be done with such a Sandwich operation.
|
|
« Last Edit: August 16, 2014, 11:00:00 PM by kram1032 »
|
Logged
|
|
|
|
Refurio Anachro
Forums Newbie
Posts: 1
|
|
« Reply #10 on: August 16, 2014, 10:54:36 PM » |
|
hi all, with a friend we are now attempting to formulate 2d and 3d mandelbrot equations in terms of clifford algebra,
That friend would be me. Hello all indeed! For those curious, i tried to give a starting point into Clifford algebra in a series of 3 posts here: https://plus.google.com/115434895453136495635/posts/1CtiDXou6RqWhen you pick your Clifford algebra such that you get a subspace isomorphic to the complex numbers, the formula should be the same as Mandelbrot's original. if i remember correctly, you get complex multiplication by using the 0- and 2-blades in Cl(2,0). In this context, those are often called unit and counit.
|
|
|
Logged
|
|
|
|
hermann
Iterator
Posts: 181
|
|
« Reply #11 on: August 17, 2014, 07:36:44 AM » |
|
I have now in mind for a while to implement geometric algebra as software. Here is a first sketch of a specification. package Geometric_Algebra is type Base_Type is (scalar, e1, e2, e12); type Multi_Vector is array (Base_Type) of Float; function "+" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; function "-" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; function "*" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; function "*" (Left : Float; Right : Multi_Vector) return Multi_Vector; function "*" (Left : Multi_Vector; Right : Float ) return Multi_Vector; function "/" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; end Geometric_Algebra;
Hermann
|
|
|
Logged
|
|
|
|
Roquen
Iterator
Posts: 180
|
|
« Reply #12 on: August 17, 2014, 08:21:44 AM » |
|
For the standard model of 2D, yeah you can put x into the scalar and y into the bivector and off you go. Another method is to place x and y into the vector and use a rotor to perform the rotation and scaling like I'm doing in the quaternion thread. Spinors are another option. I'd expect all the forms I've shown in 3D have equivalent in 2D as well under Clifford. Algebraic manipulation get you to all of them. Likewise for mandelbulb. Likewise I'd expect that some of the form David Makin is playing with here: http://www.fractalforums.com/programming/true-3d-mandelbrot/I think that clifford is a much more promising avenue then quaternions BTW. WRT: making a software...I'd attempt to avoid that. What features do you want?
|
|
|
Logged
|
|
|
|
hermann
Iterator
Posts: 181
|
|
« Reply #13 on: August 17, 2014, 09:42:04 AM » |
|
I want to come to a generic formulation of geometric algebra. Here is a first sketch: generic type Base_Type is (<>); package Geometric_Algebra_Generic is
type Multi_Vector is array (Base_Type) of Float with Default_Component_Value => 0.0;
Zero : Multi_Vector := (others => 0.0);
type Matrix is array (Base_Type'Range, Base_Type'Range) of Multi_Vector;
function "+" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; function "-" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector;
function "*" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector;
function "*" (Left : Float; Right : Multi_Vector) return Multi_Vector; function "*" (Left : Multi_Vector; Right : Float) return Multi_Vector;
function "/" (Left : Multi_Vector; Right : Multi_Vector) return Multi_Vector; procedure Put_Line (Value : Multi_Vector);
end Geometric_Algebra_Generic;
That allows me to define different dimensional algebras: with Ada.Text_IO; use Ada.Text_IO; with Geometric_Algebra_Generic;
procedure Test_Clifford is
type Base_Type_2D is (scalar, e1, e2, e12); type Base_Type_3D is (scalar, e1, e2, e3, e12, e23, e31, e123); package Geometric_Algebra_2D is new Geometric_Algebra_Generic (Base_Type_2D); use Geometric_Algebra_2D; package Geometric_Algebra_3D is new Geometric_Algebra_Generic (Base_Type_3D); use Geometric_Algebra_3D; Vector_2D_First : Geometric_Algebra_2D.Multi_Vector := ( others => 2.1); Vector_2D_Second : Geometric_Algebra_2D.Multi_Vector := ( others => 2.2); Sum_2D : Geometric_Algebra_2D.Multi_Vector := ( others => 0.0); Vector_3D_First : Geometric_Algebra_3D.Multi_Vector := ( others => 3.1); Vector_3D_Second : Geometric_Algebra_3D.Multi_Vector := ( others => 3.2); Sum_3D : Geometric_Algebra_3D.Multi_Vector := ( others => 0.0); begin Put_Line ("begin Test_Clifford"); Sum_2D := Vector_2D_First + Vector_2D_Second; Put_Line (Sum_2D); New_Line; Sum_3D := Vector_3D_First + Vector_3D_Second; Put_Line (Sum_3D); Put_Line ("end Test_Clifford"); end Test_Clifford;
Producing the following Output: begin Test_Clifford scalar => 4.30000E+00 e1 => 4.30000E+00 e2 => 4.30000E+00 e12 => 4.30000E+00
scalar => 6.30000E+00 e1 => 6.30000E+00 e2 => 6.30000E+00 e3 => 6.30000E+00 e12 => 6.30000E+00 e23 => 6.30000E+00 e31 => 6.30000E+00 e123 => 6.30000E+00 end Test_Clifford
|
|
« Last Edit: August 17, 2014, 09:44:08 AM by hermann »
|
Logged
|
|
|
|
kram1032
|
|
« Reply #14 on: August 17, 2014, 01:39:31 PM » |
|
|
|
|
Logged
|
|
|
|
|