コード例 #1
0
def checkStability(parX, parY, parZ):
    xSym, x = parX
    ySym, y = parY
    zSym, z = parZ
    # Check stability of system at a point
    labX = chSymtoLabel(xSym)
    labY = chSymtoLabel(ySym)
    labZ = chSymtoLabel(zSym)

    data = defaults
    data[labX] = x
    data[labY] = y
    data[labZ] = z

    jac = computeJac(data)
    w, v = LA.eig(jac)
    if np.real(max(w)) < 0:
        return 'stable'
    else:
        return 'unstable'
コード例 #2
0
# Salinity
concEvapt = 0.7
concS = 0.8
concHyd = 1

decrS = 0.5
decrPrecip = 1

evaptS = -1
evaptM = 1.5

salts = {'concEvapt':concEvapt,'concHyd':concHyd, 'concS':concS, 'decrS':decrS,
         'decrPrecip':decrPrecip,'evaptS':evaptS}

defaults = {**alphas, **betas, **mangs, **peats, **salts}

def stability(eigs):
    # take in vector of eigenvalues
    # tell if system stable or not (stable if all eigenvalues are less than zero)
    reals = np.real(eigs)
    if max(reals) < 0:
        result = "Stable"
    else:
        result = "Unstable"
    return result

J = computeJac(defaults)
w, v = LA.eig(J)
print(J)
print(np.max(w))
print(stability(w))
コード例 #3
0
        'volGrow':volGrow,'volP':volP,'volHyd':volHyd,'volPrecip':volPrecip,'eroM':eroM,\
        'subsMort':subsMort,'subsHyd':subsHyd,'subsP':subsP,'concS':concS,\
        'concEvapt':concEvapt,'concHyd':concHyd,'evaptM':evaptM,'evaptS':evaptS,\
        'decrS':decrS,'decrPrecip':decrPrecip,'precipBeta':precipBeta}

eigs = []  #eigenvalue triplets
eigMax = []  # max Eigenvalue list
eigsV = []  #eigenvector triplets
stab = []  #stability (0,1)
determ = []  # determinant of Jacobian
traces = []  # trace of Jacobian
fixType = []
for j in tqdm(range(n)):

    dataJ = {k: v[j] for (k, v) in data.items()}
    jac = computeJac(dataJ)

    w, v = LA.eig(jac)
    det = LA.det(jac)
    tr = np.trace(jac)
    j2 = np.square(jac)
    lamCoff = -0.5 * (tr**2 - np.trace(j2))

    eigs.append(w)
    eigMax.append(np.real(np.max(w)))
    eigsV.append(v)
    stab.append(stability(w))

    determ.append(det)
    traces.append(tr)
コード例 #4
0
@author: Excalibur
"""

import numpy as np
import numpy.linalg as LA
from numpy import random
import matplotlib.pyplot as plt
from parameterDefaults import defaults
from jacobianSalt import computeJac
from parameterRanges import ranges
from tqdm import tqdm

dp = 0.01
param = 'betaA'

J1 = computeJac(defaults)
w1, v = LA.eig(J1)

#perturb = defaults
#perturb[param] = defaults[param] + dp

#J2 = computeJac(perturb)
#w2, v = LA.eig(J2)

#dw2 = w2-w1
#fracPar = defaults[param]/dp

#eigSens = [fracPar*dwi for dwi in dw2]

mangs = {
    'propM', 'propS', 'growM', 'growS', 'drownHyd', 'drownM', 'stressM',