mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-02-25 02:18:39 +00:00
Compare commits
6 Commits
b77e6adf3a
...
0ef9306976
Author | SHA1 | Date | |
---|---|---|---|
|
0ef9306976 | ||
|
a0b642cfe5 | ||
|
e406801f9e | ||
|
4a83e3f0b1 | ||
|
46454e204c | ||
|
dbaff34572 |
@ -3,4 +3,6 @@ ARG VARIANT=3.11-bookworm
|
|||||||
FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT}
|
FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT}
|
||||||
COPY requirements.txt /tmp/pip-tmp/
|
COPY requirements.txt /tmp/pip-tmp/
|
||||||
RUN python3 -m pip install --upgrade pip \
|
RUN python3 -m pip install --upgrade pip \
|
||||||
&& python3 -m pip install --no-cache-dir install ruff -r /tmp/pip-tmp/requirements.txt
|
&& python3 -m pip install --no-cache-dir install -r /tmp/pip-tmp/requirements.txt \
|
||||||
|
&& pipx install pre-commit ruff \
|
||||||
|
&& pre-commit install
|
||||||
|
@ -511,7 +511,7 @@
|
|||||||
* Lstm
|
* Lstm
|
||||||
* [Lstm Prediction](machine_learning/lstm/lstm_prediction.py)
|
* [Lstm Prediction](machine_learning/lstm/lstm_prediction.py)
|
||||||
* [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py)
|
* [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py)
|
||||||
* [Polymonial Regression](machine_learning/polymonial_regression.py)
|
* [Polynomial Regression](machine_learning/polynomial_regression.py)
|
||||||
* [Scoring Functions](machine_learning/scoring_functions.py)
|
* [Scoring Functions](machine_learning/scoring_functions.py)
|
||||||
* [Self Organizing Map](machine_learning/self_organizing_map.py)
|
* [Self Organizing Map](machine_learning/self_organizing_map.py)
|
||||||
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
|
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
|
||||||
@ -741,6 +741,7 @@
|
|||||||
|
|
||||||
## Physics
|
## Physics
|
||||||
* [Archimedes Principle](physics/archimedes_principle.py)
|
* [Archimedes Principle](physics/archimedes_principle.py)
|
||||||
|
* [Basic Orbital Capture](physics/basic_orbital_capture.py)
|
||||||
* [Casimir Effect](physics/casimir_effect.py)
|
* [Casimir Effect](physics/casimir_effect.py)
|
||||||
* [Centripetal Force](physics/centripetal_force.py)
|
* [Centripetal Force](physics/centripetal_force.py)
|
||||||
* [Grahams Law](physics/grahams_law.py)
|
* [Grahams Law](physics/grahams_law.py)
|
||||||
@ -1062,7 +1063,6 @@
|
|||||||
* [Q Fourier Transform](quantum/q_fourier_transform.py)
|
* [Q Fourier Transform](quantum/q_fourier_transform.py)
|
||||||
* [Q Full Adder](quantum/q_full_adder.py)
|
* [Q Full Adder](quantum/q_full_adder.py)
|
||||||
* [Quantum Entanglement](quantum/quantum_entanglement.py)
|
* [Quantum Entanglement](quantum/quantum_entanglement.py)
|
||||||
* [Quantum Random](quantum/quantum_random.py)
|
|
||||||
* [Quantum Teleportation](quantum/quantum_teleportation.py)
|
* [Quantum Teleportation](quantum/quantum_teleportation.py)
|
||||||
* [Ripple Adder Classic](quantum/ripple_adder_classic.py)
|
* [Ripple Adder Classic](quantum/ripple_adder_classic.py)
|
||||||
* [Single Qubit Measure](quantum/single_qubit_measure.py)
|
* [Single Qubit Measure](quantum/single_qubit_measure.py)
|
||||||
|
@ -10,13 +10,13 @@ primes = {
|
|||||||
5: {
|
5: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
||||||
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
||||||
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
||||||
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
||||||
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
||||||
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
||||||
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF",
|
"670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
@ -25,16 +25,16 @@ primes = {
|
|||||||
14: {
|
14: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
||||||
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
||||||
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
||||||
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
||||||
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
||||||
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
||||||
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
||||||
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
||||||
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
"DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
||||||
+ "15728E5A8AACAA68FFFFFFFFFFFFFFFF",
|
"15728E5A8AACAA68FFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
@ -43,21 +43,21 @@ primes = {
|
|||||||
15: {
|
15: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
||||||
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
||||||
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
||||||
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
||||||
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
||||||
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
||||||
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
||||||
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
||||||
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
"DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
||||||
+ "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
||||||
+ "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
||||||
+ "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
||||||
+ "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
||||||
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
||||||
+ "43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF",
|
"43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
@ -66,27 +66,27 @@ primes = {
|
|||||||
16: {
|
16: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
||||||
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
||||||
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
||||||
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
||||||
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
||||||
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
||||||
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
||||||
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
||||||
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
"DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
||||||
+ "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
||||||
+ "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
||||||
+ "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
||||||
+ "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
||||||
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
||||||
+ "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
|
"43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
|
||||||
+ "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
|
"88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
|
||||||
+ "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
|
"2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
|
||||||
+ "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
|
"287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
|
||||||
+ "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
|
"1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
|
||||||
+ "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
|
"93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199"
|
||||||
+ "FFFFFFFFFFFFFFFF",
|
"FFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
@ -95,33 +95,33 @@ primes = {
|
|||||||
17: {
|
17: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08"
|
||||||
+ "8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
|
"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B"
|
||||||
+ "302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
|
"302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9"
|
||||||
+ "A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
|
"A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6"
|
||||||
+ "49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
|
"49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8"
|
||||||
+ "FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
|
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C"
|
||||||
+ "180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
|
"180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718"
|
||||||
+ "3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
|
"3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D"
|
||||||
+ "04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
|
"04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D"
|
||||||
+ "B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
|
"B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226"
|
||||||
+ "1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
"1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
||||||
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
|
"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC"
|
||||||
+ "E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
|
"E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26"
|
||||||
+ "99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
|
"99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB"
|
||||||
+ "04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
|
"04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2"
|
||||||
+ "233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
|
"233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127"
|
||||||
+ "D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
|
"D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
|
||||||
+ "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406"
|
"36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406"
|
||||||
+ "AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918"
|
"AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918"
|
||||||
+ "DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151"
|
"DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151"
|
||||||
+ "2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03"
|
"2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03"
|
||||||
+ "F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F"
|
"F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F"
|
||||||
+ "BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
|
"BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
|
||||||
+ "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B"
|
"CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B"
|
||||||
+ "B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632"
|
"B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632"
|
||||||
+ "387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E"
|
"387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E"
|
||||||
+ "6DCC4024FFFFFFFFFFFFFFFF",
|
"6DCC4024FFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
@ -130,48 +130,48 @@ primes = {
|
|||||||
18: {
|
18: {
|
||||||
"prime": int(
|
"prime": int(
|
||||||
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
|
||||||
+ "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
"29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
|
||||||
+ "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
|
||||||
+ "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
|
||||||
+ "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
|
||||||
+ "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
|
||||||
+ "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
"83655D23DCA3AD961C62F356208552BB9ED529077096966D"
|
||||||
+ "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
|
||||||
+ "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
|
||||||
+ "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
"DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
|
||||||
+ "15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64"
|
||||||
+ "ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7"
|
||||||
+ "ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B"
|
||||||
+ "F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C"
|
||||||
+ "BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31"
|
||||||
+ "43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
|
"43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7"
|
||||||
+ "88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
|
"88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA"
|
||||||
+ "2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
|
"2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6"
|
||||||
+ "287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
|
"287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED"
|
||||||
+ "1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
|
"1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9"
|
||||||
+ "93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
|
"93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492"
|
||||||
+ "36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD"
|
"36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD"
|
||||||
+ "F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831"
|
"F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831"
|
||||||
+ "179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B"
|
"179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B"
|
||||||
+ "DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF"
|
"DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF"
|
||||||
+ "5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6"
|
"5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6"
|
||||||
+ "D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3"
|
"D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3"
|
||||||
+ "23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
|
"23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA"
|
||||||
+ "CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328"
|
"CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328"
|
||||||
+ "06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C"
|
"06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C"
|
||||||
+ "DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE"
|
"DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE"
|
||||||
+ "12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4"
|
"12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4"
|
||||||
+ "38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300"
|
"38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300"
|
||||||
+ "741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568"
|
"741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568"
|
||||||
+ "3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
|
"3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9"
|
||||||
+ "22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B"
|
"22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B"
|
||||||
+ "4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A"
|
"4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A"
|
||||||
+ "062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36"
|
"062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36"
|
||||||
+ "4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1"
|
"4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1"
|
||||||
+ "B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92"
|
"B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92"
|
||||||
+ "4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47"
|
"4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47"
|
||||||
+ "9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
|
"9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71"
|
||||||
+ "60C980DD98EDD3DFFFFFFFFFFFFFFFFF",
|
"60C980DD98EDD3DFFFFFFFFFFFFFFFFF",
|
||||||
base=16,
|
base=16,
|
||||||
),
|
),
|
||||||
"generator": 2,
|
"generator": 2,
|
||||||
|
@ -150,7 +150,7 @@ def reverse_bwt(bwt_string: str, idx_original_string: int) -> str:
|
|||||||
raise ValueError("The parameter idx_original_string must not be lower than 0.")
|
raise ValueError("The parameter idx_original_string must not be lower than 0.")
|
||||||
if idx_original_string >= len(bwt_string):
|
if idx_original_string >= len(bwt_string):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
"The parameter idx_original_string must be lower than" " len(bwt_string)."
|
"The parameter idx_original_string must be lower than len(bwt_string)."
|
||||||
)
|
)
|
||||||
|
|
||||||
ordered_rotations = [""] * len(bwt_string)
|
ordered_rotations = [""] * len(bwt_string)
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
import pandas as pd
|
|
||||||
from matplotlib import pyplot as plt
|
|
||||||
from sklearn.linear_model import LinearRegression
|
|
||||||
|
|
||||||
# Splitting the dataset into the Training set and Test set
|
|
||||||
from sklearn.model_selection import train_test_split
|
|
||||||
|
|
||||||
# Fitting Polynomial Regression to the dataset
|
|
||||||
from sklearn.preprocessing import PolynomialFeatures
|
|
||||||
|
|
||||||
# Importing the dataset
|
|
||||||
dataset = pd.read_csv(
|
|
||||||
"https://s3.us-west-2.amazonaws.com/public.gamelab.fun/dataset/"
|
|
||||||
"position_salaries.csv"
|
|
||||||
)
|
|
||||||
X = dataset.iloc[:, 1:2].values
|
|
||||||
y = dataset.iloc[:, 2].values
|
|
||||||
|
|
||||||
|
|
||||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
|
|
||||||
|
|
||||||
|
|
||||||
poly_reg = PolynomialFeatures(degree=4)
|
|
||||||
X_poly = poly_reg.fit_transform(X)
|
|
||||||
pol_reg = LinearRegression()
|
|
||||||
pol_reg.fit(X_poly, y)
|
|
||||||
|
|
||||||
|
|
||||||
# Visualizing the Polymonial Regression results
|
|
||||||
def viz_polymonial():
|
|
||||||
plt.scatter(X, y, color="red")
|
|
||||||
plt.plot(X, pol_reg.predict(poly_reg.fit_transform(X)), color="blue")
|
|
||||||
plt.title("Truth or Bluff (Linear Regression)")
|
|
||||||
plt.xlabel("Position level")
|
|
||||||
plt.ylabel("Salary")
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
viz_polymonial()
|
|
||||||
|
|
||||||
# Predicting a new result with Polymonial Regression
|
|
||||||
pol_reg.predict(poly_reg.fit_transform([[5.5]]))
|
|
||||||
# output should be 132148.43750003
|
|
213
machine_learning/polynomial_regression.py
Normal file
213
machine_learning/polynomial_regression.py
Normal file
@ -0,0 +1,213 @@
|
|||||||
|
"""
|
||||||
|
Polynomial regression is a type of regression analysis that models the relationship
|
||||||
|
between a predictor x and the response y as an mth-degree polynomial:
|
||||||
|
|
||||||
|
y = β₀ + β₁x + β₂x² + ... + βₘxᵐ + ε
|
||||||
|
|
||||||
|
By treating x, x², ..., xᵐ as distinct variables, we see that polynomial regression is a
|
||||||
|
special case of multiple linear regression. Therefore, we can use ordinary least squares
|
||||||
|
(OLS) estimation to estimate the vector of model parameters β = (β₀, β₁, β₂, ..., βₘ)
|
||||||
|
for polynomial regression:
|
||||||
|
|
||||||
|
β = (XᵀX)⁻¹Xᵀy = X⁺y
|
||||||
|
|
||||||
|
where X is the design matrix, y is the response vector, and X⁺ denotes the Moore–Penrose
|
||||||
|
pseudoinverse of X. In the case of polynomial regression, the design matrix is
|
||||||
|
|
||||||
|
|1 x₁ x₁² ⋯ x₁ᵐ|
|
||||||
|
X = |1 x₂ x₂² ⋯ x₂ᵐ|
|
||||||
|
|⋮ ⋮ ⋮ ⋱ ⋮ |
|
||||||
|
|1 xₙ xₙ² ⋯ xₙᵐ|
|
||||||
|
|
||||||
|
In OLS estimation, inverting XᵀX to compute X⁺ can be very numerically unstable. This
|
||||||
|
implementation sidesteps this need to invert XᵀX by computing X⁺ using singular value
|
||||||
|
decomposition (SVD):
|
||||||
|
|
||||||
|
β = VΣ⁺Uᵀy
|
||||||
|
|
||||||
|
where UΣVᵀ is an SVD of X.
|
||||||
|
|
||||||
|
References:
|
||||||
|
- https://en.wikipedia.org/wiki/Polynomial_regression
|
||||||
|
- https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse
|
||||||
|
- https://en.wikipedia.org/wiki/Numerical_methods_for_linear_least_squares
|
||||||
|
- https://en.wikipedia.org/wiki/Singular_value_decomposition
|
||||||
|
"""
|
||||||
|
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
class PolynomialRegression:
|
||||||
|
__slots__ = "degree", "params"
|
||||||
|
|
||||||
|
def __init__(self, degree: int) -> None:
|
||||||
|
"""
|
||||||
|
@raises ValueError: if the polynomial degree is negative
|
||||||
|
"""
|
||||||
|
if degree < 0:
|
||||||
|
raise ValueError("Polynomial degree must be non-negative")
|
||||||
|
|
||||||
|
self.degree = degree
|
||||||
|
self.params = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _design_matrix(data: np.ndarray, degree: int) -> np.ndarray:
|
||||||
|
"""
|
||||||
|
Constructs a polynomial regression design matrix for the given input data. For
|
||||||
|
input data x = (x₁, x₂, ..., xₙ) and polynomial degree m, the design matrix is
|
||||||
|
the Vandermonde matrix
|
||||||
|
|
||||||
|
|1 x₁ x₁² ⋯ x₁ᵐ|
|
||||||
|
X = |1 x₂ x₂² ⋯ x₂ᵐ|
|
||||||
|
|⋮ ⋮ ⋮ ⋱ ⋮ |
|
||||||
|
|1 xₙ xₙ² ⋯ xₙᵐ|
|
||||||
|
|
||||||
|
Reference: https://en.wikipedia.org/wiki/Vandermonde_matrix
|
||||||
|
|
||||||
|
@param data: the input predictor values x, either for model fitting or for
|
||||||
|
prediction
|
||||||
|
@param degree: the polynomial degree m
|
||||||
|
@returns: the Vandermonde matrix X (see above)
|
||||||
|
@raises ValueError: if input data is not N x 1
|
||||||
|
|
||||||
|
>>> x = np.array([0, 1, 2])
|
||||||
|
>>> PolynomialRegression._design_matrix(x, degree=0)
|
||||||
|
array([[1],
|
||||||
|
[1],
|
||||||
|
[1]])
|
||||||
|
>>> PolynomialRegression._design_matrix(x, degree=1)
|
||||||
|
array([[1, 0],
|
||||||
|
[1, 1],
|
||||||
|
[1, 2]])
|
||||||
|
>>> PolynomialRegression._design_matrix(x, degree=2)
|
||||||
|
array([[1, 0, 0],
|
||||||
|
[1, 1, 1],
|
||||||
|
[1, 2, 4]])
|
||||||
|
>>> PolynomialRegression._design_matrix(x, degree=3)
|
||||||
|
array([[1, 0, 0, 0],
|
||||||
|
[1, 1, 1, 1],
|
||||||
|
[1, 2, 4, 8]])
|
||||||
|
>>> PolynomialRegression._design_matrix(np.array([[0, 0], [0 , 0]]), degree=3)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Data must have dimensions N x 1
|
||||||
|
"""
|
||||||
|
rows, *remaining = data.shape
|
||||||
|
if remaining:
|
||||||
|
raise ValueError("Data must have dimensions N x 1")
|
||||||
|
|
||||||
|
return np.vander(data, N=degree + 1, increasing=True)
|
||||||
|
|
||||||
|
def fit(self, x_train: np.ndarray, y_train: np.ndarray) -> None:
|
||||||
|
"""
|
||||||
|
Computes the polynomial regression model parameters using ordinary least squares
|
||||||
|
(OLS) estimation:
|
||||||
|
|
||||||
|
β = (XᵀX)⁻¹Xᵀy = X⁺y
|
||||||
|
|
||||||
|
where X⁺ denotes the Moore–Penrose pseudoinverse of the design matrix X. This
|
||||||
|
function computes X⁺ using singular value decomposition (SVD).
|
||||||
|
|
||||||
|
References:
|
||||||
|
- https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse
|
||||||
|
- https://en.wikipedia.org/wiki/Singular_value_decomposition
|
||||||
|
- https://en.wikipedia.org/wiki/Multicollinearity
|
||||||
|
|
||||||
|
@param x_train: the predictor values x for model fitting
|
||||||
|
@param y_train: the response values y for model fitting
|
||||||
|
@raises ArithmeticError: if X isn't full rank, then XᵀX is singular and β
|
||||||
|
doesn't exist
|
||||||
|
|
||||||
|
>>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
||||||
|
>>> y = x**3 - 2 * x**2 + 3 * x - 5
|
||||||
|
>>> poly_reg = PolynomialRegression(degree=3)
|
||||||
|
>>> poly_reg.fit(x, y)
|
||||||
|
>>> poly_reg.params
|
||||||
|
array([-5., 3., -2., 1.])
|
||||||
|
>>> poly_reg = PolynomialRegression(degree=20)
|
||||||
|
>>> poly_reg.fit(x, y)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ArithmeticError: Design matrix is not full rank, can't compute coefficients
|
||||||
|
|
||||||
|
Make sure errors don't grow too large:
|
||||||
|
>>> coefs = np.array([-250, 50, -2, 36, 20, -12, 10, 2, -1, -15, 1])
|
||||||
|
>>> y = PolynomialRegression._design_matrix(x, len(coefs) - 1) @ coefs
|
||||||
|
>>> poly_reg = PolynomialRegression(degree=len(coefs) - 1)
|
||||||
|
>>> poly_reg.fit(x, y)
|
||||||
|
>>> np.allclose(poly_reg.params, coefs, atol=10e-3)
|
||||||
|
True
|
||||||
|
"""
|
||||||
|
X = PolynomialRegression._design_matrix(x_train, self.degree) # noqa: N806
|
||||||
|
_, cols = X.shape
|
||||||
|
if np.linalg.matrix_rank(X) < cols:
|
||||||
|
raise ArithmeticError(
|
||||||
|
"Design matrix is not full rank, can't compute coefficients"
|
||||||
|
)
|
||||||
|
|
||||||
|
# np.linalg.pinv() computes the Moore–Penrose pseudoinverse using SVD
|
||||||
|
self.params = np.linalg.pinv(X) @ y_train
|
||||||
|
|
||||||
|
def predict(self, data: np.ndarray) -> np.ndarray:
|
||||||
|
"""
|
||||||
|
Computes the predicted response values y for the given input data by
|
||||||
|
constructing the design matrix X and evaluating y = Xβ.
|
||||||
|
|
||||||
|
@param data: the predictor values x for prediction
|
||||||
|
@returns: the predicted response values y = Xβ
|
||||||
|
@raises ArithmeticError: if this function is called before the model
|
||||||
|
parameters are fit
|
||||||
|
|
||||||
|
>>> x = np.array([0, 1, 2, 3, 4])
|
||||||
|
>>> y = x**3 - 2 * x**2 + 3 * x - 5
|
||||||
|
>>> poly_reg = PolynomialRegression(degree=3)
|
||||||
|
>>> poly_reg.fit(x, y)
|
||||||
|
>>> poly_reg.predict(np.array([-1]))
|
||||||
|
array([-11.])
|
||||||
|
>>> poly_reg.predict(np.array([-2]))
|
||||||
|
array([-27.])
|
||||||
|
>>> poly_reg.predict(np.array([6]))
|
||||||
|
array([157.])
|
||||||
|
>>> PolynomialRegression(degree=3).predict(x)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ArithmeticError: Predictor hasn't been fit yet
|
||||||
|
"""
|
||||||
|
if self.params is None:
|
||||||
|
raise ArithmeticError("Predictor hasn't been fit yet")
|
||||||
|
|
||||||
|
return PolynomialRegression._design_matrix(data, self.degree) @ self.params
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
"""
|
||||||
|
Fit a polynomial regression model to predict fuel efficiency using seaborn's mpg
|
||||||
|
dataset
|
||||||
|
|
||||||
|
>>> pass # Placeholder, function is only for demo purposes
|
||||||
|
"""
|
||||||
|
import seaborn as sns
|
||||||
|
|
||||||
|
mpg_data = sns.load_dataset("mpg")
|
||||||
|
|
||||||
|
poly_reg = PolynomialRegression(degree=2)
|
||||||
|
poly_reg.fit(mpg_data.weight, mpg_data.mpg)
|
||||||
|
|
||||||
|
weight_sorted = np.sort(mpg_data.weight)
|
||||||
|
predictions = poly_reg.predict(weight_sorted)
|
||||||
|
|
||||||
|
plt.scatter(mpg_data.weight, mpg_data.mpg, color="gray", alpha=0.5)
|
||||||
|
plt.plot(weight_sorted, predictions, color="red", linewidth=3)
|
||||||
|
plt.title("Predicting Fuel Efficiency Using Polynomial Regression")
|
||||||
|
plt.xlabel("Weight (lbs)")
|
||||||
|
plt.ylabel("Fuel Efficiency (mpg)")
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
||||||
|
|
||||||
|
main()
|
@ -263,9 +263,7 @@ def _maybe_download(filename, work_directory, source_url):
|
|||||||
return filepath
|
return filepath
|
||||||
|
|
||||||
|
|
||||||
@deprecated(
|
@deprecated(None, "Please use alternatives such as: tensorflow_datasets.load('mnist')")
|
||||||
None, "Please use alternatives such as:" " tensorflow_datasets.load('mnist')"
|
|
||||||
)
|
|
||||||
def read_data_sets(
|
def read_data_sets(
|
||||||
train_dir,
|
train_dir,
|
||||||
fake_data=False,
|
fake_data=False,
|
||||||
|
178
physics/basic_orbital_capture.py
Normal file
178
physics/basic_orbital_capture.py
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
from math import pow, sqrt
|
||||||
|
|
||||||
|
from scipy.constants import G, c, pi
|
||||||
|
|
||||||
|
"""
|
||||||
|
These two functions will return the radii of impact for a target object
|
||||||
|
of mass M and radius R as well as it's effective cross sectional area σ(sigma).
|
||||||
|
That is to say any projectile with velocity v passing within σ, will impact the
|
||||||
|
target object with mass M. The derivation of which is given at the bottom
|
||||||
|
of this file.
|
||||||
|
|
||||||
|
The derivation shows that a projectile does not need to aim directly at the target
|
||||||
|
body in order to hit it, as R_capture>R_target. Astronomers refer to the effective
|
||||||
|
cross section for capture as σ=π*R_capture**2.
|
||||||
|
|
||||||
|
This algorithm does not account for an N-body problem.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def capture_radii(
|
||||||
|
target_body_radius: float, target_body_mass: float, projectile_velocity: float
|
||||||
|
) -> float:
|
||||||
|
"""
|
||||||
|
Input Params:
|
||||||
|
-------------
|
||||||
|
target_body_radius: Radius of the central body SI units: meters | m
|
||||||
|
target_body_mass: Mass of the central body SI units: kilograms | kg
|
||||||
|
projectile_velocity: Velocity of object moving toward central body
|
||||||
|
SI units: meters/second | m/s
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
>>> capture_radii(6.957e8, 1.99e30, 25000.0)
|
||||||
|
17209590691.0
|
||||||
|
>>> capture_radii(-6.957e8, 1.99e30, 25000.0)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Radius cannot be less than 0
|
||||||
|
>>> capture_radii(6.957e8, -1.99e30, 25000.0)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Mass cannot be less than 0
|
||||||
|
>>> capture_radii(6.957e8, 1.99e30, c+1)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Cannot go beyond speed of light
|
||||||
|
|
||||||
|
Returned SI units:
|
||||||
|
------------------
|
||||||
|
meters | m
|
||||||
|
"""
|
||||||
|
|
||||||
|
if target_body_mass < 0:
|
||||||
|
raise ValueError("Mass cannot be less than 0")
|
||||||
|
if target_body_radius < 0:
|
||||||
|
raise ValueError("Radius cannot be less than 0")
|
||||||
|
if projectile_velocity > c:
|
||||||
|
raise ValueError("Cannot go beyond speed of light")
|
||||||
|
|
||||||
|
escape_velocity_squared = (2 * G * target_body_mass) / target_body_radius
|
||||||
|
capture_radius = target_body_radius * sqrt(
|
||||||
|
1 + escape_velocity_squared / pow(projectile_velocity, 2)
|
||||||
|
)
|
||||||
|
return round(capture_radius, 0)
|
||||||
|
|
||||||
|
|
||||||
|
def capture_area(capture_radius: float) -> float:
|
||||||
|
"""
|
||||||
|
Input Param:
|
||||||
|
------------
|
||||||
|
capture_radius: The radius of orbital capture and impact for a central body of
|
||||||
|
mass M and a projectile moving towards it with velocity v
|
||||||
|
SI units: meters | m
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
>>> capture_area(17209590691)
|
||||||
|
9.304455331329126e+20
|
||||||
|
>>> capture_area(-1)
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValueError: Cannot have a capture radius less than 0
|
||||||
|
|
||||||
|
Returned SI units:
|
||||||
|
------------------
|
||||||
|
meters*meters | m**2
|
||||||
|
"""
|
||||||
|
|
||||||
|
if capture_radius < 0:
|
||||||
|
raise ValueError("Cannot have a capture radius less than 0")
|
||||||
|
sigma = pi * pow(capture_radius, 2)
|
||||||
|
return round(sigma, 0)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
from doctest import testmod
|
||||||
|
|
||||||
|
testmod()
|
||||||
|
|
||||||
|
"""
|
||||||
|
Derivation:
|
||||||
|
|
||||||
|
Let: Mt=target mass, Rt=target radius, v=projectile_velocity,
|
||||||
|
r_0=radius of projectile at instant 0 to CM of target
|
||||||
|
v_p=v at closest approach,
|
||||||
|
r_p=radius from projectile to target CM at closest approach,
|
||||||
|
R_capture= radius of impact for projectile with velocity v
|
||||||
|
|
||||||
|
(1)At time=0 the projectile's energy falling from infinity| E=K+U=0.5*m*(v**2)+0
|
||||||
|
|
||||||
|
E_initial=0.5*m*(v**2)
|
||||||
|
|
||||||
|
(2)at time=0 the angular momentum of the projectile relative to CM target|
|
||||||
|
L_initial=m*r_0*v*sin(Θ)->m*r_0*v*(R_capture/r_0)->m*v*R_capture
|
||||||
|
|
||||||
|
L_i=m*v*R_capture
|
||||||
|
|
||||||
|
(3)The energy of the projectile at closest approach will be its kinetic energy
|
||||||
|
at closest approach plus gravitational potential energy(-(GMm)/R)|
|
||||||
|
E_p=K_p+U_p->E_p=0.5*m*(v_p**2)-(G*Mt*m)/r_p
|
||||||
|
|
||||||
|
E_p=0.0.5*m*(v_p**2)-(G*Mt*m)/r_p
|
||||||
|
|
||||||
|
(4)The angular momentum of the projectile relative to the target at closest
|
||||||
|
approach will be L_p=m*r_p*v_p*sin(Θ), however relative to the target Θ=90°
|
||||||
|
sin(90°)=1|
|
||||||
|
|
||||||
|
L_p=m*r_p*v_p
|
||||||
|
(5)Using conservation of angular momentum and energy, we can write a quadratic
|
||||||
|
equation that solves for r_p|
|
||||||
|
|
||||||
|
(a)
|
||||||
|
Ei=Ep-> 0.5*m*(v**2)=0.5*m*(v_p**2)-(G*Mt*m)/r_p-> v**2=v_p**2-(2*G*Mt)/r_p
|
||||||
|
|
||||||
|
(b)
|
||||||
|
Li=Lp-> m*v*R_capture=m*r_p*v_p-> v*R_capture=r_p*v_p-> v_p=(v*R_capture)/r_p
|
||||||
|
|
||||||
|
(c) b plugs int a|
|
||||||
|
v**2=((v*R_capture)/r_p)**2-(2*G*Mt)/r_p->
|
||||||
|
|
||||||
|
v**2-(v**2)*(R_c**2)/(r_p**2)+(2*G*Mt)/r_p=0->
|
||||||
|
|
||||||
|
(v**2)*(r_p**2)+2*G*Mt*r_p-(v**2)*(R_c**2)=0
|
||||||
|
|
||||||
|
(d) Using the quadratic formula, we'll solve for r_p then rearrange to solve to
|
||||||
|
R_capture
|
||||||
|
|
||||||
|
r_p=(-2*G*Mt ± sqrt(4*G^2*Mt^2+ 4(v^4*R_c^2)))/(2*v^2)->
|
||||||
|
|
||||||
|
r_p=(-G*Mt ± sqrt(G^2*Mt+v^4*R_c^2))/v^2->
|
||||||
|
|
||||||
|
r_p<0 is something we can ignore, as it has no physical meaning for our purposes.->
|
||||||
|
|
||||||
|
r_p=(-G*Mt)/v^2 + sqrt(G^2*Mt^2/v^4 + R_c^2)
|
||||||
|
|
||||||
|
(e)We are trying to solve for R_c. We are looking for impact, so we want r_p=Rt
|
||||||
|
|
||||||
|
Rt + G*Mt/v^2 = sqrt(G^2*Mt^2/v^4 + R_c^2)->
|
||||||
|
|
||||||
|
(Rt + G*Mt/v^2)^2 = G^2*Mt^2/v^4 + R_c^2->
|
||||||
|
|
||||||
|
Rt^2 + 2*G*Mt*Rt/v^2 + G^2*Mt^2/v^4 = G^2*Mt^2/v^4 + R_c^2->
|
||||||
|
|
||||||
|
Rt**2 + 2*G*Mt*Rt/v**2 = R_c**2->
|
||||||
|
|
||||||
|
Rt**2 * (1 + 2*G*Mt/Rt *1/v**2) = R_c**2->
|
||||||
|
|
||||||
|
escape velocity = sqrt(2GM/R)= v_escape**2=2GM/R->
|
||||||
|
|
||||||
|
Rt**2 * (1 + v_esc**2/v**2) = R_c**2->
|
||||||
|
|
||||||
|
(6)
|
||||||
|
R_capture = Rt * sqrt(1 + v_esc**2/v**2)
|
||||||
|
|
||||||
|
Source: Problem Set 3 #8 c.Fall_2017|Honors Astronomy|Professor Rachel Bezanson
|
||||||
|
|
||||||
|
Source #2: http://www.nssc.ac.cn/wxzygx/weixin/201607/P020160718380095698873.pdf
|
||||||
|
8.8 Planetary Rendezvous: Pg.368
|
||||||
|
"""
|
@ -49,6 +49,7 @@ select = [ # https://beta.ruff.rs/docs/rules
|
|||||||
"ICN", # flake8-import-conventions
|
"ICN", # flake8-import-conventions
|
||||||
"INP", # flake8-no-pep420
|
"INP", # flake8-no-pep420
|
||||||
"INT", # flake8-gettext
|
"INT", # flake8-gettext
|
||||||
|
"ISC", # flake8-implicit-str-concat
|
||||||
"N", # pep8-naming
|
"N", # pep8-naming
|
||||||
"NPY", # NumPy-specific rules
|
"NPY", # NumPy-specific rules
|
||||||
"PGH", # pygrep-hooks
|
"PGH", # pygrep-hooks
|
||||||
@ -72,7 +73,6 @@ select = [ # https://beta.ruff.rs/docs/rules
|
|||||||
# "DJ", # flake8-django
|
# "DJ", # flake8-django
|
||||||
# "ERA", # eradicate -- DO NOT FIX
|
# "ERA", # eradicate -- DO NOT FIX
|
||||||
# "FBT", # flake8-boolean-trap # FIX ME
|
# "FBT", # flake8-boolean-trap # FIX ME
|
||||||
# "ISC", # flake8-implicit-str-concat # FIX ME
|
|
||||||
# "PD", # pandas-vet
|
# "PD", # pandas-vet
|
||||||
# "PT", # flake8-pytest-style
|
# "PT", # flake8-pytest-style
|
||||||
# "PTH", # flake8-use-pathlib # FIX ME
|
# "PTH", # flake8-use-pathlib # FIX ME
|
||||||
|
@ -9,6 +9,7 @@ pandas
|
|||||||
pillow
|
pillow
|
||||||
projectq
|
projectq
|
||||||
qiskit
|
qiskit
|
||||||
|
qiskit-aer
|
||||||
requests
|
requests
|
||||||
rich
|
rich
|
||||||
scikit-fuzzy
|
scikit-fuzzy
|
||||||
|
@ -22,9 +22,7 @@ def is_sri_lankan_phone_number(phone: str) -> bool:
|
|||||||
False
|
False
|
||||||
"""
|
"""
|
||||||
|
|
||||||
pattern = re.compile(
|
pattern = re.compile(r"^(?:0|94|\+94|0{2}94)7(0|1|2|4|5|6|7|8)(-| |)\d{7}$")
|
||||||
r"^(?:0|94|\+94|0{2}94)" r"7(0|1|2|4|5|6|7|8)" r"(-| |)" r"\d{7}$"
|
|
||||||
)
|
|
||||||
|
|
||||||
return bool(re.search(pattern, phone))
|
return bool(re.search(pattern, phone))
|
||||||
|
|
||||||
|
@ -22,6 +22,5 @@ def world_covid19_stats(url: str = "https://www.worldometers.info/coronavirus")
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
print("\033[1m" + "COVID-19 Status of the World" + "\033[0m\n")
|
print("\033[1m COVID-19 Status of the World \033[0m\n")
|
||||||
for key, value in world_covid19_stats().items():
|
print("\n".join(f"{key}\n{value}" for key, value in world_covid19_stats().items()))
|
||||||
print(f"{key}\n{value}\n")
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user