示例#1
0
文件: util.py 项目: scivision/Kamodo
def get_unit_quantity(name, base, scale_factor, abbrev=None, unit_system='SI'):
    '''Define a unit in terms of a base unit'''
    u = units.Quantity(name, abbrev=abbrev)
    base_unit = getattr(sympy_units, base)
    u.set_dimension(base_unit.dimension)
    u.set_scale_factor(scale_factor * base_unit, unit_system=unit_system)
    return u
示例#2
0
def get_unit_quantity(name, base, scale_factor, abbrev=None, unit_system='SI'):
    '''Define a unit in terms of a base unit'''
    u = units.Quantity(name, abbrev=abbrev)
    base_unit = getattr(sympy_units, base)

    try:
        # sympy >= 1.5 raises the following warning:
        #   Use unit_system.set_quantity_dimension or
        # <unit>.set_global_relative_scale_factor
        u.set_global_relative_scale_factor(scale_factor, base_unit)
    except AttributeError:
        u.set_dimension(base_unit.dimension)
        u.set_scale_factor(scale_factor * base_unit, unit_system=unit_system)

    return u
示例#3
0
# %%
r1 = 3E3 * u.ohms
intensidad_ahkab = resultados['op']['I(V1)'][0][0] * u.ampere
v2 = convert_to(intensidad_ahkab * r1, [u.volt])
pprint(v2)

# %% [markdown]
#  > **Pregunta**: reproduce el resto de los valores anteriores de manera *manual* mediante Sympy (es decir, aplicando la ley de Ohm, pero con tun *toque computacional*). Te pongo aquí un ejemplo del que puedes partir… En él sólo calculo la corriente que circula por el circuito (sí, justo la que antes Ahkab ha devuelto de manera automática). Para ello necesito previamente computar la resistencia total (`r_total`). Faltarían el resto de resultados y convertirlos a unidades más *vistosas* (mediante la orden `convert_to` y `.n()`).

# %%
v1 = 9 * u.volts
r1 = 3 * u.kilo * u.ohms
r2 = 10 * u.kilo * u.ohms
r3 = 5 * u.kilo * u.ohms
r_total = r1 + r2 + r3
intensidad = u.Quantity('i')
intensidad.set_dimension(u.current)
ley_ohm = Eq(v1, intensidad * r_total)
solucion_para_intensidad = solve(ley_ohm, intensidad)
pprint(convert_to(solucion_para_intensidad[0], [u.ampere]).n(2))

# %% [markdown]
# > **Pregunta**: Demuestra que se cumple la Ley de Kirchhoff de la energía en un circuito, es decir, que la suma de la energía suministrada por las fuentes (pilas) es igual a la consumida por las resistencias. Realiza la operación con Sympy.
#
# $$
# \sum_i^N V_{\text{fuentes}} = \sum_j^M V_{\text{consumido en resistencias}}
# $$
#
# Ten en cuenta que en este caso sólo hay una fuente.
# %% [markdown]
# ## Análisis `.op` de circuitos con resistencias en paralelo
示例#4
0
class _storage:
    USgal = units.Quantity('US gallon', 'USgal')
    # units.systems.SI.set_quantity_scale_factor(USgal, 231*units.inch**3)
    # USgal.set_scale_factor(231*units.inch**3)
    # USgal.set_dimension(units.length**3)
    units.systems.SI.set_quantity_dimension(USgal, units.length**3)
    UKgal = units.Quantity('UK gallon', 'UKgal')
    # units.systems.SI.set_quantity_scale_factor(UKgal, 4.54609*units.liter)
    # UKgal.set_scale_factor(4.54609*units.liter)
    # UKgal.set_dimension(units.length**3)
    units.systems.SI.set_quantity_dimension(UKgal, units.length**3)
    lbf = units.Quantity('pound_force', 'lbf')
    # lbf.set_dimension(units.force)
    units.systems.SI.set_quantity_dimension(lbf, units.force)
    # units.systems.SI.set_quantity_scale_factor(lbf, units.pound.scale_factor)
    # lbf.set_scale_factor(units.pound.scale_factor)
    MPa = megapascal = megapascals = units.Quantity('megapascal', 'MPa')
    # MPa.set_dimension(units.pressure)
    units.systems.SI.set_quantity_dimension(MPa, units.pressure)
    # units.systems.SI.set_quantity_scale_factor(MPa, 1000*units.kPa)
    # MPa.set_scale_factor(1000*units.kPa)
    GPa = gigapascal = gigapascals = units.Quantity('gigapascal', 'GPa')
    # GPa.set_dimension(units.pressure)
    units.systems.SI.set_quantity_dimension(GPa, units.pressure)
    # units.systems.SI.set_quantity_scale_factor(GPa, 1e6*units.kPa)
    # GPa.set_scale_factor(1e6*units.kPa)
    kN = kilonewton = kilonewtons = units.Quantity('kilonewton', 'kN')
    # kN.set_dimension(units.force)
    units.systems.SI.set_quantity_dimension(kN, units.force)
    # units.systems.SI.set_quantity_scale_factor(kN, 1000*units.newton)
    # kN.set_scale_factor(1000*units.newton)

    weight = units.force
    density = units.mass / units.volume
    area = units.length**2
    sec = units.second
    min = units.minute
    hr = units.hour
    lbm = units.pound
    distance = units.length
    Hertz = units.hertz
    for k, v in locals().copy().items():
        if isinstance(v, (units.Quantity, units.Dimension)):
            setattr(units, k, v)
            del locals()[k]

    lengths = distances = {
        k: getattr(units, k)
        for k in units.find_unit(units.inch)
    }
    areas = {k + '^2': v**2 for k, v in lengths.items()}
    accelerations = {k: getattr(units, k) for k in units.find_unit(units.gee)}
    pressures = {k: getattr(units, k) for k in units.find_unit(units.pascal)}
    masses = {k: getattr(units, k) for k in units.find_unit(units.gram)}
    forces = weights = {
        k: getattr(units, k)
        for k in units.find_unit(units.newton)
    }
    times = {k: getattr(units, k) for k in units.find_unit(units.minute)}
    angles = {k: getattr(units, k) for k in units.find_unit(units.radian)}
    # velocities = {k: getattr(units, k) for k in units.find_unit(units.speed)}
    # frequencies = {k: getattr(units, k) for k in units.find_unit(units.hertz)}
    # information = {k: getattr(units, k) for k in units.find_unit(units.byte)}
    # powers = {k: getattr(units, k) for k in units.find_unit(units.power)}
    # voltages = {k: getattr(units, k) for k in units.find_unit(units.volts)}
    # currents = {k: getattr(units, k) for k in units.find_unit(units.ampere)}
    # charges = {k: getattr(units, k) for k in units.find_unit(units.coulomb)}
    # lights = {k: getattr(units, k) for k in units.find_unit(units.luminosity)}
    # resistances = {k: getattr(units, k) for k in units.find_unit(units.ohm)}
    # amounts = {k: getattr(units, k) for k in units.find_unit(units.mol)}
    # temperatures = {k: getattr(units, k) for k in units.find_unit(units.kelvin)}
    # magneticdensities = {k: getattr(units, k) for k in units.find_unit(units.tesla)}
    # magneticfluxes = {k: getattr(units, k) for k in units.find_unit(units.weber)}
    # energies = {k: getattr(units, k) for k in units.find_unit(units.electronvolt)}
    # capacitances = {k: getattr(units, k) for k in units.find_unit(units.farad)}
    # inductances = {k: getattr(units, k) for k in units.find_unit(units.henry)}

    volumes = {k: getattr(units, k) for k in units.find_unit(units.liter)}
    volumes.update({k + '^3': v**3 for k, v in lengths.items()})

    unit_subs = dict()
    for name, d in locals().copy().items():
        if not isinstance(d, dict) or name == 'unit_subs':
            continue
        for k, v in d.items():
            if isinstance(v, (units.Dimension, units.Quantity)):
                unit_subs[k] = v
    del d, k, v
    dimensions = {
        k: v
        for k, v in vars(units).items() if isinstance(v, units.Dimension)
    }
    units.One = S.One