コード例 #1
0
ファイル: make_fits.py プロジェクト: antoniosgeme/AeroSandbox
def model(m, p):
    return np.blend(
        p["trans_str"] * (m - p["m_trans"]), p["pc_sup"] +
        p["a"] * np.exp(-(p["scale_sup"] * (m - p["center_sup"]))**2),
        p["pc_sub"])


fit = asb.FittedModel(model=model,
                      x_data=data[:, 0],
                      y_data=data[:, 1],
                      parameter_guesses={
                          "a": 0.2,
                          "scale_sup": 1,
                          "center_sup": 1,
                          "m_trans": 1.,
                          "trans_str": 5,
                          "pc_sub": 0.16,
                          "pc_sup": 0.05,
                      },
                      parameter_bounds={
                          "trans_str": (0, 10),
                      },
                      verbose=False)

# def model(m, p):
#     beta_squared_ideal = 1 - m ** 2
#
#     beta_squared = np.softmax(
#         beta_squared_ideal,
#         -beta_squared_ideal,
#         hardness=p["pg_hardness"]
コード例 #2
0
def model(x, p):
    return sigmoid(p["p5"] * (x - p["o5"])**5 + p["p3"] * (x - p["o3"])**4 +
                   p["p1"] * (x - p["o1"]))


fit = asb.FittedModel(
    model=model,
    x_data=machs_to_fit,
    y_data=beta(machs_to_fit),
    parameter_guesses={
        "p1": 4.6,
        "o1": 0.89,
        "p3": 140,
        "o3": 0.69,
        "p5": 120,
        "o5": 0.79,
    },
    parameter_bounds={
        "o3": (0, 1),
        "o5": (0, 1),
    },
    weights=weights,
    # residual_norm_type="deviation"
)

error = fit(machs_to_fit) - beta(machs_to_fit)
error = np.array(error)

machs_to_plot = np.linspace(-0.5, 1.5, 500)
fig, ax = plt.subplots(1, 1, figsize=(8, 7), dpi=200)
コード例 #3
0
ファイル: fit.py プロジェクト: antoniosgeme/AeroSandbox
import aerosandbox as asb
import aerosandbox.numpy as np

masses = np.load("masses.npy")
spans = np.load("spans.npy")
spar_masses = np.load("spar_masses.npy")


def spar_mass_model(x, p):
    return p["c"] * (x["span"] / 40)**p["span_exp"] * (x["mass"] /
                                                       300)**p["mass_exp"]


fit = asb.FittedModel(model=spar_mass_model,
                      x_data={
                          "mass": masses.reshape(-1),
                          "span": spans.reshape(-1),
                      },
                      y_data=spar_masses.reshape(-1),
                      parameter_guesses={
                          "c": 1,
                          "span_exp": 1,
                          "mass_exp": 1,
                      },
                      put_residuals_in_logspace=True,
                      verbose=False)
print("\nMODEL\n-----")
for k, v in fit.parameters.items():
    print(f"{k} = {v}")
print("spar_mass = c * (span / 40) ** span_exp * (mass_eff / 300) ** mass_exp")
コード例 #4
0
ファイル: fit.py プロジェクト: antoniosgeme/AeroSandbox
eta = data['eta'].values


def model(x, p):
    return 1 - p["1scl"] / (x - p["1cen"]) - (p["2scl"] / (x - p["2cen"]))**2


fit = asb.FittedModel(model=model,
                      x_data=fineness,
                      y_data=eta,
                      parameter_guesses={
                          "1scl": 1,
                          "1cen": -25,
                          "2scl": -1,
                          "2cen": -25,
                      },
                      parameter_bounds={
                          "1scl": (0, None),
                          "1cen": (None, 0),
                          "2scl": (0, None),
                          "2cen": (None, 0),
                      },
                      residual_norm_type="L2",
                      verbose=False)
print(fit.parameters)

from aerosandbox.tools.pretty_plots import plt, show_plot

fig, ax = plt.subplots()
plt.plot(fineness, eta, ".k")
fineness_plot = np.linspace(0, 40, 500)
コード例 #5
0
    As the fineness ratio goes to 0, the drag-divergent Mach should go to some reasonable value in the range of 0 to
    1, probably around 0.5? Certainly no more than 0.6, I imagine. (intuition)

    """
    return 1 - (p["a"] / (fr + p["b"]))**p["c"]


fit = asb.FittedModel(model=model,
                      x_data=np.concatenate([sub[:, 0], sup[:, 0]]),
                      y_data=np.concatenate([sub[:, 1], sup[:, 1]]),
                      weights=np.concatenate([
                          np.ones(len(sub)) / len(sub),
                          np.ones(len(sup)) / len(sup),
                      ]),
                      parameter_guesses={
                          "a": 0.5,
                          "b": 3,
                          "c": 1,
                      },
                      parameter_bounds={
                          "a": (0, None),
                          "b": (0, None),
                          "c": (0, None)
                      },
                      residual_norm_type="L2")

plt.plot(fr, fit(fr), "-k", label="Fit")

p.show_plot(
    "Drag-Divergent Mach Number for Generic\nFuselage of Varying Fineness Ratio",
    "$2L_n / d$", r"$\mathrm{Mach}_{DD}$ [-]")
print(fit.parameters)
コード例 #6
0
        p["cd_sub"] + np.exp(p["a_sub"] + p["s_sub"] * (m - p["trans"])))


fit = asb.FittedModel(
    model=model,
    x_data=data[:, 0],
    y_data=data[:, 1],
    parameter_guesses={
        "trans": 1,
        "trans_str": 10,
        "cd_sub": 1.2,
        "cd_sup": 1.2,
        "a_sub": -0.4,
        "a_sup": -0.4,
        "s_sub": 4.6,
        "s_sup": -1.5,
    },
    parameter_bounds={
        "s_sub": (0, None),
        "s_sup": (None, 0),
        # "cd_sub": (1.2, 1.2),
        "trans": (0.9, 1.1),
        "trans_str": (0, None),
    },
    weights=1 + 5 * ((data[:, 0] > 0.9) & (data[:, 0] < 1.1)),
    verbose=False,
    # residual_norm_type="LInf",
    put_residuals_in_logspace=True)

from pprint import pprint
コード例 #7
0
fit = asb.FittedModel(
    model=model,
    x_data={
        "lats_scaled": lats_scaled,
        "alts_scaled": alts_scaled
    },
    y_data=speeds_scaled,
    parameter_guesses={
        "agc": -0.5363,
        "agh": 1.957,
        "ags": 0.1459,
        "aqc": -1.465,
        "c0": -0.517,
        "c12": 0.08495,
        "c21": -0.0252,
        "c4a": 0.02259,
        "c4c": 1.028,
        "cg": 0.8051,
        "cgc": 0.2787,
        "cqa": 0.1866,
        "cql": 0.01651,
        "cqla": -0.1362,
        "lgc": 0.6944,
        "lgh": 2.078,
        "lgs": 0.9806,
        "lqc": 4.036,
    },
    # parameter_bounds={
    #     "agc" : (-0.5363, -0.5363),
    #     "agh" : (1.957, 1.957),
    #     "ags" : (0.1459, 0.1459),
    #     "aqc" : (-1.465, -1.465),
    #     "c0"  : (-0.517, -0.517),
    #     "c12" : (0.08495, 0.08495),
    #     "c21" : (-0.0252, -0.0252),
    #     "c4a" : (0.02259, 0.02259),
    #     "c4c" : (1.028, 1.028),
    #     "cg"  : (0.8051, 0.8051),
    #     "cgc" : (0.2787, 0.2787),
    #     "cqa" : (0.1866, 0.1866),
    #     "cql" : (0.01651, 0.01651),
    #     "cqla": (-0.1362, -0.1362),
    #     "lgc" : (0.6944, 0.6944),
    #     "lgh" : (2.078, 2.078),
    #     "lgs" : (0.9806, 0.9806),
    #     "lqc" : (4.036, 4.036),
    # },
    weights=weights,
    # put_residuals_in_logspace=True
)