> 1 <

Автор Сообщение

Яков Замир Кацман (нью)

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#7741   2016-08-31 13:47 GMT+3 часа(ов)      
Вопрос: Как бы показать сходимость для произвольного коэффициент a = 2.8 (здесь я подсмотрел параметр 0.6428571 и подставил его руками)

"Закон Ферхлюста" \[ x_{n+1} = a x_{n} (1 - x_{n}) \]

(defun xn_calc (x)
(
(lambda (xn) (* 2.8 xn (- 1 xn))) x
)
)
 
(defun xn_print (x)
(progn (print x)
(xn_func (xn_calc x))
)
)
 
(defun xn_func (x)
(cond ((= x 0.6428571) 0)
(t (xn_print x))
)
)
 
 
CL-USER 12 : 1 > (xn_func 0.1)

0.1
0.252
0.5277888
0.69783777
0.5904086
0.6771136
0.61216617
0.66477246
0.6239801
0.65696097
0.6310171
0.65193666
0.63536275
0.6486954
0.6380911
0.6466064
0.6398184
0.6452623
0.6409168
0.64439887
0.64161706
0.6438449
0.6420642
0.6434897
0.64234996
0.64326215
0.64253265
0.6431164
0.64264954
0.64302314
0.6427243
0.64296335
0.64277214
0.64292515
0.6428027
0.6429007
0.64282227
0.642885
0.64283485
0.64287496
0.6428429
0.6428685
0.642848
0.64286447
0.6428513
0.64286185
0.6428534
0.6428602
0.6428547
0.6428591
0.6428556
0.6428584
0.6428561
0.64285797
0.6428565
0.6428577
0.6428567
0.6428575
0.64285684
0.6428574
0.64285696
0.6428573
0.642857
0.64285726

отредактировал(а) Яков Замир Кацман (нью): 2016-09-06 11:07 GMT+3 часа(ов)

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 62

#7742   2016-09-04 23:40 GMT+3 часа(ов)      
Закон Ферхюльста - это о численности популяций?

 
(defun calc (x a)
(* a x (- 1.0 x)))
 
==> calc
 
(defun iterate (a eps x-start)
(let ((xp x-start) (xc (calc x-start a)))
(loop
(when (<= (abs (- xp xc)) eps) (return xc))
(setq xp xc xc (calc xc a)))))
 
==> iterate
 
(iterate 2.8 0.0001 0.1)
 
==> 0.642900661690673
 
(iterate 2.5 0.0001 0.1)
 
==> 0.599969942863984
(iterate 1.5 0.0001 0.1)
 
==> 0.333268684275764
 

Яков Замир Кацман (нью)

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#7743   2016-09-05 09:26 GMT+3 часа(ов)      
Спасибо. Понятно, что можно Эпислон вычислить и так. Но я хотел как раз что бы сравнение было без let (т.е. в чисто функциональном стиле,
Видите я сделал лямбды, рекурсию.)

Законом Ферхлюста иллюстрируется статья: М.Фейгенбаум "Универсальность в поведении нелинейных систем" [1983/Успехи физ. наук/Том 141, вып. 2]
Там интересно.

P/S еще обратил внимание, результаты нас немного отличаются. Почему?

отредактировал(а) Яков Замир Кацман (нью): 2016-09-05 12:07 GMT+3 часа(ов)

Файфель Б.Л.

Members


Статус

61 сообщений
http://homelisp.ru
Где: Russia Саратов
Род занятий: Программист
Возраст: 62

#7744   2016-09-05 14:47 GMT+3 часа(ов)      
У меня эпсилон - это точность достижения сходимости. Эта величина задается. А отличия - из-за низкого эпсилон у меня. Кроме того, в Вашем коде выполняется сравнение чисел с плавающей точкой на равенство. Так делать не следует. Лучше проверять не на равенство, а на близость (чтобы модуль разности был меньше некоторого эпсилон).

Яков Замир Кацман (нью)

Members


Статус

5 сообщений

Где: Russia
Род занятий:
Возраст:

#7745   2016-09-06 10:54 GMT+3 часа(ов)      
Да. Спасибо Вам. Сделал.

(defun xn_calc (x)
(
(lambda (xn) (* 2.8 xn (- 1 xn))) x
)
)
 
(defun xn_print (x eps)
(progn (print x)
(xn_func x (xn_calc x) eps)
)
)
 
 
(defun xn_func (x_prev x eps)
(cond ((< (abs (- x x_prev)) eps))
(t (xn_print x eps))
)
)
 


(xn_func 1 0.1 0.000001)

0.1
0.252
0.5277888
0.69783777
0.5904086
0.6771136
0.61216617
0.66477246
0.6239801
0.65696097
0.6310171
0.65193666
0.63536275
0.6486954
0.6380911
0.6466064
0.6398184
0.6452623
0.6409168
0.64439887
0.64161706
0.6438449
0.6420642
0.6434897
0.64234996
0.64326215
0.64253265
0.6431164
0.64264954
0.64302314
0.6427243
0.64296335
0.64277214
0.64292515
0.6428027 ...

отредактировал(а) Яков Замир Кацман (нью): 2016-09-06 11:07 GMT+3 часа(ов)
> 1 <


Онлайн :

0 пользователь(ей), 13 гость(ей) :




Реклама на сайте: