一、傅里葉去除圖片噪聲
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.fftpack as fft
# %matplotlib inline
# %matplotlib QT5
#1 傅里葉去除圖片噪聲
moon_data = plt.imread('moonlanding.png') #ndarray
#plt.figure(figsize=(12,11)) #調整圖片顯示大小
#plt.imshow(moon_data,cmap = 'gray') #autumn
print(moon_data.shape) #二維 黑白
moon_fft = fft.fft2(moon_data)
print(moon_fft.min())
moon_fft2 = np.where(np.abs(moon_fft)>1e3,0,moon_fft)
moon_ifft = fft.ifft2(moon_fft2) #逆變化
moon_result = np.real(moon_ifft)
plt.figure(figsize=(12,11))
plt.imshow(moon_result,cmap = 'gray')
原圖:
稍微去噪後:
二、定積分求圓周率Π
#2 求積分 求pi
#x**2 + y**2 = 1 #圓心在原點 y = (1 - x**2)^0.5
#pi = 面積*2
x = np.linspace(-1,1,1000)
f = lambda x : (1 - x**2)**0.5
plt.figure(figsize = (4,4) )
plt.plot(x,f(x),x,-f(x),'b')
import scipy.integrate as integrate
pi_1,err = integrate.quad(f,-1,1) #積分值 誤差
print("pi:",pi_1*2)
#pi: 3.141592653589797
精確到小數點後14位,效果還不錯
三、其他積分題練習
同理,我們可以試着求一些其他的積分問題:
而且步驟基本都是固定的,關鍵是確定函數,和積分區間.
這裏拿《接力題典1800》的題來練練手
#x = np.linspace(0,1,1000) #確定積分範圍(1000可理解爲細分1000個等距區間)
x = np.linspace(0,0.9999,1000) #這裏積分上限不能選取到1
f = lambda x : (x/(1-x))**0.5 #確定函數,最關鍵的一步
plt.plot(x,f(x)) #繪製圖形
import scipy.integrate as integrate
ans,err = integrate.quad(f,0,1) #積分值 誤差
注意:
這裏積分上限取到1會報錯:RuntimeWarning: divide by zero encountered in true_divide
結果:
結果是pi/2,可見其結果基本正確!
要是積分裏有三角函數怎麼辦?NumPy 三角函數
要是遇到對數怎麼辦?np.log(x)
只要多嘗試,都是有辦法的
那麼,可以說,但凡想驗證個積分題的結果大致範圍,這個方法都能實現!
部分參考來源:
千鋒教育