4 9x 4 41sin( x)計算器求解?

時間 2021-09-09 18:52:36

1樓:PikaPikachu

函式求根的話,第乙個想到的是二分法

先把原方程化簡一下:

令 寫了乙個python程式算了一下:

import math

def f(x):

return x**2-0.9*math.sin(math.pi*x)

a=0.5

b=1i=1

while I<=20:

mid=f((a+b)/2)

if mid*f(b)<0a=(a+b)/2

elseb=(a+b)/2

print(i,a,b,sep=' ')

i+=1

結果如下:

1 0.75 1

2 0.75 0.875

3 0.75 0.8125

4 0.75 0.78125

5 0.765625 0.78125

6 0.765625 0.7734375

7 0.76953125 0.7734375

8 0.76953125 0.771484375

9 0.7705078125 0.771484375

10 0.7705078125 0.77099609375

11 0.7705078125 0.770751953125

12 0.7705078125 0.7706298828125

13 0.77056884765625 0.7706298828125

14 0.770599365234375 0.7706298828125

15 0.7706146240234375 0.7706298828125

16 0.7706222534179688 0.7706298828125

17 0.7706222534179688 0.7706260681152344

18 0.7706222534179688 0.7706241607666016

19 0.7706222534179688 0.7706232070922852

20 0.7706222534179688 0.770622730255127

大概在第16次迴圈的時候得到比較準確的數值解,這個用計算器按的話還是比較費勁的

有沒有什麼更快的方法呢?有的!

接下來請出牛頓大神:牛頓迭代法

先看看這個函式的影象:

在 上, 不變號,都大於零

個人覺得 這個點比較順眼,就選它開始迭代

近似根的迭代公式:

取 ,則

這樣看來牛神的方法就比二分法的速度快了很多,我自己按計算器迭代了3次就差不多有很準確的結果了

繼續上python程式:

import math

def f(x):

return x**2-0.9*math.sin(math.pi*x)

def df(x):

return 2*x-0.9*math.pi*math.cos(math.pi*x)

i=1a=1

while i<=10:

a=a-f(a)/df(a)

print(i,a,f(a),sep=' ')

i+=1

設 的精確解為 ,誤差為 ,有公式

,所以結果如下:

1 0.7928505854813077 0.08338626024554607

2 0.7711084697337774 0.0017821387346091955

3 0.7706228210147352 9.262434513823692e-07

4 0.7706225683424206 2.509104035652854e-13

5 0.7706225683423521 -1.1102230246251565e-16

6 0.7706225683423521 -1.1102230246251565e-16

7 0.7706225683423521 -1.1102230246251565e-16

8 0.7706225683423521 -1.1102230246251565e-16

9 0.7706225683423521 -1.1102230246251565e-16

10 0.7706225683423521 -1.1102230246251565e-16

基本上到第3次的結果就比較精確了,所以說牛頓迭代法逼近根的速度快,用計算器按的話,個人感覺,還是用牛神的方法簡便快捷。

對了,這個函式還有乙個不起眼的零點,0

這個應該能猜出來吧,差點忘了