【问题标题】:How to find minimum value from an array如何从数组中找到最小值
【发布时间】:2022-01-24 10:31:11
【问题描述】:

我是 python 新手,所以代码可能不是最好的。我试图找到最低总成本 (TotalC) 以及与此最低成本相关的相应 m、k 和 xM 值。我不知道该怎么做。我尝试使用 min(TotalC) 但这会在循环内或循环外产生错误,仅返回 TotalC 的值,而不是相应的 m、k 和 xM 值。任何帮助,将不胜感激。这部分在代码的末尾,我已经包含了我的整个代码。

    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def Load(x):
        Fpeak = (1000 + (9*(x**2) - (183*x))) *1000     #Fpeak in N
        td = (20 - ((0.12)*(x**2)) + (4.2*(x))) / 1000  #td in s
        
        return Fpeak, td
    
    #####################################################################################################
    ####################### Part 2 ########################
    
    def displacement(m,k,x,dt):           #Displacement function
    
        Fpeak, td = Load(x)               #Load Function from step 1
        
        w = np.sqrt(k/m)                  # Natural circular frequency
        T = 2 * np.pi /w                  #Natural period of blast (s)
        time = np.arange(0,2*T,0.001)     #Time array with range (0 - 2*T) with steps of 2*T/100
        
        
        zt = []                           #Create a lsit to store displacement values
        for t in time:
                if (t <= td):
                    zt.append((Fpeak/k) * (1 - np.cos(w*t)) + (Fpeak/(k*td)) * ((np.sin(w*t)/w) - t))
                else:
                    zt.append((Fpeak/(k*w*td)) * (np.sin(w*t) - np.sin(w*(t-td))) - ((Fpeak/k) * np.cos(w*t))) 
                    
        
        zmax=max(zt)            #Find the max displacement from the list of zt values
        return zmax             #Return max displacement
    
    k = 1E6
    m = 200
    dt = 0.0001
    x = 0
    
    
    z = displacement(m,k,x,dt)
    
    ###################################################################################
    ############### Part 3 #######################
    # k = 1E6 , m = 200kg , Deflection = 0.1m
    
    
    k_values = np.arange(1E6, 7E6, ((7E6-1E6)/10))   #List of k values between min and max (1E6 and 7E6).
    m_values = np.arange(200,1200,((1200-200)/10))   #List of m values between min and max 200kg and 1200kg
    
    xM = []
    
    for k in k_values: # values of k
        for m in m_values: # values of m within k for loop
        
    
            def bisector(m,k,dpoint,dt):  #dpoint = decimal point accuracy
                 xL = 0
                 xR = 10
                 xM = (xL + xR)/2
                 zmax = 99
    
                 while round(zmax, dpoint) !=0.1:
                     zmax = displacement(m,k,xM,dt)
                     if zmax > 0.1:
                         xL = xM
                         xM = (xL + xR)/2
                     else:
                         xR = xM
                         xM = (xL + xR)/2
                 return xM
    
            xM = bisector(m, k, 4, 0.001)
            print('xM value =',xM)
        
####################################################################################        
            def cost (m,k,xM):
            
                Ck = np.array(900 + 825*((k/1E6)**2) - (1725*(k/1E6)))
                Cm = np.array(10*m - 2000)
                Cx = np.array(2400*((xM**2)/4))
                TotalC = Ck + Cm + Cx
                print(TotalC)
                print(min(TotalC))
                return TotalC
        
            TotalC = cost(m, k, xM)
        
            print([xM, m, k, TotalC])

【问题讨论】:

    标签: python arrays min


    【解决方案1】:

    你想要这个:

    minIndex = TotalC.argmin()
    

    现在您在所有数组TotalCCkCmCx 中使用该数字索引。

    【讨论】:

    • 谢谢,这就是我要找的东西,我应该把它放在我的代码中的什么地方?
    【解决方案2】:

    求最小值的总索引,对应数组的索引应该相同。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2016-02-12
    • 2015-07-07
    • 2014-10-23
    • 1970-01-01
    • 2021-01-08
    • 2014-06-01
    • 2022-01-24
    • 2019-11-20
    相关资源
    最近更新 更多