Dalam tutorial ini, kita belajar cara menggunakan eksponen dengan Python. Menaikkan angka ke pangkat dua sedikit lebih rumit daripada perkalian normal. Sederhananya, eksponen adalah berapa kali angka tersebut dikalikan dengan dirinya sendiri. Kita bisa menggunakan tiga cara berbeda di Python untuk melakukannya. Mari kita lihat apa saja cara-cara itu
Daftar Isi
- Apa itu eksponen?
- Menggunakan ** operator untuk eksponen
- Menggunakan fungsi pow() untuk eksponen Python
- Menggunakan matematika. pow() fungsi untuk eksponen Python
- Menutup pikiran
Apa itu eksponen?
Dalam istilah Matematika, eksponen mengacu pada angka yang ditempatkan sebagai superskrip angka. Dikatakan berapa kali bilangan dasar harus dikalikan dengan dirinya sendiri. Eksponensial ditulis sebagai mⁿ dan diucapkan sebagai "m pangkat n". Di sini "n" adalah eksponen dan "m" adalah basisnya. Artinya m adalah dikalikan dengan m, n berapa kali. Kita tidak dapat menyelesaikan eksponen seperti biasanya kita melakukan perkalian dengan Python
Tentunya, untuk 2^3 kita dapat mengalikan 2, 3 kali dan mendapatkan hasil tetapi akan gagal ketika kita berhadapan dengan angka yang lebih besar. Jadi, kita membutuhkan cara yang tepat untuk memecahkan eksponen
Menggunakan operator eksponen dengan Python
Operator eksponen atau operator pangkat bekerja pada dua nilai. Satu disebut basis dan yang lainnya adalah eksponen. Seperti yang dijelaskan sebelumnya, eksponen menunjukkan berapa kali basis harus dikalikan dengan dirinya sendiri
Sintaksis
m ** nDi sini, operator eksponen menaikkan variabel kedua pangkat variabel pertama
Contoh
m = 3 n = 2 p = m ** n print ("On solving the exponent, we get ", p)_Keluaran
On solving the exponent, we get 8Menggunakan fungsi pow() untuk eksponen Python
Python memiliki fungsi bawaan yang berguna untuk menghitung daya. pow(). Ini menerima dua parameter yang merupakan basis dan eksponen. Ini mengembalikan modulus hasil. Hasilnya akan selalu bilangan bulat positif
Sintaksis
pow(m,n)Di sini, "m" adalah basis (angka yang dipangkatkan dengan eksponen) dan "n" adalah eksponen (angka yang dipangkatkan basisnya)
Memasukkan
m = 2 n = 3 p = pow(m,n) print ("The answer is: ", p)_Keluaran
The answer is: 8Menggunakan matematika. pow() fungsi untuk eksponen Python
Python memiliki fungsi lain matematika. pow() yang memungkinkan Anda memecahkan eksponen. Itu juga menerima dua parameter. basis dan eksponen. Perbedaan utama antara pow() dan matematika. pow() adalah matematika itu. pow() mengubah kedua variabel menjadi floating point dan selalu mengembalikan float
Sintaksis
math.pow(m,n)_Memasukkan
m = 2 n = 3 p = math.pow(m,n) print ("The answer is: ", p)Keluaran
The answer is: 8.0_Menutup pikiran
Melakukan Matematika dengan Python itu mudah, tetapi menghitung eksponen dengan Python sedikit rumit. Kami telah belajar cara menggunakan eksponen dengan Python. Tapi ingat dengan Python, itu akan mengembalikan kesalahan pembagian nol jika kita menaikkan 0 ke pangkat apa pun. Python juga memiliki operator matematika lainnya, dan Anda dapat membacanya di sini
Jika Anda memiliki kumpulan titik data yang tampaknya meningkat dengan cepat, mungkin berguna untuk menyesuaikannya dengan garis yang halus dan meningkat secara eksponensial untuk menggambarkan bentuk umum data.
Garis yang perlu Anda paskan untuk mencapai bentuk ini akan menjadi salah satu yang dijelaskan oleh fungsi eksponensial, yaitu fungsi apa pun dari bentuk tersebut
\(y = AB^x + C\)
atau
\(y = ae^{bx} + c\)
(keduanya setara secara matematis karena \(AB^x = Ae^{x\ln(B)}\)). Hal penting yang harus disadari adalah bahwa fungsi eksponensial dapat didefinisikan sepenuhnya dengan tiga konstanta. Kami akan menggunakan formulasi kedua, yang dapat ditulis dengan Python sebagai import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')7 di mana import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')8 adalah fungsi eksponensial \(e^x\) dari paket Numpy (berganti nama menjadi import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')9 dalam contoh kami)
Untuk tutorial ini, mari buat beberapa data palsu untuk digunakan sebagai contoh. Ini harus berupa kumpulan poin yang meningkat secara eksponensial (atau upaya kami untuk menyesuaikan kurva eksponensial dengannya tidak akan berhasil dengan baik. ) dengan beberapa derau acak yang dilemparkan untuk meniru data dunia nyata
import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 50 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noiseKebisingan acak ditambahkan dengan fungsi import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)0 dari Numpy yang mengambil sampel acak dari distribusi normal (Gaussian). Mari kita lihat seperti apa contoh data ini di sebar plot
import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')_Metode ini hanya bekerja ketika \(c = 0\), yaitu ketika Anda ingin menyesuaikan kurva dengan persamaan \(y = ae^{bx}\) ke data Anda. Jika Anda ingin mencocokkan kurva dengan persamaan \(y = ae^{bx} + c\) dengan \(c \neq 0\) Anda harus menggunakan metode 2
Perintah import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)_1 dari Numpy digunakan untuk mencocokkan fungsi polinomial dengan data. Ini mungkin terlihat sedikit aneh. mengapa kita mencoba menyesuaikan fungsi polinomial dengan data saat kita ingin menyesuaikan fungsi eksponensial?
\(y = ae^{bx} \menyiratkan \ln(y) = \ln(a) + bx\)
karena kita dapat mengambil logaritma natural dari kedua sisi. Ini menciptakan persamaan linier \(f(x) = mx + c\) di mana
- \(f(x) = \ln(y)\)
- \(m = b\)
- \(c = \ln(a)\)
Jadi import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)1 dapat digunakan untuk mencocokkan \(\ln(y)\) dengan \(x\)
import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)Polinomial ini sekarang dapat diubah kembali menjadi eksponensial
# Convert the polynomial back into an exponential a = np.exp(p[1]) b = p[0] x_fitted = np.linspace(np.min(x), np.max(x), 100) y_fitted = a * np.exp(b * x_fitted)Mari kita lihat kecocokannya
import matplotlib.pyplot as plt ax = plt.axes() ax.scatter(x, y, label='Raw data') ax.plot(x_fitted, y_fitted, 'k', label='Fitted curve') ax.set_title('Using polyfit() to fit an exponential function') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values') ax.legend()Metode ini memiliki kelemahan karena terlalu menekankan nilai-nilai kecil. titik-titik yang memiliki nilai besar dan yang relatif dekat dengan garis linear paling cocok yang dibuat oleh import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)1 menjadi lebih jauh dari garis paling cocok ketika polinomial diubah kembali menjadi eksponensial. Tindakan mengubah fungsi polinomial menjadi fungsi eksponensial memiliki efek meningkatkan nilai besar lebih banyak daripada nilai kecil, dan dengan demikian memiliki efek meningkatkan jarak ke kurva pas untuk nilai besar lebih dari pada nilai kecil. Ini dapat dikurangi dengan menambahkan 'bobot' sebanding dengan \(y\). beri tahu import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)_1 untuk lebih mementingkan poin data dengan nilai y yang besar
# Fit a weighted polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1, w=np.sqrt(y)) # Convert the polynomial back into an exponential a = np.exp(p[1]) b = p[0] x_fitted_weighted = np.linspace(np.min(x), np.max(x), 100) y_fitted_weighted = a * np.exp(b * x_fitted_weighted) # Plot ax = plt.axes() ax.scatter(x, y, label='Raw data') ax.plot(x_fitted, y_fitted, 'k', label='Fitted curve, unweighted') ax.plot(x_fitted_weighted, y_fitted_weighted, 'k--', label='Fitted curve, weighted') ax.set_title('Using polyfit() to fit an exponential function') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values') ax.legend()Menggunakan beban telah meningkatkan kecocokan
Dari paket Scipy kita bisa mendapatkan fungsi import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)5. Ini lebih umum daripada import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)_1 (kita dapat memasukkan jenis fungsi apa pun yang kita suka, eksponensial atau tidak) tetapi ini lebih rumit karena terkadang kita perlu memberikan tebakan awal seperti apa konstanta agar dapat berfungsi
Mari gunakan data contoh asli kita (dengan \(c \neq 0\))
import numpy as np import matplotlib.pyplot as plt # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 50 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')Sekarang mari kita cocokkan fungsinya \(y = ae^{bx} + c\). Ini dilakukan dengan mendefinisikannya sebagai fungsi lambda (yaitu sebagai objek dan bukan sebagai perintah) dari variabel dummy \(t\) dan menggunakan fungsi import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)5 untuk menyesuaikan objek ini dengan data x dan y. Perhatikan bahwa fungsi import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)_5 perlu diimpor dari sub-paket import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)9
Perhatikan bahwa kita perlu menghapus nilai apa pun yang sama dengan nol dari data y kita (dan nilai x yang sesuai dari data x) agar ini berfungsi, meskipun tidak ada satu pun dari ini dalam data contoh ini jadi itu
Output pertama, # Convert the polynomial back into an exponential a = np.exp(p[1]) b = p[0] x_fitted = np.linspace(np.min(x), np.max(x), 100) y_fitted = a * np.exp(b * x_fitted)0, adalah daftar nilai yang dioptimalkan untuk parameter yang, dalam kasus kami, adalah konstanta \(a\), \(b\) dan \(c\)
a = popt[0] b = popt[1] c = popt[2]Mari kita lihat seperti apa ini
# Create the fitted curve x_fitted = np.linspace(np.min(x), np.max(x), 100) y_fitted = a * np.exp(b * x_fitted) + c # Plot ax = plt.axes() ax.scatter(x, y, label='Raw data') ax.plot(x_fitted, y_fitted, 'k', label='Fitted curve') ax.set_title(r'Using curve\_fit() to fit an exponential function') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values') ax.legend()Ini terlihat sangat bagus, dan kami tidak perlu memberikan tebakan awal. Ini karena contoh data yang kami gunakan cukup dekat dengan sifat eksponensial sehingga algoritme pengoptimalan di belakang import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)5 dapat menyesuaikan kurva tanpa sengaja memilih minimum lokal yang salah. Ini tidak selalu terjadi, jadi inilah cara melakukannya dengan tebakan awal yang disediakan
import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')0import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')1Mari plot ketiga metode satu sama lain menggunakan data contoh yang sama (\(c = 0\)) untuk masing-masing
import matplotlib.pyplot as plt # Formatting options for plots A = 6 # Want figure to be A6 plt.rc('figure', figsize=[46.82 * .5**(.5 * A), 33.11 * .5**(.5 * A)]) plt.rc('text', usetex=True) plt.rc('font', family='serif') plt.rc('text.latex', preamble=r'\usepackage{textgreek}') # Create a plot ax = plt.axes() ax.scatter(x, y) ax.set_title('Example Data') ax.set_ylabel('y-Values') ax.set_ylim(0, 500) ax.set_xlabel('x-Values')_2Seperti yang Anda lihat, metode import numpy as np # Set a seed for the random number generator so we get the same random numbers each time np.random.seed(20210706) # Create fake x-data x = np.arange(10) # Create fake y-data a = 4.5 b = 0.5 c = 0 y = a * np.exp(b * x) + c # Use the second formulation from above y = y + np.random.normal(scale=np.sqrt(np.max(y)), size=len(x)) # Add noise # Fit a polynomial of degree 1 (a linear function) to the data p = np.polyfit(x, np.log(y), 1)_5 telah memberi kita perkiraan terbaik dari perilaku eksponensial dasar yang sebenarnya
Kita dapat menggunakan kurva pas untuk memperkirakan seperti apa data kita untuk nilai lain dari \(x\) yang tidak ada dalam kumpulan data mentah kita. berapa nilainya di \(x=11\) (yang berada di luar domain kita dan karenanya mengharuskan kita untuk meramalkan ke masa depan) atau \(x = 8. 5\) (yang ada di dalam domain kita dan karenanya mengharuskan kita untuk 'mengisi celah' dalam data kita)?