伯努利方法的應用(也是自治微分方程)
假設微分方程模型為y'=y+1/y
方程兩邊分別除以1/y有:
y'/=y/+1
goy'/y^(-1)=1/y^(-2)+1
按照伯努利方法設定v=1/y^(-2),則v'=2*y'*/y^(-1),
gov'/2=v+1
gov'=2v+2
gov'-2v=2
左邊部分按照標準解法有:
|u|=c*e^(-2x)
go可以得到v=-1/2+c*e^(2x)
這樣可以得到|y|=sqrt v =sqrt ,
現在假設初始條件是y(0)=3,那麼c=9.5
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
下面寫程式來證明:
(setq c 9.5)
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))(defun slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))y'=y+1/y
(defun expr (x1 y1 )
(+ y1
(* 0.01
(+ y1
(/ 1
y1)))))
(defun calc (n x)
(if (eq n 0)
1.0(+ (calc (1- n)
x)(* (pow x
n)(/ 1
(slayer n))))))
(setq e (calc 10 1))
(defun formula (x)
(sqrt
(+ -0.5
(* c
(pow e
(* 2
x))))))
(defun exprhelp (x1 )
(if (< (abs (- x1 0))
0.01)
(formula 0)
(expr x1
(exprhelp (- x1
0.01)))))
(defun test (n)
(if (> n 0)
(progn
(print (exprhelp n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
[25]> (test 20)
1.3757553e9
compare
1.4953814e9
5.08632e8
compare
5.5012006e8
1.8804696e8
compare
2.0237784e8
6.9523024e7
compare
7.445064e7
2.5703448e7
compare
2.7388858e7
9502851.0
compare
1.0075797e7
3513310.5
compare
3706678.5
1298910.3
compare
1363610.8
480221.44
compare
501644.34
177543.2
compare
184544.63
65639.7
compare
67890.164
24267.734
compare
24975.395
8972.051
compare
9187.934
3317.067
compare
3380.0518
1226.3562
compare
1243.4513
453.3967
compare
457.43967
169.29945
compare
168.28136
62.585
compare
61.90376
23.119616
compare
22.763624
8.4966755
compare
8.348415
over
over
從這裡可以看出結果是可以信賴的,也就是說伯努利方法用在這裡也是沒有問題的;儘管其中
能用這種解法的條件相當隱晦;
另外在其中我曾經有過乙個錯誤,關於計算
(pow e
(* 2
x))的值的時候,因為這裡x的值有可能比較大,比如20,而採用
(calc 10 (* 2
x))的方式是計算不出正確結果的;
如果採用以下方式
(defun formula (x)
(sqrt
(+ -0.5
(* c
(calc 40
(* 2
x))))))
又是可以計算出正確結果的;
關於伯努利數
主要是寫這個部落格用來記錄自然數冪和與伯努利數的關係 伯努利數定義如下 b 0 1 sum nb ic i 0 於是我們有了它的遞推式 b n frac sum b ic i 有乙個經常用的東西,用來求自然數冪和 s m n sum i m s m n frac sum c b i n 1 上面的式...
伯努利數學習筆記
定義伯努利數列 b n 滿足 b 0 1,sum nb i 0 n 0 可以發現定義式裡面包含了 b n 這一項,於是把 b n 提出來 b n sum b i n 1 b n sum b i b n frac sum b i 直接用定義式求是 o n 2 的複雜度 把定義式的迴圈上界減一,得 su...
學習筆記 伯努利數
b n n 0 frac 1 sum binom i b i 同時有 hat x sum b i frac frac x 所以可以使用多項式求逆求出伯努利數。設自然數冪和函式 s k n sum i k 那麼有 s k n frac 1 sum k binomi b i n 設 hat n x su...