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'
# 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))
'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)
@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',