Python画图

Python画图帮别人实现rubberfriction的运算公式。公式不是我专业的内容,完全不懂,只是照着公式用python计算并画图。做出的图,与论文中的图进行对比,完全一致。之所以用python,是因为mat

大家好,又见面了,我是你们的朋友全栈君。

帮别人实现rubber friction的运算公式。公式不是我专业的内容,完全不懂,只是照着公式用python计算并画图。做出的图,与论文中的图进行对比,完全一致。

之所以用python,是因为matlab实在太大了。。。

python科学计算需要用到numpy和scipy,画图需要用到matplotlib。这三个模块的安装,windows下很容易,mac下稍微麻烦一些。

matplotlib需要注意的是,因为公式涉及的三个图,分别是对数-对数,对数-常数,常数-对数坐标,所以不能仅仅使用plot。

步骤一:

公式:<span role="heading" aria-level="2">Python画图

代码:

<span role="heading" aria-level="2">Python画图
<span role="heading" aria-level="2">Python画图
View Code

 1 def EOmega(E1,omega,tau,a1):
 2     a=complex(1,-omega*tau)
 3     b=complex(a1+1,-omega*tau)
 4     return E1*a/b
 5 
 6 def DrawEOmega(E1,tau,a1,xmin,xmax):
 7     re=[]
 8     im=[]
 9 
10     omega = np.logspace(xmin, xmax, 1000)
11     for o in omega:
12         re.append(EOmega(E1,o,tau,a1).real)
13         im.append(abs(EOmega(E1,o,tau,a1).imag))
14 
15     plt.figure()
16     plt.loglog(omega,re,label="$Re(E)$",color="red",linewidth=2)
17     plt.loglog(omega,im,"b--",label="$Im(E)$")
18     plt.ylim(10**0,10**10)
19     plt.xlabel("frequency omega[rad/s]")
20     plt.ylabel("E-modulus[Pa]")
21     plt.title("Complex E-modulus for rheological model")
22     plt.legend(loc="center right")
23     plt.show()
24 
25 
26 E1=10.0**9
27 a1=1000.0
28 tau=1.0/10**3
29 xmin=-2
30 xmax=8
31 DrawEOmega(E1,tau,a1,xmin,xmax)

图:

<span role="heading" aria-level="2">Python画图

 

步骤二:

公式:<span role="heading" aria-level="2">Python画图(注:公式有些错误,G(q)的第二个积分没有Im)

代码:

<span role="heading" aria-level="2">Python画图
<span role="heading" aria-level="2">Python画图
View Code

 1 def EOmegaExpand(E1,tau,a1,q0,zeta,v,phi):  2 omega=q0*zeta*v*np.cos(phi)  3 return EOmega(E1,omega,tau,a1)  4  5 def GQPartTwo(phi,E1,tau,a1,q0,zeta,v,gamma,sigma0):  6 a=EOmegaExpand(E1,tau,a1,q0,zeta,v,phi)  7 b=(1.0-gamma**2)*sigma0  8 c=a/b  9 re=c.real 10 im=c.imag 11 d=re**2+im**2 12 return d 13 14 def GQPartOne(zeta,E1,tau,a1,q0,v,gamma,sigma0,H): 15 a=quad(GQPartTwo, 0, 2*np.pi,args=(E1,tau,a1,q0,zeta,v,gamma,sigma0))[0] 16 b=(zeta**(1.0-2*H))*a 17 return b 18 19 def GQ(E1,tau,a1,q0,v,sigma0,gamma,H,h0,q): 20 a=quad(GQPartOne,1,q/q0,args=(E1,tau,a1,q0,v,gamma,sigma0,H))[0] 21 b=((q0*h0)**2)*H 22 c=a*b/(16*np.pi) 23 return c 24 25 def PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v,zeta): 26 q=q0*zeta 27 a=GQ(E1,tau,a1,q0,v,sigma0,gamma,H,h0,q) 28 b=1/(2*np.sqrt(a)) 29 c=erf(b) 30 return c 31 32 def DrawPQ(E1,tau,a1,q0,sigma0,gamma,H,h0,xmin,xmax): 33 p1=[] 34 p2=[] 35 p3=[] 36 p4=[] 37 p5=[] 38 39 v1=0.00005 40 v2=0.013 41 v3=0.316 42 v4=7.85 43 v5=187 44 45 l = np.linspace(xmin, xmax, 50) 46 for o in l: 47  p1.append(PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v1,o)) 48  p2.append(PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v2,o)) 49  p3.append(PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v3,o)) 50  p4.append(PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v4,o)) 51  p5.append(PQ(E1,tau,a1,q0,sigma0,gamma,H,h0,v5,o)) 52 53  plt.figure() 54 plt.semilogy(l,p1,"b--",label="$v=0.00005m/s$",linewidth=5) 55 plt.semilogy(l,p2,label="$v=0.013m/s$",linewidth=5) 56 plt.semilogy(l,p3,"r--",label="$v=0.316m/s$",linewidth=1) 57 plt.semilogy(l,p4,"b--",label="$v=7.85m/s$",linewidth=1) 58 plt.semilogy(l,p5,label="$v=187m/s$",linewidth=1) 59 plt.xlabel("zeta[-]") 60 plt.ylabel("P[-]") 61 plt.title("Apparent contact area") 62 plt.legend(loc='center left', bbox_to_anchor=(1, 0.5)) 63  plt.show() 64 65 E1=10.0**9 66 a1=1000.0 67 tau=1.0/10**3 68 q0=2000.0 69 sigma0=0.2*(10**6) 70 gamma=0.5 71 H=0.85 72 h0=5.0/10**4 73 xmin=1 74 xmax=100 75 DrawPQ(E1,tau,a1,q0,sigma0,gamma,H,h0,xmin,xmax)

图:

<span role="heading" aria-level="2">Python画图

步骤三:

公式:<span role="heading" aria-level="2">Python画图

这一步的代码没有什么难度,只是注意一下坐标的问题即可。

 

目前还有一点问题,即第二张图中的图例不知道为什么总是无法显示完全,需要再查一下官方文档。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156113.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 非线性最小二乘问题例题_非线性自适应控制算法

    非线性最小二乘问题例题_非线性自适应控制算法摘录的一篇有关求解非线性最小二乘问题的算法–LM算法的文章,当中也加入了一些我个人在求解高精度最小二乘问题时候的一些感触:LM算法,全称为Levenberg-Marquard算法,它可用于解决非线性最小二乘问题,多用于曲线拟合等场合。LM算法的实现并不算难,它的关键是用模型函数 f 对待估参数向量p在其邻域内做线性近似,忽略掉二阶以上的导数项,从而转化为线性最小二乘问题,它具有收敛速度快

  • 伴随矩阵_伴随矩阵通俗理解

    伴随矩阵_伴随矩阵通俗理解$A^$是矩阵$A$的伴随矩阵:$$a^_{ji}=A_{ij}$$其中,$A_{ij}$是$a_{ij}$的代数余子式.方阵的伴随矩阵可用于求逆:$$AA^=|A|I

  • SMOTE算法代码实现

    SMOTE算法代码实现类别不平衡问题类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题。例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问题中,因为绝大多数样本都为正常样本,欺诈样本很少,逻辑回归算法会倾向于把大多数样本判定为正常样本,这样能达到很高的准确率,但是达不到很高的召回率。类别不平衡问题在很多场景中存在,例如欺诈检测,风控识…

  • phpstrom激活码2021_在线激活

    (phpstrom激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • Java和C语言有什么区别?[通俗易懂]

    Java和C语言有什么区别?[通俗易懂]Java和C语言作为现在行业中经常被人提起的两种语言,有很大的区别。选择不同的语言学习以后的发展也会大不相同,那么Java和C语言有什么区别呢?现在学哪种语言更合适呢?从概念上看,C语言是一门面向过程、抽象化的通用程序设计语言;Java是一门面向对象编程语言,而Java语言是从C语言衍生而来,它吸收了C++语言的各种优点,并且摒弃了C++里难以理解的多继承、指针等概念。从概念可以看出C语言相当…

  • 1、java语言概述

    1、java语言概述文章目录Java基础知识图解软件开发软件开发人机交互方式命令行常用的DOS命令常用快捷键java语言java版本历史迭代Java技术体系平台Java在各领域的应用Java语言运行机制及运行过程Java语言的特点跨平台性Java两种核心机制核心机制—Java虚拟机核心机制—垃圾回收Java语言的环境搭建什么是JDK,JRE下载并安装JDK配置环境变量开发HelloWorld开发HelloWorld注意:注释(Comment)文档注释Java基础知识图解软件开发软件开发软件,即一系列按照特定顺序组织的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号