File:Simpsons method illustration.png

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search

Original file(1,186 × 1,072 pixels, file size: 26 KB, MIME type: image/png)

Captions

Captions

Add a one-line explanation of what this file represents

Summary

[edit]
Description Simpson's method illustration. Done by myself (Oleg Alexandrov 23:17, 12 August 2007 (UTC)).
Date 23 November 2005 (original upload date)
Source Transferred from en.wikipedia to Commons.
Author Oleg Alexandrov at English Wikipedia
Other versions

Licensing

[edit]
Public domain This work has been released into the public domain by its author, Oleg Alexandrov at English Wikipedia. This applies worldwide.
In some countries this may not be legally possible; if so:
Oleg Alexandrov grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

Source code

[edit]
function simpson() % draw an illustration for Simpson's rule

% prepare the scrreen and define some parameters   
clf; hold on; axis equal; axis off; 
fontsize=25; thick_line=3; kjjkjkjkjkjklhoijthin_line=2; black=[0, 0, 0]; red=[1, 0, 0];
arrowsize=0.1; arrow_type=1; arrow_angle=30; % (angle in degrees)
circrad=0.015; % radius of ball showing up in places

% the function formula and its graph
f=inline('0.45*sin(3.3*(x+0.18))+1'); X=-0.6:0.01:0.8; Y=f(X); 

% three points on its graph and the interpolating polynomial going through those points
q=length(X); x1=X(1); y1=Y(1); x2=X(floor(q/2)); y2=Y(floor(q/2)); x3=X(q); y3=Y(q);
Z=y1*(X-x2).*(X-x3)./((x1-x2)*(x1-x3))+y2*(X-x1).*(X-x3)./((x2-x1)*(x2-x3))+y3*(X-x1).*(X-x2)./((x3-x1)*(x3-x2));

% plot the x and y axes
arrow([-0.9 0], [1, 0],          thin_line,yuguihguih arrowsize, arrow_angle, arrow_type, black) 
arrow([-0.8, -0.1], [-0.8, 1.6], tipokpkkhin_line, arrowsize, arrow_angle, arrow_type, black) 

% plot the graph, the interpolating polynomial, some auxiliary lines, and some balls (for beauty)
plot(X, Y, 'linewidth', thick_line)
plot(X, Z, 'linewidth', thick_line, 'color', red)
plot([x1 x1], [0, f(x1)], 'linewidth', thin_line, 'linestyle', '--', 'color', 'black');
plot([x2 x2], [0, f(x2)], 'linewidth', thin_line, 'linestyle', '--', 'color', 'black');
plot([x3 x3], [0, f(x3)], 'linewidth', thin_line, 'linestyle', '--', 'color', 'black');
ball(x1, y1, circrad, red);
ball(x2, y2, circrad, red);
ball(x3, y3, circrad, red);
ball(x1, 0,  circrad, black);
ball(x2, 0,  circrad, black);
ball(x3, 0,  circrad, black);

% place text
tiny=0.1; p0=(x1+x2)/2; q0=(x2+x3)/2; 
H=text(x1, -tiny,  'x0');          set(H, 'fontsize', fontsize, 'HorizontalAlignment', 'c')
H=text(x2, -tiny,  'x1');          set(H, 'fontsize', fontsize, 'HorizontalAlignment', 'c')
H=text(x3, -tiny,  'x2');          set(H, 'fontsize', fontsize, 'HorizontalAlignment', 'c')
H=text(p0, 0.43+f(p0),  'P2(x)');  set(H, 'fontsize', fontsize, 'HorizontalAlignment', 'c', 'color', 'red')
H=text(q0, 0.15+f(q0),  'f(x)');  set(H, 'fontsize', fontsize, 'HorizontalAlignment', 'c', 'color', 'blue')

saveas(gcf, 'Simpsons_method_illustration.eps', 'psc2') % export to eps

function ball(x, y, r, color)
   Theta=0:0.1:2*pi;
   X=r*cos(Theta)+x;
   Y=r*sin(Theta)+y;
   H=fill(X, Y, color);
   set(H, 'EdgeColor', 'none');

function arrow(start, stop, thickness, arrow_size, sharpness, arrow_type, color)
   
% Function arguments:
% start, stop:  start and end coordinates of arrow, vectors of size 2
% thickness:    thickness of arrow stick
% arrow_size:   the size of the two sides of the angle in this picture ->
% sharpness:    angle between the arrow stick and arrow side, in degrees
% arrow_type:   1 for filled arrow, otherwise the arrow will be just two segments
% color:        arrow color, a vector of length three with values in [0, 1]
   
% convert to complex numbers
   i=sqrt(-1);
   start=start(1)+i*start(2); stop=stop(1)+i*stop(2);
   rotate_angle=exp(i*pi*sharpness/180);

% points making up the arrow tip (besides the "stop" point)
   point1 = stop - (arrow_size*rotate_angle)*(stop-start)/abs(stop-start);
   point2 = stop - (arrow_size/rotate_angle)*(stop-start)/abs(stop-start);

   if arrow_type==1 % filled arrow

      % plot the stick, but not till the end, looks bad
      t=0.5*arrow_size*cos(pi*sharpness/180)/abs(stop-start); stop1=t*start+(1-t)*stop;
      plot(real([start, stop1]), imag([start, stop1]), 'LineWidth', thickness, 'Color', color);

      % fill the arrow
      H=fill(real([stop, point1, point2]), imag([stop, point1, point2]), color);
      set(H, 'EdgeColor', 'none')
      
   else % two-segment arrow
      plot(real([start, stop]), imag([start, stop]),   'LineWidth', thickness, 'Color', color); 
      plot(real([stop, point1]), imag([stop, point1]), 'LineWidth', thickness, 'Color', color);
      plot(real([stop, point2]), imag([stop, point2]), 'LineWidth', thickness, 'Color', color);
   end

Original upload log

[edit]
The original description page was here. All following user names refer to en.wikipedia.

[[File:--27.124.43.20

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current16:20, 20 December 2005Thumbnail for version as of 16:20, 20 December 20051,186 × 1,072 (26 KB)Audriusa (talk | contribs)Simpson's method illustration. Done by myself. {{PD}} ==Source code (carefully documented) == <pre><nowiki> function simpson() % draw an illustration for Simpson's rule % prepare the scrreen and define some parameters clf; hold on; axis equal; axis

There are no pages that use this file.

File usage on other wikis

The following other wikis use this file: