Näherungslösung GHA 2

This commit is contained in:
2026-01-11 16:05:15 +01:00
parent 4d5b6fcc3e
commit 6cc7245b0f
7 changed files with 260 additions and 235 deletions

View File

@@ -4,9 +4,13 @@ import runge_kutta as rk
import GHA_triaxial.numeric_examples_karney as ne_karney
import GHA_triaxial.numeric_examples_panou as ne_panou
import winkelumrechnungen as wu
from typing import Tuple
from numpy.typing import NDArray
# Panou 2013
def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, epsilon=10**-12, iter_max=30):
def gha2_num(ell: EllipsoidTriaxial, beta_1: float, lamb_1: float, beta_2: float, lamb_2: float,
n: int = 16000, epsilon: float = 10**-12, iter_max: int = 30, all_points: bool = False
) -> Tuple[float, float, float]| Tuple[float, float, float, NDArray, NDArray]:
"""
:param ell: triaxiales Ellipsoid
@@ -17,6 +21,7 @@ def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, ep
:param n: Anzahl Schritte
:param epsilon:
:param iter_max: Maximale Anzhal Iterationen
:param all_points:
:return:
"""
@@ -25,7 +30,6 @@ def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, ep
def arccot(x):
return np.arctan2(1.0, x)
def BETA_LAMBDA(beta, lamb):
BETA = (ell.ay**2 * np.sin(beta)**2 + ell.b**2 * np.cos(beta)**2) / (ell.Ex**2 - ell.Ey**2 * np.sin(beta)**2)
@@ -60,7 +64,6 @@ def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, ep
G_beta_lamb = - LAMBDA_ * ell.Ey**2 * np.sin(2*beta)
G_lamb_lamb = LAMBDA__ * (ell.Ey**2 * np.cos(beta)**2 + ell.Ee**2 * np.sin(lamb)**2) + 2 * LAMBDA_ * ell.Ee**2 * np.sin(2*lamb) + 2 * LAMBDA * ell.Ee**2 * np.cos(2*lamb)
return (BETA, LAMBDA, E, G,
BETA_, LAMBDA_, BETA__, LAMBDA__,
E_beta, E_lamb, G_beta, G_lamb,
@@ -244,15 +247,21 @@ def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, ep
+ (ell.Ee**2 / ell.Ex**2) * np.cos(lamb0) ** 2 * np.cos(alpha_1) ** 2
)
return alpha_1, alpha_2, s, beta_arr, lamb_arr
if all_points:
return alpha_1, alpha_2, s, beta_arr, lamb_arr
else:
return alpha_1, alpha_2, s
if lamb_1 == lamb_2:
else: # lamb_1 == lamb_2
N = n
dbeta = beta_2 - beta_1
if abs(dbeta) < 10**-15:
return 0, 0, 0, np.array([]), np.array([])
if all_points:
return 0, 0, 0, np.array([]), np.array([])
else:
return 0, 0, 0
lamb_0 = 0
@@ -369,7 +378,10 @@ def gha2_num(ell: EllipsoidTriaxial, beta_1, lamb_1, beta_2, lamb_2, n=16000, ep
else:
s = np.trapz(integrand, dx=h)
return alpha_1, alpha_2, s, beta_arr, lamb_arr
if all_points:
return alpha_1, alpha_2, s, beta_arr, lamb_arr
else:
return alpha_1, alpha_2, s
if __name__ == "__main__":
@@ -390,7 +402,6 @@ if __name__ == "__main__":
# a1, a2, s = gha2_num(ell, beta1, lamb1, beta2, lamb2, n=5000)
# print(s)
# ell = EllipsoidTriaxial.init_name("BursaSima1980round")
# diffs_panou = []
# examples_panou = ne_panou.get_random_examples(4)
@@ -421,8 +432,4 @@ if __name__ == "__main__":
# diffs_karney = np.array(diffs_karney)
# print(diffs_karney)
pass