Ⅰ python用級數的方法求sinx, pi, ln ,e ^x 的近似值是什麼意思啊
這里指的是麥克勞林級數。
泰勒級數用無限項相加來逼近一個函數。
泰勒級數取x0=0時得到麥克勞林。攜沖
通項公式為
按照這個公式寫程序即可。
一般加前十顫鄭項即可,用一茄隱頌個while循環來寫。
Ⅱ 2021-02-07 Python scipy ndimage.zoom()函數
此函數將輸入的圖片從一個顏攔迅色域轉換到另一個。
input: 以數組形式輸入圖片
zoom:浮點數或數組。如果是一個浮點數,對每一個軸放縮相同的倍數。如果是一個雀搏數組,則對每一個軸分配一個值。
output:輸出,默認為None
order:整型(范圍0-5)樣條插值的順序,默認為3。詳見後續
mode:字元串,包括{『reflect』, 『constant』, 『nearest』, 『mirror』, 『wrap』},輸入的數組如何擴展邊界,默認為 『constant'(具體參考官方文檔 插值的邊界處理 )
cval:浮點數,當插值的邊界處理模式為』constant『時發揮作簡歲此用。默認為0.0
prefilter:bool,input輸入的數組是否經過一個預樣條濾波器,默認為True
設原圖 ,
目標圖片
設 之比為 , ,則:
設原圖坐標上的像素點 ,
目標圖片坐標上的像素的為
1.計算目標圖片的坐標點對應原圖中哪個坐標點,公式為:
2.根據dst_x,dst_y的值四捨五入為整數,填充到目標圖片的相應位置。
由上圖可以看到,經過轉換後的圖片出現了鋸齒感。
1.計算目標圖片的坐標點對應原圖中哪個坐標點(此步與最鄰近插值演算法相同),公式為:
2.由於點 是個浮點數坐標,無法用整型的灰度值或RGB值來表示,因此雙線性插值演算法通過尋找距離這個對應坐標最近的四個像素點,來計算該點的值(灰度值或者RGB值)。
設分解後的坐標為:
首先,在x方向上進行線性插值, 代表該點的像素值。
然後,在y方向上進行線性插值:
得到的 就是該點經過處理後的像素值,填充到目標圖片的相應位置。
可見,雙線性插值演算法的鋸齒感要少於最鄰近插值法。
三次插值法(cubic interpolation method)是一種 多項式插值法 ,逐次以 三次曲線 φ(t)=a 0 +a 1 t+a 2 t 2 +a 3 t 3 的極小點逼近尋求函數f(t)的極小點的一種方法.(摘自 網路 )
可見,三次插值法處理後的圖片幾乎沒有鋸齒感
Ⅲ python非線性規劃用什麼模塊
python非線性規劃用什麼模塊本文使用SciPy的optimize模塊來求解非線性規劃問題,結合實際例子,引入非線性規劃問題的求解演算法及相應函數的調用。
本文提綱一維搜索/單變數優化問題
無約束多元優化問題
非線性最小二乘問題
約束優化問題
非線性規劃問題的目標函數或約束條件是非線性的。本文使用SciPy的optimize模塊來求解非線性規劃問題。
目標函鎮滾數和約束搏清條件是否連續光滑是非常重要的性質,這是因為如果光滑,則所有決策變數可微,多變數函數的偏導數組成的向量為梯度,梯度是指向目標函數增長最快的方向。將目標函數梯度作為搜索方向,對非線性規劃問題的求解具有重要的意義。這些函數或其導數\梯度的不基旅前連續性給許多現有的非線性優化問題的求解帶來了困難。在下文中,我們假設這些函數是連續且光滑的。
# Importing Moles
from scipy import optimize
import matplotlib.pyplot as plt
import numpy as np
import sympy
1、一維搜索/單變數優化問題(Univariate Optimization)
無約束非線性規劃最簡單的形式是一維搜索。一維搜索通常作為多維優化問題中的一部分出現,比如梯度下降法中每次最優迭代步長的估計。求解一維搜索常用的兩類方法是函數逼近法和區間收縮法。其中函數逼近法是指用較簡單的函數近似代替原來的函數,用近似函數的極小點來估計原函數的極小點,比如牛頓法;區間收縮法對於一個單谷函數通過迭代以不斷縮小該區間的長度,當區間長度足夠小時,可將該區間中的一點作為函數的極小點,比如黃金分割法。
e.g. 最小化一個單位體積的圓柱體的表面積。
r, h = sympy.symbols("r, h")
Area = 2 * sympy.pi * r**2 + 2 * sympy.pi * r * h
Volume = sympy.pi * r**2 * h
Ⅳ python代碼改錯,關於逐次逼近和求平方根
首先二分法肯定需要一個「不斷」二分的過程, 你的代碼裡面連一個循環都沒有,肯定是不對的吧?
其次按照你的代碼的思路,如果當前估算值guess的平法比x大,那就往0那邊靠,否則就往1那邊靠,這個好像也不對吧?
二分法的實現方法應該是,在區間[left, right]裡面找x的開方,令估算值為guess等於區間的中點,如果guess比實際的大,那就把區間縮小一半,令到右端點移動到中點,如果guess比實際的小,也是將區間縮小一半,但是是令左端點移動到中點。這樣每次縮小一半的區間,直到區間的長度非常非常小,那就認為區間的兩個端點是相等的了,這個時候就得到了答案。
importmath
defmain():
x=input('x=')
n=0
ifx<=1andx>=0:
left=0.
right=1.
whileright-left>=0.0000001:
guess=(left+right)/2.
ifguess**2-x>=0.0000001:
right=guess
else:
left=guess
#returnguess
print'sqrt(x)is',left
else:
print'xshouldbein[0,1]'
if__name__=='__main__':
main()
defsecond():
x=input('x=')
n=0
ifx<=1andx>=0:
movelen=(1+0)/4.
guess=(1+0)/2.
whileabs(guess**2-x)>=0.0000001:
if(guess**2-x)>=0.0000001:
guess=guess-movelen
else:
guess=guess+movelen
movelen=movelen/2.
print'sqrt(x)is',guess
else:
print'xshouldbein[0,1]'
Ⅳ Python怎麼做最優化
一、概觀scipy中的optimize子包中提供了常用的最優化演算法函數實現。我們可以直接調用這些函數完成我們的優化問題。optimize中函數最典型的特點就是能夠從函數名稱上看出是使用了什麼演算法。下面optimize包中函數的概覽:1.非線性最優化fmin -- 簡單Nelder-Mead演算法fmin_powell -- 改進型Powell法fmin_bfgs -- 擬Newton法fmin_cg -- 非線性共軛梯度法fmin_ncg -- 線性搜索Newton共軛梯度法leastsq -- 最小二乘2.有約束的多元函數問題fmin_l_bfgs_b ---使用L-BFGS-B演算法fmin_tnc ---梯度信息fmin_cobyla ---線性逼近fmin_slsqp ---序列最小二乘法nnls ---解|| Ax - b ||_2 for x=03.全局優化anneal ---模擬退火演算法brute --強力法4.標量函數fminboundbrentgoldenbracket5.擬合curve_fit-- 使用非線性最小二乘法擬合6.標量函數求根brentq ---classic Brent (1973)brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出這個演算法的人名bisect ---二分法newton ---牛頓法fixed_point7.多維函數求根fsolve ---通用broyden1 ---Broyden』s first Jacobian approximation.broyden2 ---Broyden』s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixingexcitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.實用函數line_search ---找到滿足強Wolfe的alpha值check_grad ---通過和前向有限差分逼近比較檢查梯度函數的正確性二、實戰非線性最優化fmin完整的調用形式是:fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不過我們最常使用的就是前兩個參數。一個描述優化問題的函數以及初值。後面的那些參數我們也很容易理解。如果您能用到,請自己研究。下面研究一個最簡單的問題,來感受這個函數的使用方法:f(x)=x**2-4*x+8,我們知道,這個函數的最小值是4,在x=2的時候取到。from scipy.optimize import fmin #引入優化包def myfunc(x):return x**2-4*x+8 #定義函數x0 = [1.3] #猜一個初值xopt = fmin(myfunc, x0) #求解print xopt #列印結果運行之後,給出的結果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]程序准確的計算得出了最小值,不過最小值點並不是嚴格的2,這應該是由二進制機器編碼誤差造成的。除了fmin_ncg必須提供梯度信息外,其他幾個函數的調用大同小異,完全類似。我們不妨做一個對比:from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):return x**2-4*x+8x0 = [1.3]xopt1 = fmin(myfunc, x0)print xopt1printxopt2 = fmin_powell(myfunc, x0)print xopt2printxopt3 = fmin_bfgs(myfunc, x0)print xopt3printxopt4 = fmin_cg(myfunc,x0)print xopt4給出的結果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 531.99999999997Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 12Gradient evaluations: 4[ 2.00000001]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 15Gradient evaluations: 5[ 2.]我們可以根據給出的消息直觀的判斷演算法的執行情況。每一種演算法數學上的問題,請自己看書學習。個人感覺,如果不是純研究數學的工作,沒必要搞清楚那些推導以及定理雲雲。不過,必須了解每一種演算法的優劣以及能力所及。在使用的時候,不妨多種演算法都使用一下,看看效果分別如何,同時,還可以互相印證演算法失效的問題。在from scipy.optimize import fmin之後,就可以使用help(fmin)來查看fmin的幫助信息了。幫助信息中沒有例子,但是給出了每一個參數的含義說明,這是調用函數時候的最有價值參考。有源碼研究癖好的,或者當你需要改進這些已經實現的演算法的時候,可能需要查看optimize中的每種演算法的源代碼。在這里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聰明的你肯定發現了,順著這個鏈接往上一級、再往上一級,你會找到scipy的幾乎所有源碼!