ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Image:Graph of sliding derivative line.gif - Wikipedia, the free encyclopedia

Image:Graph of sliding derivative line.gif

From Wikipedia, the free encyclopedia

[edit] Summary

Description Boulder, Colorado

Graph of sliding derivative line

Source

self-made

Date

February 19, 2008

Author

dino (talk)

Permission
(Reusing this image)

See below.

[edit] Licensing

I made this with SAGE, an open-source math package, and release it to the world.

A version of the source code lives at this link.

A wikipedian asked, so the SAGE source code I used to generate the image follows, verbose documentation and all.

Below. The current image has different constants than the original code I posted,

number_of_plot_points = 50

and

figure_size = 2.5

Anyone wishing to use/modify/shoot at this source code is free to:

#*****************************************************************************
#       Copyright (C) 2008 Dean Moore < deanlorenmoore@gmail.com >,
#                                         < dino@boulder.net >
#
#  Distributed under the terms of the GNU General Public License (GPL)
#                  http://www.gnu.org/licenses/
#*****************************************************************************
 
#################################################################################
#                                                                               #
# What this program does, needed input, boilerplate info & disclaimers:         #
#                                                                               #
# This program was written for the mathematical package SAGE (by implication,   #
# using the Python programming language), and animates a sliding derivative     #
# line to a given one-variable single-valued function, defined as *f* (below).  #
#                                                                               #
# A picture paints a thousand words, and it's best to look at some sample       #
# output.  In short, it's an animated illustration of a standard Calc I         #
# concept.                                                                      #
#                                                                               #
# Once function *f* is defined, parameters *a* and *b* define the top & bottom  #
# x-values, as the interval [a, b].  The program is designed to churn without   #
# further input, doing all needed calculations after definition of the          #
# function & interval; the user may wish to vary a few other parameters as:     #
#                                                                               #
# The number of frames in the final "movie," the length, thickness & color of   #
# the function's curve, the length, thickness & color of the tangent line, and  #
# a few others (below documentation).                                           #
#                                                                               #
# Caveat: don't use unbounded functions, e.g., f(x) = 1/x on (0,1].  No         #
# functions with unbounded first derivatives, e.g., f(x) = x^(1/3) about x = 0. #
#                                                                               #
# Doubtless there are other ways to break the code of which I have not          #
# thought.  If the user finds it amusing, fine with me.                         #
#                                                                               #
# User-input material:                                                          #
#                                                                               #
# f: The function.  No unbounded functions; no unbounded first derivatives.     #
#                                                                               #
# a: lower x-bound.                                                             #
# b: upper x-bound.                                                             #
#                                                                               #
# number_of_plot_points: Number of frames in final "movie."                     #
#                                                                               #
# thickness_of_curve: Thickness of function's curve.                            #
# color_of_curve:     By name.                                                  #
#                                                                               #
# length_of_deriv_line: Length of line that slides along, always tangent to     #
#                       the function *f*; its slope always the derivative of    #
#                       *f* at point of tangency.                               #
# thickness_deriv_line: Thickness of derivative line.                           #
# color_of_deriv_line:  By name.                                                #
#                                                                               #
# sliding_point_size:     By name, how big is the tracing point  See output.    #
# color_of_sliding_point: A point traces the curve; this is its color.          #
#                                                                               #
# figure_size: Regulates size of final image.                                   #
#                                                                               #                                                                               
# delay_between_frames: Delay between frames of final "movie."                  #
#                                                                               #
# The code isn't that error-checking, assuming certain numbers positive,        #
# assuming b > a, assuming *f* "nice" with a "nice" derivative.  The program    #
# isn't designed to be idiot-proof.                                             #
#                                                                               #
#################################################################################
 
#################################################################################
#                                                                               #
# Why did I write it?  A challenge to learn more, to do it in SAGE.  I looked   #
# at < http://en.wikipedia.org/wiki/Derivative > & thought, "Gee, maybe some    #
# more lively images.  It's 2008."                                              #
#                                                                               #
# The code's not perfect.  The sliding line runs faster where the curve is      #
# steep, and kind of slow where it's flat.  This is an unavoidable consequence  #
# of breaking interval [a, b] into equal subintervals.  I can scope in my head  #
# one way to make the sliding line run at a somewhat consistent rate, but it    #
# would be CPU-intensive & bothersome.                                          #
#                                                                               #
# Written by Dean Moore, February, 2008.                                        #
#                                                                               #
#################################################################################
 
# User-defined material:
 
f = x*sin(x^2) # The function.
 
a = -1 # Bottom x-value
b =  3 # Top x-value
 
number_of_plot_points = 125 # Number of points at which the function & derivative
                            # are sampled: the more, the smoother runs the final
                            # "movie" -- and the slower the program runs, the
                            # slower the "movie" & the more bytes to the image.
 
thickness_of_curve = 0.75      # Thickness of function's curve.
color_of_curve     = (0, 0, 1) # By name.
 
length_of_deriv_line = 3         # Length of "sliding" derivative line.
thickness_deriv_line = 1         # Thickness of derivative line.
color_of_deriv_line  = (1, 0, 0) # By name.
 
sliding_point_size     = 20        # By name; how big is the tracing point.
color_of_sliding_point = (0, 0, 0) # A point traces the curve; this is its color.
  
figure_size = 4 # Regulates size of final picture. The bigger, the
                # more bytes / image, and the slower it runs.
 
delay_between_frames = 0 # Time between "frames" of final "movie."
 
# End user-defined material.
 
# The rest of the program churns without user input.  The disinterested user
# may safely ignore the rest, unless s/he wishes to modify the code -- or I
# made some error I didn't catch.
 
# Top matter, no nice way to classify.  Stuff that needs done:
 
v = [] # This will hold graphic image of function's curve.
 
length_of_deriv_line /= 2 # We draw half below, half
                          # above.  User doesn't need to know this. 
 
# We use the same loop several times, from bottom of interval at *a* to
# to top at *b* by an obvious step; put the range in a parameter.  Note
# we include the endpoint:
 
loop_range = srange(a, b + (b - a)/number_of_plot_points, (b - a)/number_of_plot_points) # Done with this.
 
# We use each function value three times; place them
# in a dictionary for efficiency.
 
function_values = {} # Blank dictionary to hold function values.
for i in loop_range:
   function_values[i] = f(i) # Done filling dictionary.
 
f_prime = f.derivative()  # Derivative of function *f* (above).
 
def deriv_line(x0,x):                                # A function of two variables:
   return f_prime(x0)*x + ( f(x0) - f_prime(x0)*x0 ) # Draws a line through (x0, f(x0)),
                                                     # slope (df/dx)(x0).  The derivative
                                                     # and function are evaluated at
                                                     # "fixed" *x0*; the "real" independent
                                                     # variable is *x*. Parens are only
                                                     # for clarity, y = mx + b form.  
# End top matter.
 
# The next code is more involved.  We need to make a sliding derivative
# line of constant length.  While experimenting I tried from, say, one
# below & one above on the x-axis, and it looked awful.
 
# Define four dictionaries that will hold coordinates of line segments:
  
bottom_x_points = {}
bottom_y_points = {}
top_x_points    = {}
top_y_points    = {}
 
# Next loop populates the dictionaries with coordinates of line segments of
# constant length *length_of_deriv_line* (well, its original value, twice
# its current value):
 
for i in loop_range:
    theta = RDF(arctan(f_prime(i)))             # Angle of derivative line.
                                                # Use trig & basic calc
                                                # to verify next block:
    c = RDF(cos(theta))      # Both of these are
    s = RDF(sin(theta))      # used twice, never
                              # outside this block.
# Note sign patterns in next:
 
    bottom_x_points[i] = i                  - length_of_deriv_line*c # Bottom x-value of deriv line
    bottom_y_points[i] = function_values[i] - length_of_deriv_line*s # Bottom y-value of deriv line.
 
    top_x_points[i]    = i                  + length_of_deriv_line*c # Top x-value of deriv line
    top_y_points[i]    = function_values[i] + length_of_deriv_line*s # Top y-value of deriv line.
 
# Done computing line segments that comprise the sliding derivative line.
 
# We find max & min x-values for the graph, so the display looks nice:
 
max_x_val = max(max(top_x_points.values()), max(bottom_x_points.values())) # Not perfect, but if parameter
min_x_val = min(min(top_x_points.values()), min(bottom_x_points.values())) # *number_of_plot_points* is large
                                                                           # enough for a fairly fine "mesh,"
                                                                           # good enough.
# We find max & min y-values for graph:
 
max_y_val = max(max(top_y_points.values()), max(bottom_y_points.values())) # See above documentation of
min_y_val = min(min(top_y_points.values()), min(bottom_y_points.values())) # *max_x_val* & *min_x_val*.
 
# Graph the sliding derivative line:
 
sliding_deriv_line = animate(line([(bottom_x_points[i], bottom_y_points[i]),
                                   (top_x_points[i], top_y_points[i]
                                 )],
                                    thickness = thickness_deriv_line,
                                    rgbcolor = color_of_deriv_line)
                                    for i in loop_range
                            )
 
# Graph the point that slides along the graph.
 
sliding_points      = animate([point((i,function_values[i]),
                               rgbcolor = color_of_sliding_point, 
                               pointsize = sliding_point_size)
                               for i in loop_range
                              ],
                               xmin = min_x_val, ymin = min_y_val,
                               xmax = max_x_val, ymax = max_y_val,
                               figsize = [figure_size,figure_size]
                             )
# Of note on next: when I first did the graph, it was "wiggly."  This
# led to a note to sage-support, which led to a ticket, which someone
# fixed (thanks!), but the fix won't come out until the next version
# of SAGE.  So for this code I use a work-around.  

# Animate the graph: 
 
graph = (plot(f, [a, b], thickness = thickness_of_curve,
                            rgbcolor = color_of_curve))
for i in loop_range:
   v.append(graph) # End of i-loop.
 
curve = animate(v) # Must be done.
 
# Now show the final "movie":
 
(curve + sliding_points + sliding_deriv_line).show(delay = delay_between_frames)
 
# Done with program. 

--- Done source code.

File history

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

Date/TimeDimensionsUserComment
current03:40, 22 February 2008250×250 (202 KB)Oleg Alexandrov (Talk | contribs) (Reverted to version as of 02:46, 22 February 2008, my image is bigger than this)
03:37, 22 February 2008174×200 (294 KB)Oleg Alexandrov (Talk | contribs) (Crop a bit)
02:46, 22 February 2008250×250 (202 KB)Dino (Talk | contribs) (Fewer bytes, about 208 kb)
01:41, 21 February 2008500×500 (842 KB)Dino (Talk | contribs) (Got rid of "wiggling"; thanks to some person on sage-support for fixing this ticket; I did a work-around.)
17:16, 20 February 2008400×400 (550 KB)Dino (Talk | contribs)
02:32, 20 February 2008400×400 (547 KB)Dino (Talk | contribs) ({{Information |Description=Graph of sliding derivative line |Source=self-made |Date=February 19, 2008 |Location=Boulder, Colorado |Author=~~~ |other_versions= }})

The following files are duplicates of this file:

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


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -