伯努利方法的應用 也是自治微分方程

2021-05-26 13:17:20 字數 3029 閱讀 2753

伯努利方法的應用(也是自治微分方程)

假設微分方程模型為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...