要求:
针对应力和强度服从正态、对数正态、指数、威布尔分布的任意组合,利用Monte-Carlo方法编制程序,进行可靠度仿真。
代码:

import random
import tkinter as tk
from turtle import positionclass window:def __init__(self):self.root = tk.Tk()self.root.title("Monte Carlo for Reliability")self.root.geometry("800x600")self.interface()def interface(self):"""界面编写位置"""#应力frame_s = tk.LabelFrame(self.root, text="Stress", labelanchor="n")frame_s.place(relx=0.05, rely=0, relwidth=0.9, relheight=0.3)#应力分布单选frame_s_selection = tk.LabelFrame(frame_s, text="Stress distribution", labelanchor="n")frame_s_selection.place(relx=0, rely=0, relwidth=0.2, relheight=0.9)self.v_stress = tk.IntVar()values = { "normal" : 1 , "exponential" : 2 , "weibull" : 3 , "lognormal" : 4}for (text, value) in values.items():tk.Radiobutton(frame_s_selection, text = text, variable = self.v_stress, value = value).grid(row = value, column = 0, sticky ='w')#应力参数tk.Label(frame_s,text="Please enter the parameters of the distribution in the text box:").place(relx=0.3, rely=0, relwidth=0.6, relheight=0.1)#正态分布参数tk.Label(frame_s,text="normal").place(relx=0.2, rely=0.1, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="μ:").place(relx=0.2, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="σ:").place(relx=0.2, rely=0.4, relwidth=0.1, relheight=0.1)self.entrystress_mu = tk.DoubleVar()self.stress_mu = tk.Entry(frame_s, textvariable=self.entrystress_mu).place(relx=0.3, rely=0.2, relwidth=0.1, relheight=0.1)self.entrystress_sigma = tk.DoubleVar()self.stress_sigma = tk.Entry(frame_s, textvariable=self.entrystress_sigma).place(relx=0.3, rely=0.4, relwidth=0.1, relheight=0.1)#指数分布参数tk.Label(frame_s,text="exponential").place(relx=0.4, rely=0.1, relwidth=0.15, relheight=0.1)tk.Label(frame_s,text="λ:").place(relx=0.4, rely=0.3, relwidth=0.1, relheight=0.1)self.entrystress_lambd = tk.DoubleVar()self.stress_lambd = tk.Entry(frame_s, textvariable=self.entrystress_lambd).place(relx=0.5, rely=0.3, relwidth=0.1, relheight=0.1)#威布尔分布参数tk.Label(frame_s,text="weibull").place(relx=0.6, rely=0.1, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="m:").place(relx=0.6, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="θ-r:").place(relx=0.6, rely=0.4, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="r:").place(relx=0.6, rely=0.6, relwidth=0.1, relheight=0.1)self.entrystress_m = tk.DoubleVar()self.stress_m = tk.Entry(frame_s,textvariable=self.entrystress_m).place(relx=0.7, rely=0.2, relwidth=0.1, relheight=0.1)self.entrystress_theta = tk.DoubleVar()self.stress_theta = tk.Entry(frame_s,textvariable=self.entrystress_theta).place(relx=0.7, rely=0.4, relwidth=0.1, relheight=0.1)self.entrystress_r = tk.DoubleVar()self.stress_r = tk.Entry(frame_s,textvariable=self.entrystress_r).place(relx=0.7, rely=0.6, relwidth=0.1, relheight=0.1)#对数正态分布参数tk.Label(frame_s,text="lognormal").place(relx=0.8, rely=0.1, relwidth=0.15, relheight=0.1)tk.Label(frame_s,text="μ:").place(relx=0.8, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_s,text="σ:").place(relx=0.8, rely=0.4, relwidth=0.1, relheight=0.1)self.entrystress_logmu = tk.DoubleVar()self.stress_logmu = tk.Entry(frame_s, textvariable=self.entrystress_logmu).place(relx=0.9, rely=0.2, relwidth=0.1, relheight=0.1)self.entrystress_logsigma = tk.DoubleVar()self.stress_logsigma = tk.Entry(frame_s, textvariable=self.entrystress_logsigma).place(relx=0.9, rely=0.4, relwidth=0.1, relheight=0.1)#强度frame_r = tk.LabelFrame(self.root, text="Resistance", labelanchor="n")frame_r.place(relx=0.05, rely=0.3, relwidth=0.9, relheight=0.3)#强度分布单选frame_r_selection = tk.LabelFrame(frame_r, text="Resistance distribution", labelanchor="n")frame_r_selection.place(relx=0, rely=0, relwidth=0.2, relheight=0.9)self.v_resistance = tk.IntVar()values = { "normal" : 1 , "exponential" : 2 , "weibull" : 3 , "lognormal" : 4}for (text, value) in values.items():tk.Radiobutton(frame_r_selection, text = text, variable = self.v_resistance, value = value).grid(row = value, column = 0, sticky ='w')#强度参数tk.Label(frame_r,text="Please enter the parameters of the distribution in the text box:").place(relx=0.3, rely=0, relwidth=0.6, relheight=0.1)#正态分布参数tk.Label(frame_r,text="normal").place(relx=0.2, rely=0.1, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="μ:").place(relx=0.2, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="σ:").place(relx=0.2, rely=0.4, relwidth=0.1, relheight=0.1)self.entryresis_mu = tk.DoubleVar()self.resistance_mu = tk.Entry(frame_r, textvariable=self.entryresis_mu).place(relx=0.3, rely=0.2, relwidth=0.1, relheight=0.1)self.entryresis_sigma = tk.DoubleVar()self.resistance_sigma = tk.Entry(frame_r, textvariable=self.entryresis_sigma).place(relx=0.3, rely=0.4, relwidth=0.1, relheight=0.1)#指数分布参数tk.Label(frame_r,text="exponential").place(relx=0.4, rely=0.1, relwidth=0.15, relheight=0.1)tk.Label(frame_r,text="λ:").place(relx=0.4, rely=0.3, relwidth=0.1, relheight=0.1)self.entryresis_lambd = tk.DoubleVar()self.resistance_lambd = tk.Entry(frame_r, textvariable=self.entryresis_lambd).place(relx=0.5, rely=0.3, relwidth=0.1, relheight=0.1)#威布尔分布参数tk.Label(frame_r,text="weibull").place(relx=0.6, rely=0.1, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="m:").place(relx=0.6, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="θ-r:").place(relx=0.6, rely=0.4, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="r:").place(relx=0.6, rely=0.6, relwidth=0.1, relheight=0.1)self.entryresis_m = tk.DoubleVar()self.resistance_m = tk.Entry(frame_r, textvariable=self.entryresis_m).place(relx=0.7, rely=0.2, relwidth=0.1, relheight=0.1)self.entryresis_theta = tk.DoubleVar()self.resistance_theta = tk.Entry(frame_r, textvariable=self.entryresis_theta).place(relx=0.7, rely=0.4, relwidth=0.1, relheight=0.1)self.entryresis_r = tk.DoubleVar()self.resistance_r = tk.Entry(frame_r, textvariable=self.entryresis_r).place(relx=0.7, rely=0.6, relwidth=0.1, relheight=0.1)#对数正态分布参数tk.Label(frame_r,text="lognormal").place(relx=0.8, rely=0.1, relwidth=0.15, relheight=0.1)tk.Label(frame_r,text="μ:").place(relx=0.8, rely=0.2, relwidth=0.1, relheight=0.1)tk.Label(frame_r,text="σ:").place(relx=0.8, rely=0.4, relwidth=0.1, relheight=0.1)self.entryresis_logmu = tk.DoubleVar()self.resistance_logmu = tk.Entry(frame_r,  textvariable=self.entryresis_logmu).place(relx=0.9, rely=0.2, relwidth=0.1, relheight=0.1)self.entryresis_logsigma = tk.DoubleVar()self.resistance_logsigma = tk.Entry(frame_r,  textvariable=self.entryresis_logsigma).place(relx=0.9, rely=0.4, relwidth=0.1, relheight=0.1)#模拟self.frame = tk.LabelFrame(self.root, text="Simulation", labelanchor="n")self.frame.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.3)tk.Label(self.frame,text="Please enter the number of simulations:").place(relx=0, rely=0.1, relwidth=0.4, relheight=0.1)self.entrynum = tk.IntVar()self.num = tk.Entry(self.frame, textvariable=self.entrynum).place(relx=0.4, rely=0.1, relwidth=0.2, relheight=0.1)tk.Label(self.frame,text="Results:").place(relx=0.3, rely=0.3, relwidth=0.1, relheight=0.1)self.Button0 = tk.Button(self.frame, text="Start", command=self.start, bg="#7bbfea")self.Button0.place(relx=0.1, rely=0.5, relwidth=0.2, relheight=0.2)def stress_random_data(self, num):"""Input:num: represent the distribution type1--normal; 2--exp; 3--weibull; 4--lognormal"""if num == 1:mu = self.entrystress_mu.get()sigma = self.entrystress_sigma.get()data = random.normalvariate(mu, sigma)elif num == 2:lambd = self.entrystress_lambd.get()data = random.expovariate(lambd)elif num == 3:scale = self.entrystress_m.get()shape = self.entrystress_theta.get()position = self.entrystress_r.get()data = random.weibullvariate(scale, shape)+ positionelse:mu = self.entrystress_logmu.get()sigma = self.entrystress_logsigma.get()data = random.lognormvariate(mu,sigma)return datadef resis_random_data(self, num):"""Input:num: represent the distribution type1--normal; 2--exp; 3--weibull; 4--lognormal"""if num == 1:mu = self.entryresis_mu.get()sigma = self.entryresis_sigma.get()data = random.normalvariate(mu, sigma)elif num == 2:lambd = self.entryresis_lambd.get()data = random.expovariate(lambd)elif num == 3:shape = self.entryresis_m.get()scale = self.entryresis_theta.get()position = self.entryresis_r.get()data = random.weibullvariate(scale, shape) + positionelse:mu = self.entryresis_logmu.get()sigma = self.entryresis_logsigma.get()data = random.lognormvariate(mu,sigma)return datadef start(self):"""开始运行Mente-Carlo模拟"""stress_dis = self.v_stress.get()resistance_dis = self.v_resistance.get()count  = 0for i in range(self.entrynum.get()):s = self.stress_random_data(stress_dis)r = self.resis_random_data(resistance_dis)if r > s:count +=1R = count/self.entrynum.get()self.results = tk.Label(self.frame, text = R).place(relx=0.4, rely=0.3, relwidth=0.2, relheight=0.1)if __name__ == '__main__':a = window()a.root.mainloop()

界面结果

第一次做界面设计,还是很粗糙的,一些功能还有待改善。
并且一些变量名又臭又长……代码语句也不简洁,希望继续进步。

【界面设计】针对应力强度模型使用Monte-Carlo进行可靠性仿真相关推荐

  1. Matlab用向量误差修正VECM模型蒙特卡洛Monte Carlo预测债券利率时间序列和MMSE 预测

    最近我们被客户要求撰写关于VECM的研究报告,包括一些图形和统计输出. 此示例说明如何从 VEC( q ) 模型生成 Monte Carlo 预测.该示例将生成的预测与最小均方误差 (MMSE) 预测 ...

  2. Matlab用向量误差修正VECM模型蒙特卡洛Monte Carlo预测债券利率时间序列和MMSE 预测...

    原文链接:http://tecdat.cn/?p=27246  此示例说明如何从 VEC( q ) 模型生成 Monte Carlo 预测.该示例将生成的预测与最小均方误差 (MMSE) 预测和来自V ...

  3. Markov Chain Monte Carlo

    转载至https://zhuanlan.zhihu.com/p/25610149 [数据分析] Markov Chain Monte Carlo Markov Chain Monte Carlo简称M ...

  4. 应用Bulter-Volmer方程与Monte Carlo 模型分析CO电氧化动力学

    Kinetics analysis of the CO electrooxidation by Bulter-Volmer equation and Mante Carlo simulation Bu ...

  5. 关于软件界面设计、控件颜色搭配、一些实用建议(偷懒技巧)总结——针对C# WinForm/WPF技术

    之前的文章讲了很多控件包的用法,我们做C#WinForm工程师的,基本都是做上位机的,很多都是公司没有专门的设计团队,界面做成什么样,基本全凭自己审美. 但我们只是个程序员,又不懂设计,不可能在界面设 ...

  6. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例

    强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...

  7. martingale、markov chain、Monte Carlo、MCMC

    文章结构如下: 1: MCMC 1.1 MCMC是什么 1.2 为什么需要MCMC 2: 蒙特卡罗 2.1 引入 2.2 均匀分布,Box-Muller 变换 2.3 拒绝接受采样(Acceptanc ...

  8. 在我方某前沿防守地域 matlab,[matlab]Monte Carlo模拟学习笔记

    理论基础:大数定理,当频数足够多时,频率可以逼近概率,从而依靠概率与$\pi$的关系,求出$\pi$ 所以,rand在Monte Carlo中是必不可少的,必须保证测试数据的随机性. 用蒙特卡洛方法进 ...

  9. 使用 Engage 或 Workspace 创建 Monte Carlo 模拟的 4 个简单步骤

    20 世纪 40 年代,研究原子弹的科学家应用 Monte Carlo 模拟计算了一个裂变铀原子引起另一个裂变反应的概率,这是该模拟的首次应用,自此以来已经取得了很大进展.今天我们将介绍如何使用 Mi ...

  10. Hamiltonian Monte Carlo抽样算法的初步理解

    Hamiltonian Monte Carlo抽样算法的初步理解 接受拒绝采样算法 MCMC回顾 Hamiltonian dynamics 拉格朗日方程 从牛顿方程出发推导拉格朗日方程 勒让德变换 哈 ...

最新文章

  1. Mongodb的权限管理
  2. 观察者模式 Observer 发布订阅模式 源 监听 行为型 设计模式(二十三)
  3. nyoj--586(疯牛) poj --2456
  4. 高可用架构设计之道,实战案例直面流量洪峰
  5. 可编程的智能小车,100种玩法,让孩子玩出理科编程思维
  6. C - And and Pair
  7. [BZOJ2599][IOI2011]Race 点分治
  8. 【AI】统计学和机器学习到底有什么区别?
  9. 频率学派还是贝叶斯学派?聊一聊机器学习中的MLE和MAP
  10. python lncrna_分析指令备份.sh
  11. angularjs(显示和隐身) 依赖注入
  12. 洛谷OJ P1074 靶形数独 解题报告
  13. appscan 9.0.3.10 版本下载
  14. 在家自学html,怎样在家自学英语口语
  15. Linux XFS 文件系统文件的删除恢复
  16. 贴片电阻分类、阻值、功率、封装、尺寸
  17. 干货|遗传+禁忌混合算法(HA)算法求解柔性作业车间调度问题(FJSP)附java代码-第一部分
  18. 适合苹果的蓝牙耳机推荐,音质超好的蓝牙耳机推荐
  19. 爬虫学习笔记(六)——Scrapy框架(一):安装、运行流程及简单使用
  20. iPhone X适配之MJ上拉加载更多的适配

热门文章

  1. Jquery之removeClass()
  2. Android EditText 获得焦点不显示光标
  3. 【教程】如何批量将记事本文件或word文本转换成简体/繁体中文,下面教你方法
  4. 虾皮入驻后怎么经营才能:快速出单?
  5. php内部网,php – WordPress内部网址重写是如何工作的?
  6. linux 中etc全拼,英语etc_英语中“等等”缩写成为etc吗要加一点吗全拼是什么谢谢大家_淘题吧...
  7. python与excel教程_Python对Excel操作教程
  8. 基于飞桨实现高光谱影像和全色影像融合
  9. 实验吧 ctf题目 天下武功唯快不破
  10. easyUI双击事件,完整总结