File: math.ss

package info (click to toggle)
drscheme 1%3A352-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 71,608 kB
  • ctags: 55,284
  • sloc: ansic: 278,966; cpp: 63,318; sh: 32,265; lisp: 14,530; asm: 7,327; makefile: 4,846; pascal: 4,363; perl: 2,920; java: 1,632; yacc: 755; lex: 258; sed: 93; xml: 12
file content (42 lines) | stat: -rw-r--r-- 1,440 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
(module math mzscheme

  ; Usefull mathy functions for plots
  
  (require 
   (lib "list.ss")
   (lib "etc.ss")
   (lib "math.ss"))
  
  ; using vectors for n-dimentional points
  
  ; vector-magnitude : (vectorof number) -> number
  ; computes the magnituded of the vector by using pythegorean theorem
  (define (vector-magnitude vec)
    (sqrt (foldl (lambda (item total) (+ (sqr item) total)) 0 (vector->list vec))))
  
  ; shortcuts to avoid writing ugly vector-ref code
  (define (vector-x vec)
    (vector-ref vec 0))
  
  (define (vector-y vec)
    (vector-ref vec 1))
  
  (define (vector-z vec)
    (vector-ref vec 2))
          
  ;  make-vec : (number number -> number) (number number -> number) -> (vector -> vector)
  (define (make-vec func1 func2)
    (lambda (point) (vector (func1 (vector-x point) (vector-y point)) (func2 (vector-x point) (vector-y point)))))
  
  ; derivative : (number -> number) [number] -> (number -> number)
  (define derivative
    (opt-lambda (func [h .00000001])
      (lambda (x) (/ (- (func (+ x h)) (func x)) h))))
  
  ; gradient : (number number -> number) [number] -> (vector -> vector)
  (define gradient
    (opt-lambda (func-3d [h .00000001])
      (lambda (point) (vector ((derivative (lambda (x) (func-3d x (vector-y point))) h) (vector-x point))
                              ((derivative (lambda (y) (func-3d (vector-x point) y)) h) (vector-y point))))))
  
  (provide (all-defined)))