您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Python如何實現(xiàn)定積分與二重定積分的操作的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
最近項目需要使用程序?qū)崿F(xiàn)數(shù)學(xué)微積分,最初想用java實現(xiàn),后來發(fā)現(xiàn)可用文檔太少,實現(xiàn)比較麻煩,后來嘗試使用python實現(xiàn),代碼量較少,主要有sympy與scipy兩種實現(xiàn)方式,本文主要記錄scipy的實現(xiàn)方式。
# 引入需要的包 import scipy.integrate from numpy import exp from math import sqrt import math # 創(chuàng)建表達(dá)式 f = lambda x,y : exp(x**2-y**2) # 計算二重積分:(p:積分值,err:誤差) # 這里注意積分區(qū)間的順序 # 第二重積分的區(qū)間參數(shù)要以函數(shù)的形式傳入 p,err= scipy.integrate.dblquad(f, 0, 2, lambda g : 0, lambda h : 1) print(p)
1. exp盡量使用numpy的exp
2. 注意積分區(qū)間參數(shù)的順序
3. 第二重積分的區(qū)間參數(shù)要以函數(shù)的形式傳入
補充:python實現(xiàn)求解積分
假設(shè)有隨機變量 x,定義域 X,其概率密度函數(shù)為 p(x),f(x) 為定義在 X 上的函數(shù),目標(biāo)是求函數(shù) f(x) 關(guān)于密度函數(shù) p(x) 的數(shù)學(xué)期望 。
蒙特卡洛法根據(jù)概率分布 p(x) 獨立地抽樣 n 個樣本 x1,x2,…..xn,得到近似的 f(x) 期望為:
其實這個的理解就是要求一個擁有概率密度的函數(shù)期望值
期望=積分(每個點的密度函數(shù)*每個點的價值函數(shù))
假設(shè)我們想要求解 h(x) 在 X 上的積分:
我們將 h(x) 分解成一個函數(shù) f(x) 和一個概率密度函數(shù) p(x) 的乘積,進(jìn)而又將問題轉(zhuǎn)換為求解函數(shù) f(x) 關(guān)于密度函數(shù) p(x) 的數(shù)學(xué)期望 :
這里的Ep(x)是相當(dāng)于把整個分布當(dāng)時了概率分布,即總發(fā)生概率為1.
這里,f(x) 表示為 ,則有:
更一般的,假設(shè)我們想要求解 ,熟悉積分的同學(xué)肯定已經(jīng)知道答案為 ,那么如何用采樣的方法來得到這個值呢?
令 ,0<x<10,那么 。
下面是代碼:
'''import random num=1000000 sum=0 for i in range(0,num): x=random.uniform(0,10) sum+=x*x*10 sum/=1000000 print(sum)''' import random numSamples=10000 samples=[random.uniform(0,10)for _ in range(numSamples)] f_samples=[10*sample**2 for sample in samples] result=1/10000.0*sum(f_samples) print(result)
result=333.10527012455066
random.uniform(x,y)表示在[x,y)之間生成一個 實數(shù)
對于復(fù)雜的 h(x),這種方法計算起來顯然就更加方便了(特別是忘記積分怎么算的同學(xué))。
蒙特卡洛方法其實就是利用大數(shù)定理通過大量統(tǒng)計來算出最后的值。
到這里為止,我們簡單的介紹了蒙特卡洛方法,但是依舊沒有提到要怎么利用復(fù)雜的概率密度函數(shù)進(jìn)行采樣。
接下來我們來看一下接受-拒絕法(accept-reject sampling method),它也是蒙特卡洛法中的一種類型適用于不能直接抽樣的情況。
感謝各位的閱讀!關(guān)于“Python如何實現(xiàn)定積分與二重定積分的操作”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。