AutoLISP
AutoLISP
Algorytmy
Algorytmy
Komputerowe Wspomaganie
Komputerowe Wspomaganie
Projektowania
Projektowania
AutoLISP
AutoLISP
Bisekcja
Bisekcja
x
f
y
x
1
x
2
Y
x
s
y
s
x
s
x
1
Funkcja ciągła i monotoniczna w przedziale x
1
-
x
2
, np.
tan
inv
x
s
= (x
1
+x
2
)/2
|Y-f(x
s
)|
<dokładność
AutoLISP
AutoLISP
Bisekcja
Bisekcja
f(xs)<Y
f(xs)<Y
xs=(x1+x2)/2
|Y-f(xs)|<
|Y-f(xs)|<
x1=xs
x2=xs
xs=(x1+x2)/2
Stop
tak
nie
tak
(defun Bisekcja (Y / x1 x2 xs fx delta)
(setq x1 0 x2 (/ PI 2) delta 0.0001)
(setq xs (/ (+ x1 x2) 2))
(setq fx (Funkcja xs))
(while (> (abs (- Y fx)) delta)
(if (< fx Y)
(setq x1 xs)
(setq x2 xs)
)
(setq xs (/ (+ x1 x2) 2))
(setq fx (Funkcja xs))
)
(eval xs)
)
(defun Bisekcja (Y / x1 x2 xs fx delta)
(setq x1 0 x2 (/ PI 2) delta 0.0001)
(setq xs (/ (+ x1 x2) 2))
(setq fx (Funkcja xs))
(while (> (abs (- Y fx)) delta)
(if (< fx Y)
(setq x1 xs)
(setq x2 xs)
)
(setq xs (/ (+ x1 x2) 2))
(setq fx (Funkcja xs))
)
(eval xs)
)
(defun Funkcja (x) (sin
x))
(defun Funkcja (x) (sin
x))
Uwaga: Algorytm prawdziwy dla funkcji rosnącej!
Uwaga: Algorytm prawdziwy dla funkcji rosnącej!
n
n
n
n
n
n
x
x
x
n
y
x
y
x
n
a
1
1
1
2
1
1
1
n
x
a
y
b
n
n
1
1
b
x
a
y
AutoLISP
AutoLISP
Aproksymacja liniowa metodą najmniejszych
Aproksymacja liniowa metodą najmniejszych
kwadratów
kwadratów
x
y
s
1
s
3
s
2
min(s
1
+s
2
+s
3
+...)
y=
a*
x+
b
AutoLISP
AutoLISP
Aproksymacja liniowa metodą najmniejszych
Aproksymacja liniowa metodą najmniejszych
kwadratów
kwadratów
(defun Sumy (lista / Sx Sy Sxy Sx2 e x
y)
(setq Sx 0 Sy 0 Sxy 0 Sx2 0)
(foreach e lista
(setq x (car e) y (cadr e))
(setq Sx (+ Sx x))
(setq Sy (+ Sy y))
(setq Sxy (+ Sxy (* x y)))
(setq Sx2 (+ Sx2 (* x x)))
)
(list Sx Sy Sxy Sx2)
)
(defun Sumy (lista / Sx Sy Sxy Sx2 e x
y)
(setq Sx 0 Sy 0 Sxy 0 Sx2 0)
(foreach e lista
(setq x (car e) y (cadr e))
(setq Sx (+ Sx x))
(setq Sy (+ Sy y))
(setq Sxy (+ Sxy (* x y)))
(setq Sx2 (+ Sx2 (* x x)))
)
(list Sx Sy Sxy Sx2)
)
(defun Aprox (lista / Sx Sy Sxy Sx2 e n a b)
(setq e (Sumy lista))
(setq Sx (nth 0 e) Sy (nth 1 e) Sxy (nth 2 e)
Sx2 (nth 3 e))
(setq n (length lista))
(setq a (/ (- (* n Sxy)(* Sx Sy))(- (* n Sx2)(* Sx
Sx))))
(setq b (/ (- Sy (* a Sx)) n))
(list a b)
)
(defun Aprox (lista / Sx Sy Sxy Sx2 e n a b)
(setq e (Sumy lista))
(setq Sx (nth 0 e) Sy (nth 1 e) Sxy (nth 2 e)
Sx2 (nth 3 e))
(setq n (length lista))
(setq a (/ (- (* n Sxy)(* Sx Sy))(- (* n Sx2)(* Sx
Sx))))
(setq b (/ (- Sy (* a Sx)) n))
(list a b)
)
n
n
n
n
n
n
x
x
x
n
y
x
y
x
n
a
1
1
1
2
1
1
1
n
x
a
y
b
n
n
1
1
AutoLISP
AutoLISP
Sortowanie metodą bąbelkową
Sortowanie metodą bąbelkową
1
1
1
1
4
4
4
4
3
3
3
3
5
5
5
5
2
2
2
2
1
1
1
1
1
1
1
1
4
4
4
4
3
3
3
3
5
5
5
5
2
2
2
2
1
1
1
1
1
1
1
1
3
3
3
3
4
4
4
4
5
5
5
5
2
2
2
2
1
1
1
1
idx=0
Idx<last
Idx<last
last=length-1 OK=Nil
not OK
not OK
OK=T
e1=nth(idx)
e2=nth(idx+1)
e2<e1
e2<e1
idx=idx+1
Zamien(idx)
OK=Nil
Stop
(1 4 3 5 2 1)
(1 4 3 5 2 1)
(1 4 3 5 2 1)
(1 4 3 5 2 1)
(1 1 2 3 4 5)
(1 1 2 3 4 5)
(1 1 2 3 4 5)
(1 1 2 3 4 5)
?
?
(defun Zamien (lista idx / ii e1 e2 odp)
(setq e1 (nth idx lista) e2 (nth (+ idx 1)
lista))
(setq ii 0)
(repeat idx
(setq odp (append odp (list (nth ii
lista))))
(setq ii (+ ii 1))
)
(setq odp (append odp (list e2 e1)))
(setq ii (+ idx 2))
(while (< ii (lenght lista))
(setq odp (append odp (list (nth ii
lista))))
(setq ii (+ ii 1))
)
(eval ‘odp)
)
(defun Zamien (lista idx / ii e1 e2 odp)
(setq e1 (nth idx lista) e2 (nth (+ idx 1)
lista))
(setq ii 0)
(repeat idx
(setq odp (append odp (list (nth ii
lista))))
(setq ii (+ ii 1))
)
(setq odp (append odp (list e2 e1)))
(setq ii (+ idx 2))
(while (< ii (lenght lista))
(setq odp (append odp (list (nth ii
lista))))
(setq ii (+ ii 1))
)
(eval ‘odp)
)
1
1
1
1
4
4
4
4
3
3
3
3
5
5
5
5
2
2
2
2
1
1
1
1
AutoLISP
AutoLISP
Sortowanie metodą bąbelkową
Sortowanie metodą bąbelkową
odp: (1)
odp: (1)
odp: (1 3 4)
odp: (1 3 4)
e1: 4, e2: 3
e1: 4, e2: 3
odp: (1 3 4 5 2
1)
odp: (1 3 4 5 2
1)
(defun Sortuj (lista / num e1 e2 idx OK)
(setq num (- (length lista) 1) OK NIL)
(while (not OK)
(setq OK T idx 0)
(while (< idx num)
(setq e1 (nth idx lista) e2 (nth (+ idx 1)
lista))
(if (< e2 e1)
(progn
(setq lista (Zamien lista idx))
(setq OK Nil)
)
)
(setq idx (+ idx 1))
)
)
(eval ‘lista)
)
(defun Sortuj (lista / num e1 e2 idx OK)
(setq num (- (length lista) 1) OK NIL)
(while (not OK)
(setq OK T idx 0)
(while (< idx num)
(setq e1 (nth idx lista) e2 (nth (+ idx 1)
lista))
(if (< e2 e1)
(progn
(setq lista (Zamien lista idx))
(setq OK Nil)
)
)
(setq idx (+ idx 1))
)
)
(eval ‘lista)
)
AutoLISP
AutoLISP
Sortowanie metodą bąbelkową
Sortowanie metodą bąbelkową
Lista: (1 4 3 5 2 1)
Lista: (1 4 3 5 2 1)
Lista: (1 4 3 5 2 1)
Lista: (1 4 3 5 2 1)
idx=0
Idx<last
Idx<last
last=length-1 OK=Nil
not OK
not OK
OK=T
e1=nth(idx)
e2=nth(idx+1)
e2<e1
e2<e1
idx=idx+1
Zamien(idx)
OK=Nil
Stop