Beispiel #1
0
    def test_FuzzyAnalysis(self):
        from scipy.optimize import rosen, rosen_der

        def SysEq2(p, x):
            return rosen(p)

        def SensEq2(p, r, g, x):
            return rosen_der(p)

        pFuzz1 = pu.UncertainNumber([1, 2, 3, 4], Form='trapazoid', nalpha=3)
        pFuzz2 = pu.UncertainNumber([1, 2, 3, 4], Form='trapazoid', nalpha=3)
        pFuzz = [pFuzz1, pFuzz2]
        Prob = pu.UncertainAnalysis(SysEq2, pUnc=pFuzz, SensEq=SensEq2)
        Prob.Alg = 'NLPQLP'
        Prob.nAlpha = 3
        Prob.paraNorm = 0
        Prob.epsStop = 1e-6
        Prob.para = 1
        Prob.calculate()
        rUncTarget = np.array([
            [1.01000000e02, 4.90400000e03],
            [2.50000000e-01, 1.15625000e04],
            [0, 2.25090000e04],
        ])
        # self.assertAlmostEqual(Prob.rUnc.Value.tolist(),
        #                       rUncTarget.tolist())
        self.assertAlmostEqual(Prob.rUnc.Value.tolist()[0],
                               rUncTarget.tolist()[0])
        self.assertAlmostEqual(Prob.rUnc.Value.tolist()[1],
                               rUncTarget.tolist()[1])
        self.assertAlmostEqual(Prob.rUnc.Value.tolist()[2][0],
                               rUncTarget.tolist()[2][0])
        self.assertAlmostEqual(Prob.rUnc.Value.tolist()[2][1],
                               rUncTarget.tolist()[2][1])
Beispiel #2
0
    def test_IntervalAnalysis(self):
        pInt = pu.UncertainNumber([1, 5])

        def SysEq1(p, x):
            return p - p

        UncertainProblem = pu.UncertainAnalysis()
        UncertainProblem.pUnc = pInt
        UncertainProblem.SysEq = SysEq1
        UncertainProblem.calculate()
        rUncTarget = np.array([[0.0, 0.0]])
        self.assertAlmostEqual(UncertainProblem.rUnc.Value.tolist(),
                               rUncTarget.tolist())
Beispiel #3
0
def FunHockettSherby(pUnc):
    Prob = pu.UncertainAnalysis(HockettSherby, pUnc)
    Prob.deltax = 1e-3
    Prob.epsStop = 1e-3
    nS = 251
    epsilonMax = 0.5
    epsilon = np.linspace(0, epsilonMax, nS)
    rFnUnc = [[]] * nS
    nEvaluation = 0
    for i, val in enumerate(epsilon):
        Prob.para = val
        Prob.calculate()
        rFnUnc[i] = Prob.rUnc
        nEvaluation += Prob.nEval
    Prob.rFnUnc = rFnUnc
    Prob.nEval = nEvaluation
    Prob.epsilon = epsilon
    return Prob
Beispiel #4
0
ux2 = 0.001


# Function of estimated damping ratio based on two measures
def DampEst(p, x):
    x1 = p[0]
    x2 = p[1]
    Lambda = np.log(x1 / x2)
    zeta = np.sqrt(Lambda**2 / (4 * np.pi**2 + Lambda**2))
    return zeta


# Interval uncertainty problem: Worst-case interval defined as +/-6sigma
x1Unc = pu.UncertainNumber([x1 - 6 * ux1, x1 + 6 * ux1])
x2Unc = pu.UncertainNumber([x2 - 6 * ux2, x2 + 6 * ux2])
Prob = pu.UncertainAnalysis(DampEst, pUnc=[x1Unc, x2Unc])
Prob.nr = 1
Prob.deltax = 1e-6
Prob.epsStop = 1e-6
Prob.Alg = 'NLPQLP'

# Calculate uncertain response
Prob.calculate()

# Calculation with standard uncertainty using first-order Taylor series
zeta = DampEst([x1, x2], [])
dzetadx1 = 1 / (2 * np.pi * x1)
dzetadx2 = 1 / (2 * np.pi * x2)
uzeta = (np.sqrt(ux1**2 * dzetadx1**2 + ux2**2 * dzetadx2**2) / 2 / np.pi)
zeta1sigma = [zeta - uzeta, zeta + uzeta]
zeta2sigma = [zeta - 2 * uzeta, zeta + 2 * uzeta]
Beispiel #5
0
 def test_Robustness(self):
     UncertainProblem = pu.UncertainAnalysis()
     UncertainProblem.pUnc = pu.UncertainNumber([1, 2])
     UncertainProblem.rUnc = pu.UncertainNumber([3, 6])
     UncertainProblem.calcRobustness()
     self.assertAlmostEqual(UncertainProblem.SystemRobustness, 1 / 3)
Beispiel #6
0
import numpy as np


def Eigenfrequency1DoF(p, x):
    m = p[0]
    k = p[1]
    omega0 = np.sqrt(k / m)
    f0 = omega0 / 2 / np.pi
    return f0


m = pu.UncertainNumber([2.0, 2.5])
k = pu.UncertainNumber([40000, 60000])
pUnc = [m, k]

Prob = pu.UncertainAnalysis(Eigenfrequency1DoF, pUnc)
Prob.deltax = 1e-3
Prob.epsStop = 1e-3

Prob.calculate()

m.printValue()
k.printValue()
plt, _ = pu.plotIntervals([m.Value, k.Value],
                          labels=['mass $m$ [kg]', 'stiffness $k$ [N/mm]'])
plt.show()

f0Unc = Prob.rUnc
f0Unc.printValue()
f0Unc.plotValue(color='r', xlabel='eigenfrequency $f_0$ [Hz]')
Beispiel #7
0
    PyUncertainties = True
except:
    PyUncertainties = False
    print("Package 'uncertainties' not installed!")


def SysEq(p, x):
    return p - p


nAlpha = 1
pL = 1.0
pU = 5.0
pInt = pu.UncertainNumber([1, 5])
Prob = pu.UncertainAnalysis()
Prob.SysEq = SysEq
Prob.pUnc = pInt
Prob.calculate()

if IntPy:
    pInt1 = intpy.IReal(pL, pU)
    rInt1 = pInt1 - pInt1
if PyInterval:
    pInt2 = interval.interval(pL, pU)
    rInt2 = pInt2 - pInt2
if PyUncertainties:
    pMean = (pU - pL) / 2.0
    pDelta = pMean - pL
    pUnc = uncertainties.ufloat(pMean, pDelta)
    rUnc = pUnc - pUnc
Beispiel #8
0
import numpy as np
import pyUngewiss as pu


def HockettSherby(p, x):
    sigma = p[0] + p[1] - p[1] * np.exp(-p[2] * x**p[3])
    return [sigma]


sigmaY = pu.UncertainNumber([240, 260])
sigmaP = pu.UncertainNumber([40, 60])
cHS = pu.UncertainNumber([8, 12])
nHS = pu.UncertainNumber([0.7, 0.8])
pUnc = [sigmaY, sigmaP, cHS, nHS]
Prob = pu.UncertainAnalysis(HockettSherby, pUnc)
Prob.deltax = 1e-3
Prob.epsStop = 1e-3
nS = 100
epsilonMax = 0.5
epsilon = np.linspace(0, epsilonMax, nS)
rFnInt = [[]] * nS
nEvaluation = 0

for i, val in enumerate(epsilon):
    Prob.para = val
    Prob.calculate()
    rFnInt[i] = Prob.rUnc
    nEvaluation += Prob.nEval

pu.plotUncertainFn(
    rFnInt,
Beispiel #9
0
import pyUngewiss as pu
import numpy as np


def SysEq(p, x):
    return (x + p)**2


def SensEq(p, r, g, x):
    return 2 * x + 2 * p


nAlpha = 11
pFuzz = pu.UncertainNumber([8, 9, 11, 12], Form='trapazoid', nalpha=nAlpha)
x = 1.0
ProbFD = pu.UncertainAnalysis(SysEq, pUnc=pFuzz)
ProbFD.Alg = 'NLPQLP'
ProbFD.nAlpha = nAlpha
ProbFD.deltax = (1e-6, )
ProbFD.paraNorm = 0
ProbFD.SBFA = False
ProbFD.Surr = (False, )
ProbFD.epsStop = 1e-6
ProbFD.para = x
ProbFD.SensCalc = 'FD'
ProbFD.calculate()
ProbAS = pu.UncertainAnalysis(SysEq, pUnc=pFuzz, SensEq=SensEq)
ProbAS.Alg = 'NLPQLP'
ProbAS.nAlpha = nAlpha
ProbAS.paraNorm = 0
ProbAS.SBFA = False
Beispiel #10
0
import numpy as np
import pyUngewiss as pu


def SysEq(p, x):
    y = x**2 + p
    return y


pInt = pu.UncertainNumber([-10, 10])
nS = 200
x = np.linspace(-10, 10, nS)
rFnInt = [[]] * nS
Prob = pu.UncertainAnalysis(SysEq, pInt)
Prob.deltax = 1e-6
Prob.epsStop = 1e-6
for ii in range(len(x)):
    Prob.para = x[ii]
    Prob.calculate()
    rFnInt[ii] = Prob.rUnc
plt, _ = pu.plotUncertainFn(rFnInt, x)
plt.show()