I am writing a code that carry outs the calculation:
def elastic_buckling_pressure(corroded_wall_thickness, external_radius_mm, lambda_value, n_value, youngs_modulus_mpa, poissons_ratio): """ """ section_1 = (1 / ((n_value ** 2 + 0.5 * (lambda_value ** 2)) - 1) ) * ((youngs_modulus_mpa * corroded_wall_thickness) / external_radius_mm) section_2_part_1 = ((n_value**2 + lambda_value**2 - 1)**2 / (12 *(1 - poissons_ratio**2))) * ( corroded_wall_thickness / external_radius_mm) section_2_part_2 = lambda_value**4 / (n_value**2 + lambda_value**2)**2 section_2 = section_2_part_1 + section_2_part_2 calculated_pel_value = section_1 * section_2 return calculated_pel_value
I want to pass incremental n_value value starting from 2 then +0.10 each time it iterates.
For the iteration I am writing while loop counter however, codes does not work.
def iteration_calculation(corroded_wall_thickness, external_radius_mm, lambda_value, n_value, youngs_modulus_mpa, poissons_ratio): epsilon = 0.00001 count = 0 max_iteration = 1000 beta = 0.001 while count < max_iteration: calculated_pel = elastic_buckling_pressure(corroded_wall_thickness=corroded_wall_thickness, external_radius_mm=external_radius_mm, lambda_value=lambda_value, n_value=n_value, youngs_modulus_mpa=youngs_modulus_mpa, poissons_ratio=poissons_ratio) changed_n_value = n_value + 0.10 changed_calculated_pel = elastic_buckling_pressure(corroded_wall_thickness=corroded_wall_thickness, external_radius_mm=external_radius_mm, lambda_value=lambda_value, n_value=changed_n_value, youngs_modulus_mpa=youngs_modulus_mpa, poissons_ratio=poissons_ratio) change_value = changed_calculated_pel - calculated_pel if abs(change_value) < epsilon: beta = calculated_pel break else: beta = changed_calculated_pel count += 1 value_calculated = beta * 1 return value_calculated
training dataset 'corroded_wall_thickness': np.array([10]), 'external_radius_mm': np.array([250]), 'lambda_value': np.array([0.5]), 'n_value': np.array([2]), 'youngs_modulus_mpa': np.array([350000]), 'poissons_ratio': np.array([0.33])
However the code does not iterate and I am kind of struggling how to create the iterative loop. I want to achieve difference between calculated_pel and changed_calculated_pel at minimum as stated by epsilon value 0.00001. once that is achieved, code should break and give the converged value. However, lack of my coding ability has created further issues. So, today I have come to you for help. Any suggestion would be appreciated.
Thank You !
Advertisement
Answer
For anyone who might stumble in similar situation: I have managed to solve the issue.
def iteration_calculation(corroded_wall_thickness, external_radius_mm, lambda_value, youngs_modulus_mpa, poissons_ratio): list_value = {} epsilon = 25 count = 0 max_iteration = 100000 min_value = float("inf") last_value = float("inf") changed_n_value = 2 while count < max_iteration: new_value = elastic_buckling_pressure(corroded_wall_thickness=corroded_wall_thickness, external_radius_mm=external_radius_mm, lambda_value=lambda_value, n_value=changed_n_value, youngs_modulus_mpa=youngs_modulus_mpa, poissons_ratio=poissons_ratio) list_value[changed_n_value] = new_value if abs(last_value - new_value) < epsilon: break last_value = new_value changed_n_value +=0.10 if new_value < min_value: min_value = new_value count+=1 return min_value, list_value