Image:Amoeba4 400.png

From Wikipedia, the free encyclopedia

Wikimedia Commons logo This is a file from the Wikimedia Commons. The description on its description page there is shown below.
Commons is attempting to create a freely licensed media file repository. You can help.

Made by myself with Matlab.

Public domain I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide.

In case this is not legally possible:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.


Afrikaans | Alemannisch | Aragonés | العربية | Български | Català | Česky | Cymraeg | Dansk | Deutsch | Ελληνικά | English | Español | Esperanto | Euskara | فارسی | Français | Galego | 한국어 | हिन्दी | Hrvatski | Ido | Bahasa Indonesia | Íslenska | Italiano | עברית | Kurdî / كوردي | Latina | Lietuvių | Magyar | Bahasa Melayu | Nederlands | Norsk (bokmål) | Norsk (nynorsk) | 日本語 | Polski | Português | Ripoarish | Română | Русский | Shqip | Slovenčina | Slovenščina | Српски | Svenska | ไทย | Türkçe | Українська | Tiếng Việt | | 简体中文 | 繁體中文 | 粵語 | +/-


[edit] Source code


% find the amoeba of the polynomial
% p(z, w)=50 z^3+83 z^2 w+24 z w^2+w^3+392 z^2+414 z w+50 w^2-28 z +59 w-100
% See http://en.wikipedia.org/wiki/Amoeba_(mathematics).

function main()

   figure(3); clf; hold on;
   axis equal; axis off;
   axis([-4.5, 5, -3.5, 6]); 
   fs = 20; set(gca, 'fontsize', fs);
   ii=sqrt(-1);
   tiny = 100*eps;
   
   Ntheta = 500; % for Ntheta=500 the code will run very slowly, but will get a good resolution
   NR=      Ntheta; 

   % R is a vector of numbers, exponentiall distributed
   A=-5; B=5;
   LogR  = linspace(A, B, NR);
   R     = exp(LogR);

   % a vector of angles, uniformly distributed
   Theta = linspace(0, 2*pi, Ntheta);

   degree=3;
   Rho = zeros(1, degree*Ntheta); % Rho will store the absolute values of the roots
   One = ones (1, degree*Ntheta);

   % play around with these numbers to get various amoebas
   b1=1;  c1=1; 
   b2=3;  c2=15;
   b3=20; c3=b3/5; 
   d=-80; e=d/4;
   f=0; g=0;
   h=20; k=30; l=60;
   m=0; n = -10; p=0; q=0;
   
%  Draw the 2D figure as union of horizontal slices and then union of vertical slices.
%  The resulting picture achieves much higher resolution than any of the two individually.
   for type=1:2

          for count_r = 1:NR
                 count_r
                 
                 r = R(count_r);
                 for count_t =1:Ntheta
                        
                        theta = Theta (count_t);

                        if type == 1
                           z=r*exp(ii*theta);

%                         write p(z, w) as a polynomial in w with coefficients polynomials in z 
%                         first comes the coeff of the highest power of w, then of the lower one, etc.
                           Coeffs=[1+m,
                                   c1+c2+c3+b1*z+b2*z+b3*z+k+p*z,
                                   e+g+(c1+b1*z)*(c2+b2*z)+(c1+c2+b1*z+b2*z)*(c3+b3*z)+l*z+q*z^2,
                                   d+f*z+(c3+b3*z)*(e+(c1+b1*z)*(c2+b2*z))+h*z^2+n*z^3];

                        else
%                          write p(z, w) as a polynomial in z with coefficients polynomials in w                
                           w=r*exp(ii*theta);
                           Coeffs=[b1*b2*b3+n,
                                   h+b1*b3*(c2+w)+b2*(b3*(c1+w)+b1*(c3+w))+q*w,
                                   (b2*c1+b1*c2)*c3+b3*(c1*c2+e)+f+(b1*c2+b3*(c1+c2)+b1*c3+b2*(c1+c3)+l)*w+...
                                   (b1+b2+b3)*w^2+p*w^2,
                                   d+c3*(c1*c2+e)+(c1*c2+(c1+c2)*c3+e+g)*w+(c1+c2+c3+k)*w^2+w^3+m*w^3];
                        end
                        
%                       find the roots of the polynomial with given coefficients
                        Roots = roots(Coeffs);
                        
%                       log |root|. Use max() to avoid log 0.
                        Rho((degree*(count_t-1)+1):(degree*count_t))= log (max(abs(Roots), tiny)); 
                 end
                 

%        plot the roots horizontally or vertically
                 if type == 1
                        plot(LogR(count_r)*One, Rho, 'b.');
                 else
                        plot(Rho, LogR(count_r)*One, 'b.');
                 end
                 
          end

   end
   
   saveas(gcf, sprintf('amoeba4_%d.eps', NR), 'psc2');


The following pages on the English Wikipedia link to this file (pages on other projects are not listed):