【數學知識】函數與複合函數編程實現

本博客適合高中學生入門編程知識學習,從高中的數學概念轉換到其python實現,提高自身對編程的學習興趣。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 在jupyter notebook顯示圖片

1、函數定義

我們可以將函數(functions)想象成一臺機器f ,每當我們向機器提供輸入x,這臺機器便會產生輸出y。

這臺機器所能接受的所有輸入x的集合稱爲定義域(domain),其所有可能輸出y的集合稱爲值域(range)。函數的定義域和值域有着非常重要的意義,如果我們知道一個函數的定義域,便不會將不合適的輸入丟給函數;知道函數的值域,便能判斷一個值是否可能是這個函數所輸出的。

多項式

# 多項式
# 初中:一元一次函數 y = k*x+b
def f1(x):
    y = 2*x+3  # k=2, b=3
    return y

x = 100
print(f1(100))
203

三次多項式:

f(x)=x35x2+9 f(x)=x^3-5x^2+9

# 三次多項式
def f3(x):
    return x**3 - 5*x**2 + 9  # *:乘號 **:求次方
# 畫圖
x = np.linspace(-100, 100, num = 1000)
y = f3(x)
plt.plot(x,y)

結果如下:
在這裏插入圖片描述

# 5次多項式
def f5(x):
    return 5*x**5+4*x**3+x**3 - 5*x**2 + 9  # *:乘號 **:求次方
y = f5(x)
plt.plot(x,y)

在這裏插入圖片描述

指數函數與對數函數

兩個常用的常數:

歐拉常數e
e=2.718281828459045 e = 2.718281828459045
圓周率pi
π=3.141592653589793 \pi = 3.141592653589793

# 歐拉常數e
print(np.e)  # e=2.71828
# pi
print(np.pi)  # pi=3.1415926
# 指數函數
def exp(x):
    y = np.e**x  # np.e 就是歐拉常數
    return y  # y>0
y = exp(x)
plt.plot(x,y)

結果如下:
在這裏插入圖片描述

print(exp(0))
1.0
print(exp(-10000))
0.0

exe^x的本質:
ex=x0/0!+x1/1!+x2/2!+x3/3!+...+xn/n! e^x={x^0}/{0!}+{x^1}/{1!}+{x^2}/{2!}+{x^3}/{3!}+...+{x^n}/{n!}

對數函數是指數函數的反函數
如果 y=exy=e^x
那麼 x=ln(y)x=ln(y), y>0

x = np.linspace(0.0001,100,1000,endpoint = False)
y1 = np.log2(x)  # 以2爲底
y2 = np.log(x)   # 以e爲底
y3 = np.log10(x)  # 以10爲底
plt.plot(x,y1,'red',x,y2,'yellow',x,y3,'blue')

在這裏插入圖片描述

正弦函數

正弦函數:
y=sin(x) y = sin(x)
以及它的變形
y=Asin(ωx+θ) y = Asin({\omega}x+\theta)

x = np.linspace(-10, 10, num = 1000)
y = np.sin(x)
plt.plot(x,y)

結果如下:
在這裏插入圖片描述

餘弦函數:
y=cos(x)=sin(x+π/2) y = cos(x)=sin(x+{\pi}/2)
以及它的變形
y=Acos(ωx+θ) y = Acos({\omega}x+\theta)

y1 = np.sin(x)   # sin(x)
y2 = np.cos(x)  # cos(x)
plt.plot(x,y1,'red',x,y2,'blue')

下圖中紅色爲sin(x),藍色爲cos(x):
在這裏插入圖片描述

2、複合函數

函數f(x)f(x)g(x)g(x)的複合fg(x)fg(x):,可以理解爲首先將輸入xx給函數g(x)g(x)獲得輸出y1後將其進而輸入給函數f(x)f(x),最終獲得結果yy。例如:

f(x)=1/x f(x) = 1/x

g(x)=ex+1 g(x) = e^{-x}+1

fg(x)=f(g(x))=1/(1+ex) fg(x) = f(g(x)) = 1/(1+e^{-x})
這個複合函數實際上是sigmoid(x)sigmoid(x)
鏈式法則是微積分中的求導法則,用於求一個複合函數的導數
採用複合函數表示十分複雜的函數,有利於我們進行求導運算!
同時,在編程過程中,採用複合函數,將一個複雜的問題分解爲若干個階段的函數,有利於編程調試,容易發現邏輯錯誤!

def f(x):
    y = 1/x
    return y
def g(x):
    y = np.exp(-x)+1
    return y
# 這是一個複合函數
def sigmoid(x):
    return f(g(x))
x = 1
print(sigmoid(x))
0.7310585786300049
x = np.linspace(-10, 10, num = 10000)
y = sigmoid(x)
plt.plot(x,y)

在這裏插入圖片描述

另一個常用的複合函數softplus(x)softplus(x)

f(x)=log(x) f(x) = log(x)

g(x)=1+ex g(x) = 1+e^x

fg(x)=f(g(x))=log(1+ex) fg(x) = f(g(x)) = log(1+e^x)

def f(x):
    y = np.log(x)
    return y
def g(x):
    y = np.exp(x)+1
    return y
# 這是一個複合函數
def softplus(x):
    return f(g(x))
x = 1
print(softplus(x))
1.3132616875182228
x = np.linspace(-10, 10, num = 10000)
y = softplus(x)
plt.plot(x,y)

在這裏插入圖片描述
【作者簡介】陳藝榮,男,目前在華南理工大學電子與信息學院廣東省人體數據科學工程技術研究中心攻讀博士,擔任IEEE Access、IEEE Photonics Journal的審稿人。兩次獲得美國大學生數學建模競賽(MCM)一等獎,獲得2017年全國大學生數學建模競賽(廣東賽區)一等獎、2018年廣東省大學生電子設計競賽一等獎等科技競賽獎項,主持一項2017-2019年國家級大學生創新訓練項目獲得優秀結題,參與兩項廣東大學生科技創新培育專項資金、一項2018-2019年國家級大學生創新訓練項目獲得良好結題,發表SCI論文4篇,授權實用新型專利8項,受理髮明專利13項。
我的主頁
我的Github
我的CSDN博客
我的Linkedin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章