數值積分 Python實現

2021-08-27 21:32:26 字數 2479 閱讀 1851

原理:

利用復化梯形公式,復化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)) / (4 + x ** 2)

if i == 4:

return math.log(1+x,math.e) / (1 + x ** 2)

"""列印顯示函式"""

defp

(i,n):

return

"第" + str(i) + "題,n=" + str(n) + "時的積分值為:"

"""復化simpson函式"""

defsimpson

(a, b, n, i):

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

f0 = f(a,i) + f(b,i)

f1 = 0

f2 = 0

for j in range(1,2 * n):

x = a + (j * h)

if j % 2 == 0:

f2 = f2 + f(x,i)

else:

f1 = f1 + f(x,i)

sn = (h * (f0 + 2 * f2 + 4 * f1)) / 3

print("復化simpson函式" + p(i,n) + str("%-10.7f"%(sn)))

return sn

deft

(a, b, n, i):

h = (b - a) / n

f0 = f(a,i) + f(b,i)

f = 0

for j in range(1,n):

x = a + (j * h)

f = f + f(x,i)

sn = (h * (f0 + 2 * f)) / 2

print("復化梯形函式" + p(i,n) + str("%-10.7f"%(sn)))

return sn

defsimpsontimes

(x):

n = 1

y = simpson(0, math.pi/4, n, 1)

while(abs(y - 1.5343916) > x):

n = n + 1

y = simpson(0, math.pi/4, n, 1)

else:

return n

deftimes

(x):

n = 1

y = t(0, math.pi/4, n, 1)

while(abs(y - 1.5343916) > x):

n = n + 1

y = t(0, math.pi/4, n, 1)

else:

return n

""" 測試部分

"""simpson(0, math.pi/4, 10, 1)

simpson(0, 1, 10, 2)

simpson(0, 1, 10, 3)

simpson(0, 1, 10, 4)

simpson(0, math.pi/4, 20, 1)

simpson(0, 1, 20, 2)

simpson(0, 1, 20, 3)

simpson(0, 1, 20, 4)

t(0, math.pi/4, 10, 1)

t(0, 1, 10, 2)

t(0, 1, 10, 3)

t(0, 1, 10, 4)

t(0, math.pi/4, 20, 1)

t(0, 1, 20, 2)

t(0, 1, 20, 3)

t(0, 1, 20, 4)

print("復化梯形函式求解第一問,精度為0.00001時需要" + str(times(0.00001)) + "個步數")

print("復化simpson函式求解第一問,精度為0.00001時需要" + str(simpsontimes(0.00001)) + "個步數")

print("復化梯形函式求解第一問,精度為0.000001時需要" + str(times(0.000001)) + "個步數")

print("復化simpson函式求解第一問,精度為0.000001時需要" + str(simpsontimes(0.000001)) + "個步數")

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

一.組合梯形公式 數值積分 問題描述 組合梯形公式求函式f x 2 sin 2 sqrt x 的積分近似值。輸入形式 在螢幕上依次輸入積分上限 下限和等距子區間個數。輸出形式 輸出使用組合梯形公式求得的積分近似值。樣例1輸入 1 6 10 樣例1輸出 8.19385457 樣例1說明 輸入 積分上限...

Matlab數值積分

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

matlab 數值積分!

1.梯形格式 2.其他格式 matlab提供了quad quadl 等函式命令計算一元函式的數值積分,其中quad 採用遍歷的自適應simpson法計算函式的數值積分,quadl採用遍歷的自適應lobatto法計算函式的數值積分。其呼叫格式一般為 q,fcnt quad function,a,b 其...