求函數(shù)的零點有以下三種方法
站在用戶的角度思考問題,與客戶深入溝通,找到上黨網(wǎng)站設(shè)計與上黨網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋上黨地區(qū)。
以適當(dāng)?shù)姆绞綄瘮?shù)加以變形(形如x2+5x+4)。高次項(如x2)在前、低次項在后逐一從左向右降次排列,直到常數(shù)項(形如8或4)。在最后一項后面加上等于號和數(shù)字0。
排列正確的多項式:
x2 + 5x + 6 = 0
x2 - 2x – 3 = 0
排列錯誤的多項式:
5x + 6 = -x2
x2 = 2x + 3
用a, b, c等字母表示方程系數(shù)。這一步不需要數(shù)學(xué)知識,僅通過一定的表達方式為后續(xù)的因式分解降低難度。你嘗試解決的方程擁有一般形式。對于以上方程,一般形式為ax2 ± bx ± c = 0。只需要在你排列完畢的方程里找到對應(yīng)三個字母的數(shù)字(系數(shù))即可。例如:
x2 + 5x + 6 = 0
a = 1 (no number in front of "x" = 1, as there is still one "x")
b = 5
c = 6
x2 - 2x – 3 = 0
a = 1 (no number in front of "x" = 1, as there is still one "x")
b = -2
c = -3
寫下常數(shù)項c的所有因數(shù)對。某數(shù)的因數(shù)對指相乘結(jié)果等于該數(shù)的兩個數(shù)。寫因數(shù)對時特別注意負數(shù),兩個負數(shù)相乘等于正數(shù)。因數(shù)對中兩個數(shù)的順序沒有嚴格要求(即1×4與4×1等價)。
例:方程 x2 + 5x + 6 = 0中常數(shù)項6的因數(shù)對有:
1 x 6 = 6
-1 x -6 = 6
2 x 3 = 6
-2 x -3 = 6
求函數(shù)的零點有兩種情況:一種是函數(shù)如果比較簡單,就令函數(shù)等于0,然后解方程就行了。另外一種是函數(shù)比較復(fù)雜,就要對函數(shù)進行轉(zhuǎn)化,變形,或借助于圖形。。
對于在區(qū)間[a,b]上連續(xù)不斷、且f(a)·f(b)<0的函數(shù)y=f(x),通過不斷地把函數(shù)f(x)的零點所在的區(qū)間一分為二,使區(qū)間的兩個端點逐步逼近零點,進而得到零點近似值。
步驟
(1)確定區(qū)間[a,b],驗證f(a)f(b)<0,給定精確度ε;
(2)求區(qū)間(a,b)的中點x1;
(3)計算f(x1);
1)若f(x1)=0,則x1就是函數(shù)的零點;
2)若f(a)·f(x1)<0,則令b=x1(此時零點x0∈(a,x1));
3)若f(b)·f(x1)<0,則令a=x1(此時零點x0∈(x1,b))。
(4)判斷是否達到精確度ε:即若|a-b|<ε,則得到零點的近似值a(或b);否則重復(fù)2~4。
Sympy是python中非常強大的符號運算庫,可以以書寫習(xí)慣表示數(shù)學(xué)表達式。下面介紹用Sympy求方程數(shù)值解的方法。
下面代碼全部在
from sympy import *
init_printing(use_unicode=True) # 按書寫習(xí)慣輸出
下運行。
數(shù)學(xué)表達式的輸入
首先聲明符號:
x = symbols('x')
即計算機中的變量x代表數(shù)學(xué)表達式中的x。在后文輸出中所有的x會顯示為x。如果x=symbols('x0'),則輸入的方程中所有x將在輸出中以x0表示。
如果需要希臘字母
l, r = symbol('lambda rho')
l, r將分別以λ,ρ表示??梢栽谝粋€表達式中同時聲明多個符號。
或者使用var()聲明:
var('x')
與上面等效。
聲明表達式:
f = (5/x)*(exp(x)-1)-exp(x)
此時若輸出f可以看到書寫習(xí)慣的表達式。由于表達式在markdown下顯示不正常,在此不放置示例。注意f的類型是class 'sympy.core.add.Add'
求f(x)=0數(shù)值解
因為有的函數(shù)零點不止一個,因此在Sympy中解的輸出為一個list。使用solve(表達式,自變量符號)可以解析地解方程:
s, = solve(f, x)
這里根據(jù)上面f的賦值,得到s為
LambertW(-5e**-5)+5
其中用了特殊函數(shù)表達。
我們需要求這個結(jié)果的數(shù)值近似,則輸出
s.evalf()
得到輸出
4.96511423174428
就是方程f(x)=0的數(shù)值解。
求給定自變量x值時函數(shù)f(x)的值 | 將表達式轉(zhuǎn)化為函數(shù)
f.evalf(subs = {x:4.96})
得到f(4.96)的數(shù)值
0.141885450782171
如果需要以計算機函數(shù)的形式定義函數(shù)f(x),則可以使用lambdify()進行轉(zhuǎn)化:
f_func = lambdify(x, f)
之后可以調(diào)用
f_func(4.96)
輸出
0.141885450782
利用這個方法可以測試方程的數(shù)值算法,如使用sympy接口寫牛頓法等。
函數(shù)零點的求法:確定區(qū)間[a,b],驗證f(a)·f(b)0,給定精確度ε;(2)求區(qū)間(a,b)的中點x1;(3)計算f(x1),若f(x1)=0,則x1就是函數(shù)的零點。
函數(shù)零點有一個簡易判斷法:對于連續(xù)函數(shù)f(x)若有f(a)*f(b)0(設(shè)a判斷零點個數(shù)的題一般有三種方法,一種是計算f(a)*f(b),通過收縮區(qū)間來確定零點具體位置,避免區(qū)間過大同時包含幾個零點;另一種是畫出大概的圖像;第三種是借助導(dǎo)函數(shù)的符號來判斷函數(shù)的單調(diào)性,進而確定零點