Image:Amoeba4 400.png
From Wikipedia, the free encyclopedia
Size of this preview: 593 × 600 pixel
Image in higher resolution (1896 × 1917 pixel, file size: 263 KB, MIME type: image/png)
This is a file from the Wikimedia Commons. The description on its description page there is shown below. | |
Made by myself with Matlab.
I, the copyright holder of this work, hereby release it into the public domain. This applies worldwide. In case this is not legally possible: 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 | Walon | 简体中文 | 繁體中文 | 粵語 | +/- |
[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');