Я создаю модель, которая способна находить подходящие материалы на основе определенных значений, таких как объем, масса, деформация и т. Д.
Поэтому мне нужно изменить значения E1 и E2 (свойства материала), а также соотношение / соотношение между E1 и E2, чтобы найти возможные подходящие материалы.
Однако я изо всех сил пытаюсь найти все возможные комбинации E1 и E2 в цикле.
Так что в настоящее время в моем коде я шаг E1 + = 200 и E2 + = 100. Но между ними не обязательно отношения 2: 1. Это может быть E1 + = 50 и E2 + = 350 и различные другие комбинации.
Общая цель - найти все комбинации E1 и E2, которые удовлетворяют критерию.
Я пытался упростить свой код, но вам не нужно проходить через все это. Я просто добавил его, чтобы вы могли запустить мой код и посмотреть вывод. Часть, с которой мне нужна помощь, прокомментирована:
#________________PART OF CODING THAT NEEDS IMPROVEMENT!!!!________________
Вот моя модель:
#Libraries
import pandas as pd
import numpy as np
import scipy as sp
from math import pi
% matplotlib inline
#Functions:
def getVolume(d,l,w):
LengthLong = w - float(pi*d)/2
LengthShort = l - float(pi*d)/2
AreaLong = d*LengthLong + float(pi*d**2)/4
VolumeSphere = float(1/6)*(d**3)*(pi)
return (AreaLong*LengthShort) + 4*VolumeSphere
def getStrain(sigma,t,E1,E2,N2):
return (sigma*10**-6)*((1/E1)+((1/E2)*(1-np.exp(E2*t/N2))))
def getStress(d,P):
return (d*P)/(2*thickness)
def getLength(l,Eta):
return l +(l*Eta)
def RoundOFF(a):
return float(format(a, '.5f'))
def Convert(b,num):
return[ RoundOFF(x * num) for x in b]
#Stress-Strain Model Parameters:
E1 = 1000
E2 = 1000
N2 = -1
#Initial Values:
#Dimensions:
length = [1.2] #[m]
width = 0.9 #[m]
diameter = 0.3 #[m]
thickness = 0.042*10**-3 #Thickness of membrane [m]
#Assign initial values:
Pressure = 20000.00 #Pressure inside bag [Pa]
Volume = [0.2139149374734583] #Volume of bag based on data [m3]
Stress = [getStress(diameter,Pressure)]
Strain = [0.01962202859081995] #Strain of bag based on data
EE1 = [E1]
EE2 = [E2]
#Error Ranges
Strain_Min = (Strain[-1]*90/100) # Minimum Strain is 10% less than calculated bag
Strain_Max = (Strain[-1]*145/100) # Maximum Strain is 45% more than calculated bag
print(" Original strain =", Strain[-1],"\n","Minimum strain =",Strain_Min,"\n","Maximum strain =",Strain_Max,"\n")
Volume_Min = Volume[-1]*90/100 # Minimum Volume is 10% less than calculated bag
Volume_Max = Volume[-1]*110/100 # Maximum Volume is 10% more than calculated bag
print(" Original volume =", Volume[-1],"\n","Minimum volume=",Volume_Min,"\n","Maximum volume =",Volume_Max)
i=0
max_iter = 10
while i < max_iter and E1 < 200000 and E2 < 200000:
#Stress.append(getStress(diameter,Pressure)) #get STRESS from BARLOWS FORMULA
Strain.append(getStrain(Stress[0],277,E1,E2,N2)) #get STRAIN from HK MODEL
length.append(getLength(length[0],Strain[i+1])) #get LENGTH from STRAIN FORMULA
Volume.append(getVolume(diameter,length[i+1],width)) #get VOLUME of dunnage bag from GEOMETRY
#________________PART OF CODING THAT NEEDS IMPROVEMENT!!!!________________
E1+=200
EE1.append(E1)
E2+=100
EE2.append(E2)
#_______________________________________________________________________
i+=1
#Material pass/fail criteria:
for i in range(max_iter):
Volume[i]
EE1[i]
EE2[i]
length[i]
Strain[i]
#PASS Criteria
if Volume[i]<Volume_Max and Volume[i]>Volume_Min and Strain[i]<Strain_Max and Strain[i]>Strain_Min :
print("\n","PASS")
print("Material parameters that pass criteria:")
print("E1 [MPa] =", EE1[i])
print("E2 [MPa] =", EE2[i],"\n")
print("Resulting in output variables:")
print("Volume [m3] =", Volume[i])
print("Length [m] =", length[i])
print("Strain =", Strain[i])
i+=1
df = pd.DataFrame({'Strain':Convert(Strain,1),'Length [m]':Convert(length,1),'E1 [MPa]':EE1,'E2 [MPa]':EE2,'Volume [m3]':Convert(Volume,1)})
df
Что дает этот вывод:
Результаты
W.r.t улучшение модели Я думаю о чем-то вроде этого:
while i < max_iter and E1 < 200000:
while E2 < 200000:
Stress.append(getStress(diameter,Pressure)) #get STRESS from BARLOWS FORMULA
Strain.append(getStrain(Stress[0],277,E1,E2,N2)) #get STRAIN from HK MODEL
length.append(getLength(length[0],Strain[i+1])) #get LENGTH from STRAIN FORMULA
Volume.append(getVolume(diameter,length[i+1],width)) #get VOLUME of dunnage bag from GEOMETRY
E2+=100
E1+=100
i+=1
Затем следует вывести все значения E2 для всех значений E1 в пределах диапазона шага. Будем весьма благодарны за любые указания в правильном направлении !!!