Funktioiden piirtäminen kuvaajiksi

Vaatii Intermediate Student-kielen.

Vaatii Ehtolauseet ja boolean-logiikka, Listat ja rekursio, Funktion sisäiset määritelmät.

Tehtävä vielä

Ensin animoimaton versio

Tehtävä vielä

Sopivan step-sizen etsintä

(require 2htdp/universe)
(require 2htdp/image)

(define WIDTH 600)
(define HEIGHT 600)
(define MAX_X 5)
(define MAX_Y 1.4)


(define (draw world)
    (local ((define (f x) (sin (+ x world))))
           (plot f (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT))))

(define (plot function start step scene)
    (cond
        [(> (+ step start) MAX_X) scene]
        [else (plot function (+ start step) step
                    (add-line
                        scene
                        (scale-x start)
                        (scale-y (function start))
                        (scale-x (+ step start))
                        (scale-y (function (+ step start)))
                        "black"))]))

(define (scale-x value)
    (+ (* (/ value 2 MAX_X) WIDTH)
       (/ WIDTH 2)))

(define (scale-y value)
    (+ (* -1 (/ value 2 MAX_Y) HEIGHT)
       (/ HEIGHT 2)))

(define (step world)
    (+ world 0.1))

(big-bang 0
    [to-draw draw]
    [on-tick step])

Tehtävä

Miten tekisit seuraavat funktiot? Huomaa, että joudut säätämään y:n maksimirajaa, jotta kuva piirtyy oikein.

\[\begin{split}\begin{gather} y = 2x y = x^2 f_1(x) = \sin x^4\\ f_2(x) = \sin e^x\\ f_3(x) = \tan x\\ f_4(x) = \sin \frac{1}{x}\\ \end{gather}\end{split}\]

Tehtävä vielä

Antaako valmiina vastauksena:

(λ (x) (* 2 (+ x world)))
(λ (x) (expt (+ x world) 2))
(λ (x) (sin (expt x 4)))
(λ (x) (sin (exp x)))
(λ (x) (tan x))
(λ (x) (sin (/ x)))

Pitäisikö varottaa, että tan räjähtää äärettömään ja viimeisestä tulee jako nollalla, vaiko jättää oppimiskokemukseksi?

Monen funktion plottaus

(define (draw world)
    (local ((define (f x) (sin (+ x world)))
            (define (g x) (cos (+ x world))))
           (plot g (- MAX_X) 0.1
                 (plot f (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT)))))

Kahden yhteenlasketun funktion plottaus

(define MAX_Y 2.4)

(define (draw world)
  (local ((define (f x) (sin (+ x world)))
          (define (g x) (sin (* 2(+ x world))))
          (define (h x) (+ (f x) (g x))))
    (plot h (- MAX_X) 0.2 (empty-scene WIDTH HEIGHT))))

Tehtävä

Piirrä myös x- ja y-akselit ja niiden asteikot.

Tehtävä vielä

Asteikko? Jakomerkit? Mikä on oikea termi. Ticks englanniksi.