python做數值積分 積分區間為小數 數值積分

2021-10-18 14:46:08 字數 1620 閱讀 7758

一. 組合梯形公式(數值積分)

【問題描述】組合梯形公式求函式f(x)=2+sin(2*sqrt(x))的積分近似值。

【輸入形式】在螢幕上依次輸入積分上限、下限和等距子區間個數。

【輸出形式】輸出使用組合梯形公式求得的積分近似值。

【樣例1輸入】

1 6 10

【樣例1輸出】

8.19385457

【樣例1說明】輸入:積分上限a為1、下限b為6和等距子區間個數m為10。輸出:積分近似值(保留小數點後8位有效數字)

【評分標準】根據輸入得到的輸出準確

二. 組合辛普森公式(數值積分)

【問題描述】組合辛普森公式求函式f(x)=2+sin(2*sqrt(x))的積分近似值。

【輸入形式】在螢幕上依次輸入積分上限、下限和等距子區間個數。

【輸出形式】輸出使用組合辛普森公式求得的積分近似值。

【樣例1輸入】

1 6 5

【樣例1輸出】

8.18301549

【樣例1說明】輸入:積分上限a為1、下限b為6和等距子區間個數m為5。輸出:積分近似值(保留小數點後8位有效數字)

【評分標準】根據輸入得到的輸出準確

import math

def fun(x):

return math.sin(2*math.sqrt(x))+2

# 復合梯度

def tx(a,b,m):

h = (b-a)/m

s = 0

for i in range(1,m):

x = a+h*i

s = s+fun(x) #s=f1+f2+----+fm-1

result = (h/2)*(fun(a)+s*2+fun(b))

return result

#復合辛普森

def xps(a,b,m):

h = (b-a)/(2*m)

s1 = 0

s2 = 0

for i in range(1,m+1):

x = a+ h*(2*i -1)

s1 = s1+fun(x)

s1 = 4*h*s1/3

for i in range(1,m):

x = a+ h*2*i

s2 = s2+fun(x)

s2 = 2 * h * s2 / 3

result = (h/3)*(fun(a)+fun(b))+s1+s2

return result

def xps(a,b,m):

h = (b-a)/(2*m)

s1 = 0

for i in range(1,m+1):

x = a+ h*2*i

s1 = s1+fun(x)+4*fun(x-h)+fun(x-2*h)

result = (h/3)*s1

return result

def main():

a,b,m= input().split()

a =int(a)

b =int(b)

m =int(m)

print("%.8f"%xps(a, b, m))

if __name__ == '__main__':

main()

數值積分 Python實現

原理 利用復化梯形公式,復化simpson公式,計算積分。步驟 測試函式 deff x,i if i 1 return 4 math.sin x 2 0.5 if i 2 if x 0 return 1else return math.sin x x if i 3 return math.exp x...

數值分區間 數值積分 使用FFT來降低計算量

我們考慮如下積分的數值計算問題 我們假定 是有界的,因為 的快速下降性,我們知道上述積分的主要貢獻來自於 這樣的乙個鄰域 當然,只是乙個示例。因此,我們可以採用復合梯形公式來數值求解積分。取為等距節點,則復合梯形公式給出數值積分近似 下面我們以 以及 為例來計算一下,首先這個積分的精確值為 數值上,...

Matlab數值積分

function gc,ak,xk guasschebyshev fun,n 高斯 勒讓德數值積分 引數說明 fun 積分表示式,可以是函式控制代碼 inline函式 匿名函式 字串表示式,但是必須可以接受向量輸入 a,b 積分上下限只能 1 1 故忽略 n 積分階數,可以任意正整數,但是不建議設定...