├── .gitignore ├── AProblem.pdf ├── README.md ├── code ├── analysis.py ├── calcdiff12.py ├── calcdiff34.py ├── optimize12.py ├── optimize34.py ├── problem12.py ├── problem12_2.py └── simpson.py ├── pic ├── 1-1运动图.png ├── 1-2运动图.png ├── 2-1运动图.png ├── 2-2运动图.png ├── 3-1运动图.png ├── 3-2运动图.png ├── 3运动图.png ├── 4运动图.png ├── amplitude2.png ├── amplitude4-1.png ├── amplitude4-2.png ├── error2.png ├── error4.png ├── 第二题(1)P-nu.png ├── 第二题(2)P-nu-cont-min.png ├── 第二题(2)P-nu-cont.png ├── 第二题(2)P-nu-surf.png ├── 第四题(2)P-nu-cont-min.png ├── 第四题P-nu-num-cont.png └── 第四题P-nu-surf.png ├── results ├── result1-1.xlsx ├── result1-2.xlsx └── result3.xlsx ├── section ├── Jacobian.pdf ├── Laplace.pdf └── 复振幅求解.pdf └── support ├── Jacobian.nb ├── Laplace.nb ├── analysis.py ├── calcdiff12.py ├── calcdiff34.py ├── optimize12.py ├── optimize34.py ├── problem34.ipynb ├── prolem12.ipynb ├── simpson.py └── 复振幅求解.nb /.gitignore: -------------------------------------------------------------------------------- 1 | *.tex 2 | *.aux 3 | *.log 4 | *.gz -------------------------------------------------------------------------------- /AProblem.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/AProblem.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CUMCM 2 | 2022年全国大学生数学建模竞赛A题国一论文、代码、数据。 3 | 4 | ### 作者 5 | 浙江大学 赵云鹏 何逸阳 闻人豪昱 6 | -------------------------------------------------------------------------------- /code/analysis.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | from calcdiff34 import * 3 | import scipy.integrate as intode 4 | import numpy as np 5 | import matplotlib.pyplot as plt 6 | from matplotlib import cm 7 | import time 8 | import scipy.optimize as opt 9 | from mpl_toolkits.mplot3d import Axes3D 10 | import matplotlib_inline.backend_inline 11 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 12 | import pandas as pd 13 | 14 | 15 | from optimize34 import * 16 | 17 | def equt(t,x,nu,nuM,f,L,w,k,km): 18 | xv=x[0] 19 | xf=x[1] 20 | tv=x[2] 21 | tf=x[3] 22 | vv=x[4] 23 | vf=x[5] 24 | wv=x[6] 25 | wf=x[7] 26 | dxv=vv 27 | dxf=vf 28 | dtv=wv 29 | dtf=wf 30 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 31 | Iv=Iv0+mv*xv**2 32 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 33 | m=mf+ma+mv*np.sin(tv+tf)**2 34 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 35 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 36 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 37 | 38 | def calcPow(nu,nuM,f,L,w,k,km): 39 | print(x0) 40 | sol=intode.solve_ivp(lambda t,x:equt(t,x,nu,nuM,f,L,w,k,km),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 41 | xres=sol.y 42 | tres=sol.t 43 | p=calcP(nu,nuM,xres) 44 | index=xres[1]/np.cos(xres[3])+np.tan(xres[3]) 45 | return Dint(p,titv)/tmax,max(index) 46 | 47 | nu0,num0=res.x[0],res.x[1] 48 | 49 | ff=range(0,2500,40) 50 | mm=[0 for i in ff] 51 | pp=mm[:] 52 | for i in range(len(ff)): 53 | temp=calcPow(nu0,num0,ff[i],L,w,k,km) 54 | mm[i]=temp[1] 55 | pp[i]=temp[0] 56 | 57 | plt.plot(ff,mm) 58 | plt.ylim(0.69,1.2) 59 | plt.xlim(-100,2600) 60 | plt.plot(range(-1000,9000,1000),[1 for i in range(-1000,9000,1000)],color='r') 61 | plt.title('激励力-浮子振幅指数') 62 | plt.xlabel(r'激励力($N$)') 63 | plt.ylabel('浮子振幅指数(m)') 64 | xxx=2289.24 65 | plt.vlines([xxx],[0],[1],linestyles='dashed',colors=['grey']) 66 | plt.text(xxx+50,0.7,r'x='+str(xxx)) 67 | 68 | ll=range(0,7500,100) 69 | mm=[0 for i in ll] 70 | pp=mm[:] 71 | for i in range(len(ll)): 72 | temp=calcPow(nu0,num0,f,ll[i],w,k,km) 73 | mm[i]=temp[1] 74 | pp[i]=temp[0] 75 | 76 | plt.plot(ll,mm) 77 | plt.ylim(0.88,1.02) 78 | plt.xlim(-100,7500) 79 | plt.plot(range(-1000,9000,1000),[1 for i in range(-1000,9000,1000)],color='r') 80 | plt.title('激励力矩-浮子振幅指数') 81 | plt.xlabel(r'激励力矩($N\cdot m$)') 82 | plt.ylabel('浮子振幅指数(m)') 83 | xxx=6932.31 84 | plt.vlines([xxx],[0],[1],linestyles='dashed',colors=['grey']) 85 | plt.text(xxx+50,0.883,r'x='+str(xxx)) -------------------------------------------------------------------------------- /code/calcdiff12.py: -------------------------------------------------------------------------------- 1 | import scipy.integrate as intode 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib import cm 5 | import time 6 | import scipy.optimize as opt 7 | from mpl_toolkits.mplot3d import Axes3D 8 | import matplotlib_inline.backend_inline 9 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 10 | import pandas as pd 11 | 12 | solvemethod='Radau' 13 | problem=2 14 | plt.rcParams['font.sans-serif'] = ['STSong'] 15 | plt.rcParams['axes.unicode_minus'] = False 16 | 17 | k=80000 18 | r=1025*9.8*np.pi 19 | mv=2433 20 | mf=4866 21 | if(problem==1): 22 | ma=1335.535 23 | mu=656.3616 24 | w=1.4005 25 | f=6250 26 | elif(problem==2): 27 | ma=1165.992 28 | mu=167.8395 29 | w=2.2143 30 | f=4890 31 | prd=2*np.pi/w 32 | tmax=prd*40 33 | titv=0.2 34 | nu1=10000 35 | n1=0.5 36 | 37 | start=time.time() 38 | try: 39 | x0=np.array([xres1[i][-1] for i in range(4)]) 40 | x1=np.array([xres2[i][-1] for i in range(4)]) 41 | except: 42 | x0=np.array([0,0,0,0]) 43 | x1=np.array([0,0,0,0]) 44 | def equ1(t,x,nu): 45 | xv=x[0] 46 | xf=x[1] 47 | dxv=x[2] 48 | dxf=x[3] 49 | fxv=dxv 50 | fxf=dxf 51 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 52 | m=mf+ma 53 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 54 | return np.array([fxv,fxf,fdxv,fdxf]) 55 | def fun1(t,x): 56 | return equ1(t,x,nu1) 57 | def equ2(t,x,nu,n): 58 | xv=x[0] 59 | xf=x[1] 60 | dxv=x[2] 61 | dxf=x[3] 62 | fxv=dxv 63 | fxf=dxf 64 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 65 | m=mf+ma 66 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 67 | return np.array([fxv,fxf,fdxv,fdxf]) 68 | def fun2(t,x): 69 | return equ2(t,x,nu1,n1) 70 | print(x0) 71 | print(x1) 72 | te=np.arange(start=0,stop=tmax,step=titv) 73 | sol1 = intode.solve_ivp(fun1,(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 74 | sol2 = intode.solve_ivp(fun2,(te[0],te[-1]),x1,method=solvemethod,t_eval=te) 75 | end=time.time() 76 | print(end-start) 77 | 78 | xres1=sol1.y 79 | xres2=sol2.y 80 | tres=sol1.t 81 | 82 | data=pd.DataFrame(np.transpose(xres1)) 83 | writer=pd.ExcelWriter('xres1-temp.xlsx') 84 | data.to_excel(writer,'page_1',float_format='%.5f') 85 | writer.save() 86 | writer.close() 87 | data=pd.DataFrame(np.transpose(xres2)) 88 | writer=pd.ExcelWriter('xres2-temp.xlsx') 89 | data.to_excel(writer,'page_1',float_format='%.5f') 90 | writer.save() 91 | writer.close() 92 | data=pd.DataFrame(np.transpose(tres)) 93 | writer=pd.ExcelWriter('t-temp.xlsx') 94 | data.to_excel(writer,'page_1',float_format='%.5f') 95 | writer.save() 96 | writer.close() 97 | 98 | x1vres=xres1[0] 99 | x1fres=xres1[1] 100 | v1vres=xres1[2] 101 | v1fres=xres1[3] 102 | x2vres=xres2[0] 103 | x2fres=xres2[1] 104 | v2vres=xres2[2] 105 | v2fres=xres2[3] 106 | 107 | def draw1(): 108 | plt.figure(figsize=(15,5)) 109 | plt.suptitle(r'$\nu\in[0,100000],n=0$时最大功率下浮子与振子运动时间图') 110 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 111 | plt.subplot(2,2,1) 112 | plt.plot(tres,x1vres) 113 | plt.title('振子位置') 114 | plt.xlabel(r't(s)') 115 | plt.ylabel(r'$x_{v}$(m)') 116 | plt.subplot(2,2,2) 117 | plt.plot(tres,v1vres) 118 | plt.title('振子速度') 119 | plt.xlabel(r't(s)') 120 | plt.ylabel(r'$\dot x_{v}$(m/s)') 121 | plt.subplot(2,2,3) 122 | plt.plot(tres,x1fres) 123 | plt.title('浮子位置') 124 | plt.xlabel(r't(s)') 125 | plt.ylabel(r'$x_{f}$(m)') 126 | plt.subplot(2,2,4) 127 | plt.plot(tres,v1fres) 128 | plt.title('浮子速度') 129 | plt.xlabel(r't(s)') 130 | plt.ylabel(r'$\dot x_{f}$(m/s)') 131 | 132 | def draw2(): 133 | plt.figure(figsize=(15,5)) 134 | plt.suptitle(r'$\nu\in[0,100000],n\in[0,1]$时最大功率下浮子与振子稳定运动时间图') 135 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 136 | plt.subplot(2,2,1) 137 | plt.plot(tres,x2vres) 138 | plt.title('振子位置') 139 | plt.xlabel(r't(s)') 140 | plt.ylabel(r'$x_{v}$(m)') 141 | plt.subplot(2,2,2) 142 | plt.plot(tres,v2vres) 143 | plt.title('振子速度') 144 | plt.xlabel(r't(s)') 145 | plt.ylabel(r'$\dot x_{v}$(m/s)') 146 | plt.subplot(2,2,3) 147 | plt.plot(tres,x2fres) 148 | plt.title('浮子位置') 149 | plt.xlabel(r't(s)') 150 | plt.ylabel(r'$x_{f}$(m)') 151 | plt.subplot(2,2,4) 152 | plt.plot(tres,v2fres) 153 | plt.title('浮子速度') 154 | plt.xlabel(r't(s)') 155 | plt.ylabel(r'$\dot x_{f}$(m/s)') 156 | 157 | draw1() 158 | plt.show() -------------------------------------------------------------------------------- /code/calcdiff34.py: -------------------------------------------------------------------------------- 1 | import scipy.integrate as intode 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib import cm 5 | import time 6 | import scipy.optimize as opt 7 | from mpl_toolkits.mplot3d import Axes3D 8 | import matplotlib_inline.backend_inline 9 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 10 | import pandas as pd 11 | 12 | #参数 13 | solvemethod='Radau' 14 | problem=4 15 | k=80000 16 | km=250000 17 | r=1025*9.8*np.pi 18 | rm=8890.7 19 | mv=2433 20 | mf=4866 21 | if(problem==3): 22 | ma=1028.876 23 | Ia=7001.914 24 | mu=683.4558 25 | muM=654.3383 26 | w=1.7152 27 | f=3640 28 | L=1690 29 | elif(problem==4): 30 | ma=1091.099 31 | Ia=7142.493 32 | mu=528.5018 33 | muM=1655.909 34 | w=1.9806 35 | f=1760 36 | L=2140 37 | elif(problem==5): 38 | ma=1091.099 39 | Ia=7142.493 40 | mu=528.5018 41 | muM=1655.909 42 | w=1.9806 43 | f=1760 44 | L=0 45 | prd=2*np.pi/w 46 | tmax=prd*40 47 | titv=0.2 48 | nu1=10000 49 | num1=1000 50 | g=9.8 51 | l=0.5 52 | 53 | #计算转动惯量 54 | R=1 55 | Hcone=0.8 56 | Hclnd=3 57 | M=mf 58 | LL=np.sqrt(R**2+Hcone**2) 59 | temp=np.pi*R*LL+2*np.pi*R*Hclnd 60 | mcone=np.pi*R*LL*M/temp 61 | mclnd=2*np.pi*R*Hclnd*M/temp 62 | If=mclnd*R*R/2+mclnd*Hclnd**2/3+mcone*R*R/4+mcone*Hcone*Hcone/6 63 | rr,h=0.5,0.5 64 | Iv0=mv*rr**2/4+mv*h**2/12 65 | 66 | #微分方程 67 | def equ(t,x,nu,nuM): 68 | xv=x[0] 69 | xf=x[1] 70 | tv=x[2] 71 | tf=x[3] 72 | vv=x[4] 73 | vf=x[5] 74 | wv=x[6] 75 | wf=x[7] 76 | dxv=vv 77 | dxf=vf 78 | dtv=wv 79 | dtf=wf 80 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 81 | Iv=Iv0+mv*xv**2 82 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 83 | m=mf+ma+mv*np.sin(tv+tf)**2 84 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 85 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 86 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 87 | 88 | #求解 89 | te=np.arange(start=0,stop=tmax,step=titv) 90 | try: 91 | x0=np.array([xres[i][-1] for i in range(8)]) 92 | except: 93 | x0=np.array([l-mv*g/k,0,0,0,0,0,0,0]) 94 | print(x0) 95 | sol=intode.solve_ivp(lambda t,x:equ(t,x,nu1,num1),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 96 | xres=sol.y 97 | tres=sol.t 98 | 99 | #输出结果 100 | data=pd.DataFrame(np.transpose(xres)) 101 | writer=pd.ExcelWriter('3-xres.xlsx') 102 | data.to_excel(writer,'page_1',float_format='%.5f') 103 | writer.save() 104 | writer.close() 105 | data=pd.DataFrame(np.transpose(tres)) 106 | writer=pd.ExcelWriter('3-t.xlsx') 107 | data.to_excel(writer,'page_1',float_format='%.5f') 108 | writer.save() 109 | writer.close() 110 | xvres=xres[0] 111 | xfres=xres[1] 112 | tvres=xres[2] 113 | tfres=xres[3] 114 | vvres=xres[4] 115 | vfres=xres[5] 116 | wvres=xres[6] 117 | wfres=xres[7] 118 | plt.rcParams['font.sans-serif'] = ['STSong'] 119 | plt.rcParams['axes.unicode_minus'] = False 120 | fig = plt.figure(figsize=(15, 8)) 121 | plt.suptitle(r'$\nu\in[0,100000],\nu_m\in[0,100000]$中最优解时浮子与振子稳定运动时间图') 122 | plt.subplots_adjust(wspace=0.25,hspace=0.25) 123 | ax1 = fig.add_subplot(2,2,1) 124 | ax1.set_ylim(-0.4,0.4) 125 | ha11,=ax1.plot(tres,xvres,color='b') 126 | ax1.set_ylabel('位移x(m)') 127 | ax1.set_title("振子位移-时间图") 128 | ax1.set_xlabel('时间t(s)') 129 | bx1 = ax1.twinx() 130 | bx1.set_ylim(-0.01,0.01) 131 | hb11,=bx1.plot(tres,wvres,color='g') 132 | bx1.set_ylabel(r'角位移$\theta(rad)$') 133 | ax1.legend([ha11,hb11,],['振子位移','振子角位移']) 134 | ax2 = fig.add_subplot(2,2,3) 135 | ax2.set_ylim(-2,2) 136 | ha2,=ax2.plot(tres,xfres,color='b') 137 | ax2.set_ylabel('位移x(m)') 138 | ax2.set_title("浮子位移-时间图") 139 | ax2.set_xlabel('时间t(s)') 140 | bx2 = ax2.twinx() 141 | bx2.set_ylim(-0.1,0.1) 142 | hb2,=bx2.plot(tres,wfres,color='g') 143 | bx2.set_ylabel(r'角位移$\theta(rad)$') 144 | ax2.legend([ha2,hb2],['浮子位移','浮子角位移']) 145 | ax3 = fig.add_subplot(2,2,2) 146 | ax3.set_ylim(-0.5,0.5) 147 | ha3,=ax3.plot(tres,vvres,color='b') 148 | ax3.set_ylabel('速度v(m/s)') 149 | ax3.set_title("振子速度-时间图") 150 | ax3.set_xlabel('时间t(s)') 151 | bx3 = ax3.twinx() 152 | bx3.set_ylim(-0.005,0.005) 153 | hb3,=bx3.plot(tres,wvres,color='g') 154 | bx3.set_ylabel(r'角速度$\omega(rad/s)$') 155 | ax3.legend([ha3,hb3],['振子速度','振子角速度']) 156 | ax4 = fig.add_subplot(2,2,4) 157 | ax4.set_ylim(-2,2) 158 | ha4,=ax4.plot(tres,vfres,color='b') 159 | ax4.set_ylabel('速度v(m/s)') 160 | ax4.set_title("浮子速度-时间图") 161 | ax4.set_xlabel('时间t(s)') 162 | bx4 = ax4.twinx() 163 | bx4.set_ylim(-0.1,0.1) 164 | hb4,=bx4.plot(tres,wfres,color='g') 165 | bx4.set_ylabel(r'角速度$\omega(rad/s)$') 166 | ax4.legend([ha4,hb4],['浮子速度','浮子角速度']) 167 | 168 | plt.show() -------------------------------------------------------------------------------- /code/optimize12.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | solvemethod='Radau' 14 | problem=2 15 | plt.rcParams['font.sans-serif'] = ['STSong'] 16 | plt.rcParams['axes.unicode_minus'] = False 17 | k=80000 18 | r=1025*9.8*np.pi 19 | mv=2433 20 | mf=4866 21 | if(problem==1): 22 | ma=1335.535 23 | mu=656.3616 24 | w=1.4005 25 | f=6250 26 | elif(problem==2): 27 | ma=1165.992 28 | mu=167.8395 29 | w=2.2143 30 | f=4890 31 | prd=2*np.pi/w 32 | tmax=prd*40 33 | titv=0.2 34 | nu1=10000 35 | n1=0.5 36 | 37 | try: 38 | x0=np.array([xres1[i][-1] for i in range(4)]) 39 | x1=np.array([xres2[i][-1] for i in range(4)]) 40 | except: 41 | x0=np.array([0,0,0,0]) 42 | x1=np.array([0,0,0,0]) 43 | 44 | def equ1(t,x,nu): 45 | xv=x[0] 46 | xf=x[1] 47 | dxv=x[2] 48 | dxf=x[3] 49 | fxv=dxv 50 | fxf=dxf 51 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 52 | m=mf+ma 53 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 54 | return np.array([fxv,fxf,fdxv,fdxf]) 55 | def fun1(t,x): 56 | return equ1(t,x,nu1) 57 | def equ2(t,x,nu,n): 58 | xv=x[0] 59 | xf=x[1] 60 | dxv=x[2] 61 | dxf=x[3] 62 | fxv=dxv 63 | fxf=dxf 64 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 65 | m=mf+ma 66 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 67 | return np.array([fxv,fxf,fdxv,fdxf]) 68 | def fun2(t,x): 69 | return equ2(t,x,nu1,n1) 70 | 71 | def errequ2(nu,n): 72 | sol=intode.solve_ivp(lambda t,x:equ2(t,x,nu,n),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 73 | xres=sol.y 74 | dxv1res=xres[2] 75 | dxf1res=xres[3] 76 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 77 | p1average=Dint(p1,titv)/tmax 78 | print(nu,'&&',n,'->',p1average) 79 | return -p1average 80 | def calcP(nu,n,xres): 81 | dxv1res=xres[2] 82 | dxf1res=xres[3] 83 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 84 | return Dint(p1,titv)/tmax 85 | 86 | aa=np.linspace(start=0,stop=100000,num=200) 87 | cc=np.linspace(start=0,stop=1,num=100) 88 | X,Y=np.meshgrid(aa,cc) 89 | dd=[[-errequ2(i,j) for j in cc] for i in aa] 90 | 91 | Z=np.array(dd) 92 | Z=np.transpose(Z) 93 | fig=plt.figure() 94 | ax = fig.add_subplot(111,projection='3d') 95 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 96 | plt.title('阻尼系数-幂次-功率') 97 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 98 | plt.ylabel(r'幂次$n$') 99 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 100 | 101 | cs=plt.contourf(X,Y,Z,50,extend='max') 102 | plt.title('阻尼系数-幂次-功率') 103 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 104 | plt.ylabel(r'幂次$n$') 105 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 106 | plt.contour(X,Y,Z>228.2,1,colors=['None','Black']) 107 | 108 | nun0=[40000,0.8] 109 | ptstore=np.array(nun0) 110 | def drawpt(x): 111 | global ptstore 112 | plt.scatter(x[0],x[1],color='b') 113 | plt.plot([x[0],ptstore[0]],[x[1],ptstore[1]],color='b') 114 | ptstore=x 115 | cs=plt.contourf(X,Y,Z,50,extend='max') 116 | 117 | plt.title('阻尼系数-幂次-功率') 118 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 119 | plt.ylabel(r'幂次$n$') 120 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 121 | 122 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),nun0,method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.0001,callback=drawpt) 123 | 124 | print(res2) 125 | print(-errequ2(res2.x[0],res2.x[1])) -------------------------------------------------------------------------------- /code/optimize34.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | #参数 14 | solvemethod='Radau' 15 | problem=4 16 | k=80000 17 | km=250000 18 | r=1025*9.8*np.pi 19 | rm=8890.7 20 | mv=2433 21 | mf=4866 22 | if(problem==3): 23 | ma=1028.876 24 | Ia=7001.914 25 | mu=683.4558 26 | muM=654.3383 27 | w=1.7152 28 | f=3640 29 | L=1690 30 | elif(problem==4): 31 | ma=1091.099 32 | Ia=7142.493 33 | mu=528.5018 34 | muM=1655.909 35 | w=1.9806 36 | f=1760 37 | L=2140 38 | elif(problem==5): 39 | ma=1091.099 40 | Ia=7142.493 41 | mu=528.5018 42 | muM=1655.909 43 | w=1.9806 44 | f=1760 45 | L=0 46 | prd=2*np.pi/w 47 | tmax=prd*40 48 | titv=0.2 49 | nu1=10000 50 | num1=1000 51 | g=9.8 52 | l=0.5 53 | 54 | #计算转动惯量 55 | R=1 56 | Hcone=0.8 57 | Hclnd=3 58 | M=mf 59 | LL=np.sqrt(R**2+Hcone**2) 60 | temp=np.pi*R*LL+2*np.pi*R*Hclnd 61 | mcone=np.pi*R*LL*M/temp 62 | mclnd=2*np.pi*R*Hclnd*M/temp 63 | If=mclnd*R*R/2+mclnd*Hclnd**2/3+mcone*R*R/4+mcone*Hcone*Hcone/6 64 | rr,h=0.5,0.5 65 | Iv0=mv*rr**2/4+mv*h**2/12 66 | 67 | #微分方程 68 | def equ(t,x,nu,nuM): 69 | xv=x[0] 70 | xf=x[1] 71 | tv=x[2] 72 | tf=x[3] 73 | vv=x[4] 74 | vf=x[5] 75 | wv=x[6] 76 | wf=x[7] 77 | dxv=vv 78 | dxf=vf 79 | dtv=wv 80 | dtf=wf 81 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 82 | Iv=Iv0+mv*xv**2 83 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 84 | m=mf+ma+mv*np.sin(tv+tf)**2 85 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 86 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 87 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 88 | 89 | #求解 90 | te=np.arange(start=0,stop=tmax,step=titv) 91 | try: 92 | x0=np.array([xres[i][-1] for i in range(8)]) 93 | except: 94 | x0=np.array([l-mv*g/k,0,0,0,0,0,0,0]) 95 | print(x0) 96 | 97 | #计算功率 98 | def calcP(nu,nuM,res): 99 | vv=res[4] 100 | wv=res[6] 101 | 102 | pv=nu*vv**2 103 | pw=nuM*wv**2 104 | p=pv+pw 105 | return p 106 | 107 | #误差函数 108 | def errequ(nu,num): 109 | sol=intode.solve_ivp(lambda t,x:equ(t,x,nu,num),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 110 | xres=sol.y 111 | p=calcP(nu,num,xres) 112 | paverage=Dint(p,titv)/tmax 113 | print(nu,'&&',num,'->',paverage) 114 | return -paverage 115 | 116 | #做初步图像 117 | aa=np.linspace(start=0,stop=100000,num=200) 118 | cc=np.linspace(start=0,stop=100000,num=100) 119 | X,Y=np.meshgrid(aa,cc) 120 | dd=[[-errequ(i,j) for j in cc] for i in aa] 121 | Z=np.array(dd) 122 | Z=np.transpose(Z) 123 | fig=plt.figure() 124 | ax = fig.add_subplot(111,projection='3d') 125 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 126 | plt.title('阻尼系数-转动阻尼系数-功率') 127 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 128 | plt.ylabel(r'转动阻尼系数$\mu_m$') 129 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 130 | cs=plt.contourf(X,Y,Z,50,extend='max') 131 | plt.title('阻尼系数-转动阻尼系数-功率') 132 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 133 | plt.ylabel(r'转动阻尼系数$\nu_m(N\cdot m)$') 134 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 135 | plt.contour(X,Y,Z>731.17,1,colors=['None','Black']) 136 | 137 | #优化 138 | nunum0=[10000,50000] 139 | ptstore=np.array(nunum0) 140 | def drawpt(x): 141 | global ptstore 142 | plt.scatter(x[0],x[1],color='b') 143 | plt.plot([x[0],ptstore[0]],[x[1],ptstore[1]],color='b') 144 | ptstore=x 145 | cs=plt.contourf(X,Y,Z,50,extend='max') 146 | plt.title('阻尼系数-转动阻尼系数-功率') 147 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 148 | plt.ylabel(r'转动阻尼系数$\nu_m(N\cdot m)$') 149 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 150 | res=opt.minimize(lambda x:errequ(x[0],x[1]),nunum0,method='Nelder-Mead',bounds=[(0,100000),(0,100000)],tol=0.0001,callback=drawpt) 151 | print(res) 152 | print(-errequ(res.x[0],res.x[1])) -------------------------------------------------------------------------------- /code/problem12.py: -------------------------------------------------------------------------------- 1 | # %% 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | 14 | # %% 15 | solvemethod='Radau' 16 | problem=2 17 | 18 | plt.rcParams['font.sans-serif'] = ['STSong'] 19 | plt.rcParams['axes.unicode_minus'] = False 20 | 21 | # %% 22 | k=80000 23 | r=1025*9.8*np.pi 24 | mv=2433 25 | mf=4866 26 | if(problem==1): 27 | ma=1335.535 28 | mu=656.3616 29 | w=1.4005 30 | f=6250 31 | elif(problem==2): 32 | ma=1165.992 33 | mu=167.8395 34 | w=2.2143 35 | f=4890 36 | 37 | 38 | prd=2*np.pi/w 39 | tmax=prd*40 40 | titv=0.2 41 | nu1=10000 42 | n1=0.5 43 | 44 | 45 | # %% 46 | 47 | start=time.time() 48 | 49 | try: 50 | x0=np.array([xres1[i][-1] for i in range(4)]) 51 | x1=np.array([xres2[i][-1] for i in range(4)]) 52 | except: 53 | x0=np.array([0,0,0,0]) 54 | x1=np.array([0,0,0,0]) 55 | 56 | 57 | def equ1(t,x,nu): 58 | xv=x[0] 59 | xf=x[1] 60 | dxv=x[2] 61 | dxf=x[3] 62 | fxv=dxv 63 | fxf=dxf 64 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 65 | m=mf+ma 66 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 67 | return np.array([fxv,fxf,fdxv,fdxf]) 68 | 69 | def fun1(t,x): 70 | return equ1(t,x,nu1) 71 | 72 | 73 | def equ2(t,x,nu,n): 74 | xv=x[0] 75 | xf=x[1] 76 | dxv=x[2] 77 | dxf=x[3] 78 | fxv=dxv 79 | fxf=dxf 80 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 81 | m=mf+ma 82 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 83 | return np.array([fxv,fxf,fdxv,fdxf]) 84 | 85 | def fun2(t,x): 86 | return equ2(t,x,nu1,n1) 87 | print(x0) 88 | print(x1) 89 | te=np.arange(start=0,stop=tmax,step=titv) 90 | sol1 = intode.solve_ivp(fun1,(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 91 | sol2 = intode.solve_ivp(fun2,(te[0],te[-1]),x1,method=solvemethod,t_eval=te) 92 | 93 | 94 | 95 | end=time.time() 96 | print(end-start) 97 | 98 | 99 | # %% 100 | xres1=sol1.y 101 | xres2=sol2.y 102 | tres=sol1.t 103 | 104 | 105 | # %% 106 | data=pd.DataFrame(np.transpose(xres1)) 107 | writer=pd.ExcelWriter('xres1-temp.xlsx') 108 | data.to_excel(writer,'page_1',float_format='%.5f') 109 | writer.save() 110 | writer.close() 111 | 112 | # %% 113 | data=pd.DataFrame(np.transpose(xres2)) 114 | writer=pd.ExcelWriter('xres2-temp.xlsx') 115 | data.to_excel(writer,'page_1',float_format='%.5f') 116 | writer.save() 117 | writer.close() 118 | 119 | # %% 120 | data=pd.DataFrame(np.transpose(tres)) 121 | writer=pd.ExcelWriter('t-temp.xlsx') 122 | data.to_excel(writer,'page_1',float_format='%.5f') 123 | writer.save() 124 | writer.close() 125 | 126 | 127 | # %% 128 | x1vres=xres1[0] 129 | x1fres=xres1[1] 130 | v1vres=xres1[2] 131 | v1fres=xres1[3] 132 | 133 | # %% 134 | x2vres=xres2[0] 135 | x2fres=xres2[1] 136 | v2vres=xres2[2] 137 | v2fres=xres2[3] 138 | 139 | # %% 140 | plt.figure(figsize=(15,5)) 141 | plt.suptitle(r'$\nu\in[0,100000],n=0$时最大功率下浮子与振子运动时间图') 142 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 143 | plt.subplot(2,2,1) 144 | plt.plot(tres,x1vres) 145 | plt.title('振子位置') 146 | plt.xlabel(r't(s)') 147 | plt.ylabel(r'$x_{v}$(m)') 148 | plt.subplot(2,2,2) 149 | plt.plot(tres,v1vres) 150 | plt.title('振子速度') 151 | plt.xlabel(r't(s)') 152 | plt.ylabel(r'$\dot x_{v}$(m/s)') 153 | plt.subplot(2,2,3) 154 | plt.plot(tres,x1fres) 155 | plt.title('浮子位置') 156 | plt.xlabel(r't(s)') 157 | plt.ylabel(r'$x_{f}$(m)') 158 | plt.subplot(2,2,4) 159 | plt.plot(tres,v1fres) 160 | plt.title('浮子速度') 161 | plt.xlabel(r't(s)') 162 | plt.ylabel(r'$\dot x_{f}$(m/s)') 163 | 164 | 165 | 166 | # %% 167 | plt.figure(figsize=(15,5)) 168 | plt.suptitle(r'$\nu\in[0,100000],n\in[0,1]$时最大功率下浮子与振子运动时间图') 169 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 170 | plt.subplot(2,2,1) 171 | plt.plot(tres,x2vres) 172 | plt.title('振子位置') 173 | plt.xlabel(r't(s)') 174 | plt.ylabel(r'$x_{v}$(m)') 175 | plt.subplot(2,2,2) 176 | plt.plot(tres,v2vres) 177 | plt.title('振子速度') 178 | plt.xlabel(r't(s)') 179 | plt.ylabel(r'$\dot x_{v}$(m/s)') 180 | plt.subplot(2,2,3) 181 | plt.plot(tres,x2fres) 182 | plt.title('浮子位置') 183 | plt.xlabel(r't(s)') 184 | plt.ylabel(r'$x_{f}$(m)') 185 | plt.subplot(2,2,4) 186 | plt.plot(tres,v2fres) 187 | plt.title('浮子速度') 188 | plt.xlabel(r't(s)') 189 | plt.ylabel(r'$\dot x_{f}$(m/s)') 190 | 191 | 192 | 193 | # %% 194 | def Dint(arr,h): 195 | #复合辛普森积分 196 | n=len(arr) 197 | sum=0 198 | if (n%2==0): 199 | sum+=(arr[-1]+arr[-2])*h/2 200 | n-=1 201 | tsum=arr[0]+arr[n-1] 202 | for i in range(1,n-1): 203 | if(i%2): 204 | tsum+=4*arr[i] 205 | else: 206 | tsum+=2*arr[i] 207 | sum+=tsum*h/3 208 | return sum 209 | 210 | # %% 211 | 212 | def draw1(): 213 | plt.subplot(2,1,1) 214 | 215 | xres=sol1.y 216 | xv1res=xres[0] 217 | dxv1res=xres[2] 218 | xf1res=xres[1] 219 | dxf1res=xres[3] 220 | tres=sol1.t 221 | 222 | p1=nu1*(dxv1res-dxf1res)**2 223 | p1total=np.sum(p1)*titv 224 | 225 | print('1平均功率为',p1total/tmax) 226 | 227 | 228 | plt.plot(tres,xv1res) 229 | plt.plot(tres,xf1res) 230 | 231 | # plt.plot(tres,xv1res-xf1res) 232 | 233 | # plt.plot(tres,p1) 234 | 235 | plt.subplot(2,1,2) 236 | 237 | xres=sol2.y 238 | xv2res=xres[0] 239 | dxv2res=xres[2] 240 | xf2res=xres[1] 241 | dxf2res=xres[3] 242 | tres=sol2.t 243 | 244 | p2=nu1*(dxv2res-dxf2res)**2 245 | p2total=np.sum(p2)*titv 246 | 247 | print('2平均为',p2total/tmax) 248 | 249 | # plt.plot(tres,xv1res-xv2res) 250 | # plt.plot(tres,xf1res-xf2res) 251 | # plt.plot(tres,xv2res-xf2res) 252 | # plt.plot(tres,p1) 253 | 254 | draw1() 255 | 256 | # %% 257 | 258 | def errequ1(value): 259 | value=np.abs(value) 260 | sol=intode.solve_ivp(lambda t,x:equ1(t,x,value),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 261 | xres=sol.y 262 | dxv1res=xres[2] 263 | dxf1res=xres[3] 264 | p1=value*(dxv1res-dxf1res)**2 265 | p1average=Dint(p1,titv)/tmax 266 | print(value,'->',p1average) 267 | return -p1average 268 | 269 | 270 | # %% 271 | def errequ2(nu,n): 272 | sol=intode.solve_ivp(lambda t,x:equ2(t,x,nu,n),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 273 | xres=sol.y 274 | dxv1res=xres[2] 275 | dxf1res=xres[3] 276 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 277 | p1average=Dint(p1,titv)/tmax 278 | print(nu,'&&',n,'->',p1average) 279 | return -p1average 280 | 281 | 282 | # %% 283 | 284 | 285 | 286 | aa=np.arange(start=0,stop=100000,step=1000) 287 | bb=[-errequ1(i) for i in aa] 288 | 289 | 290 | 291 | # %% 292 | aa=np.linspace(start=0,stop=100000,num=200) 293 | cc=np.linspace(start=0,stop=1,num=100) 294 | X,Y=np.meshgrid(aa,cc) 295 | dd=[[-errequ2(i,j) for j in cc] for i in aa] 296 | 297 | 298 | # %% 299 | Z=np.array(dd) 300 | Z=np.transpose(Z) 301 | 302 | # %% 303 | 304 | 305 | fig=plt.figure() 306 | ax = fig.add_subplot(111,projection='3d') 307 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 308 | plt.title('阻尼系数-幂次-功率') 309 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 310 | plt.ylabel(r'幂次$n$') 311 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 312 | 313 | 314 | 315 | cs=plt.contourf(X,Y,Z,50,extend='max') 316 | 317 | plt.title('阻尼系数-幂次-功率') 318 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 319 | plt.ylabel(r'幂次$n$') 320 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 321 | 322 | # %% 323 | 324 | plt.rcParams['font.sans-serif'] = ['STSong'] 325 | plt.rcParams['axes.unicode_minus'] = False 326 | plt.plot(aa,bb) 327 | plt.xlabel(r' 阻尼系数$\nu(N/m)$') 328 | plt.ylabel(r' 平均功率$P(N/m^2)$') 329 | plt.title('各个阻尼系数下的平均功率') 330 | 331 | 332 | # %% 333 | res=opt.minimize(errequ1,[10000],method='Nelder-Mead',bounds=[(0,100000)]) 334 | 335 | print(res) 336 | print(-errequ1(res.x[0])) 337 | 338 | # %% 339 | nu1=res.x[0] 340 | 341 | # %% 342 | errequ2(49875,0),errequ1(49875.06) 343 | 344 | # %% 345 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),[40000,0.2],method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.0001) 346 | 347 | print(res2) 348 | print(-errequ2(res2.x[0],res2.x[1])) 349 | 350 | # %% 351 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),[40000,0.6],method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.0001) 352 | 353 | print(res2) 354 | print(-errequ2(res2.x[0],res2.x[1])) 355 | 356 | # %% 357 | res2=opt.differential_evolution(lambda x:errequ2(np.abs(x[0]),x[1]),x0=[40000,0.2],bounds=[(0,100000),(0,1)],tol=0.001) 358 | 359 | # %% 360 | nu1=res2.x[0] 361 | n1=res2.x[1] 362 | 363 | 364 | -------------------------------------------------------------------------------- /code/problem12_2.py: -------------------------------------------------------------------------------- 1 | # %% 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | 14 | # %% 15 | solvemethod='Radau' 16 | problem=2 17 | 18 | plt.rcParams['font.sans-serif'] = ['STSong'] 19 | plt.rcParams['axes.unicode_minus'] = False 20 | 21 | # %% 22 | k=80000 23 | r=1025*9.8*np.pi 24 | mv=2433 25 | mf=4866 26 | if(problem==1): 27 | ma=1335.535 28 | mu=656.3616 29 | w=1.4005 30 | f=6250 31 | elif(problem==2): 32 | ma=1165.992 33 | mu=167.8395 34 | w=2.2143 35 | f=4890 36 | 37 | 38 | prd=2*np.pi/w 39 | tmax=prd*40 40 | titv=0.2 41 | nu1=10000 42 | n1=0.5 43 | 44 | 45 | # %% 46 | 47 | start=time.time() 48 | 49 | try: 50 | x0=np.array([xres1[i][-1] for i in range(4)]) 51 | x1=np.array([xres2[i][-1] for i in range(4)]) 52 | except: 53 | x0=np.array([0,0,0,0]) 54 | x1=np.array([0,0,0,0]) 55 | 56 | 57 | def equ1(t,x,nu): 58 | xv=x[0] 59 | xf=x[1] 60 | dxv=x[2] 61 | dxf=x[3] 62 | fxv=dxv 63 | fxf=dxf 64 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 65 | m=mf+ma 66 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 67 | return np.array([fxv,fxf,fdxv,fdxf]) 68 | 69 | def fun1(t,x): 70 | return equ1(t,x,nu1) 71 | 72 | 73 | def equ2(t,x,nu,n): 74 | xv=x[0] 75 | xf=x[1] 76 | dxv=x[2] 77 | dxf=x[3] 78 | fxv=dxv 79 | fxf=dxf 80 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 81 | m=mf+ma 82 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 83 | return np.array([fxv,fxf,fdxv,fdxf]) 84 | 85 | def fun2(t,x): 86 | return equ2(t,x,nu1,n1) 87 | print(x0) 88 | print(x1) 89 | te=np.arange(start=0,stop=tmax,step=titv) 90 | sol1 = intode.solve_ivp(fun1,(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 91 | sol2 = intode.solve_ivp(fun2,(te[0],te[-1]),x1,method=solvemethod,t_eval=te) 92 | 93 | 94 | 95 | end=time.time() 96 | print(end-start) 97 | 98 | 99 | # %% 100 | xres1=sol1.y 101 | xres2=sol2.y 102 | tres=sol1.t 103 | 104 | 105 | # %% 106 | data=pd.DataFrame(np.transpose(xres1)) 107 | writer=pd.ExcelWriter('xres1-temp.xlsx') 108 | data.to_excel(writer,'page_1',float_format='%.5f') 109 | writer.save() 110 | writer.close() 111 | 112 | # %% 113 | data=pd.DataFrame(np.transpose(xres2)) 114 | writer=pd.ExcelWriter('xres2-temp.xlsx') 115 | data.to_excel(writer,'page_1',float_format='%.5f') 116 | writer.save() 117 | writer.close() 118 | 119 | # %% 120 | data=pd.DataFrame(np.transpose(tres)) 121 | writer=pd.ExcelWriter('t-temp.xlsx') 122 | data.to_excel(writer,'page_1',float_format='%.5f') 123 | writer.save() 124 | writer.close() 125 | 126 | 127 | # %% 128 | x1vres=xres1[0] 129 | x1fres=xres1[1] 130 | v1vres=xres1[2] 131 | v1fres=xres1[3] 132 | 133 | # %% 134 | x2vres=xres2[0] 135 | x2fres=xres2[1] 136 | v2vres=xres2[2] 137 | v2fres=xres2[3] 138 | 139 | # %% 140 | plt.figure(figsize=(15,5)) 141 | plt.suptitle(r'$\nu\in[0,100000],n=0$时最大功率下浮子与振子运动时间图') 142 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 143 | plt.subplot(2,2,1) 144 | plt.plot(tres,x1vres) 145 | plt.title('振子位置') 146 | plt.xlabel(r't(s)') 147 | plt.ylabel(r'$x_{v}$(m)') 148 | plt.subplot(2,2,2) 149 | plt.plot(tres,v1vres) 150 | plt.title('振子速度') 151 | plt.xlabel(r't(s)') 152 | plt.ylabel(r'$\dot x_{v}$(m/s)') 153 | plt.subplot(2,2,3) 154 | plt.plot(tres,x1fres) 155 | plt.title('浮子位置') 156 | plt.xlabel(r't(s)') 157 | plt.ylabel(r'$x_{f}$(m)') 158 | plt.subplot(2,2,4) 159 | plt.plot(tres,v1fres) 160 | plt.title('浮子速度') 161 | plt.xlabel(r't(s)') 162 | plt.ylabel(r'$\dot x_{f}$(m/s)') 163 | 164 | 165 | 166 | # %% 167 | plt.figure(figsize=(15,5)) 168 | plt.suptitle(r'$\nu\in[0,100000],n\in[0,1]$时最大功率下浮子与振子运动时间图') 169 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 170 | plt.subplot(2,2,1) 171 | plt.plot(tres,x2vres) 172 | plt.title('振子位置') 173 | plt.xlabel(r't(s)') 174 | plt.ylabel(r'$x_{v}$(m)') 175 | plt.subplot(2,2,2) 176 | plt.plot(tres,v2vres) 177 | plt.title('振子速度') 178 | plt.xlabel(r't(s)') 179 | plt.ylabel(r'$\dot x_{v}$(m/s)') 180 | plt.subplot(2,2,3) 181 | plt.plot(tres,x2fres) 182 | plt.title('浮子位置') 183 | plt.xlabel(r't(s)') 184 | plt.ylabel(r'$x_{f}$(m)') 185 | plt.subplot(2,2,4) 186 | plt.plot(tres,v2fres) 187 | plt.title('浮子速度') 188 | plt.xlabel(r't(s)') 189 | plt.ylabel(r'$\dot x_{f}$(m/s)') 190 | 191 | 192 | 193 | # %% 194 | def Dint(arr,h): 195 | #复合辛普森积分 196 | n=len(arr) 197 | sum=0 198 | if (n%2==0): 199 | sum+=(arr[-1]+arr[-2])*h/2 200 | n-=1 201 | tsum=arr[0]+arr[n-1] 202 | for i in range(1,n-1): 203 | if(i%2): 204 | tsum+=4*arr[i] 205 | else: 206 | tsum+=2*arr[i] 207 | sum+=tsum*h/3 208 | return sum 209 | 210 | # %% 211 | 212 | def draw1(): 213 | plt.subplot(2,1,1) 214 | 215 | xres=sol1.y 216 | xv1res=xres[0] 217 | dxv1res=xres[2] 218 | xf1res=xres[1] 219 | dxf1res=xres[3] 220 | tres=sol1.t 221 | 222 | p1=nu1*(dxv1res-dxf1res)**2 223 | p1total=np.sum(p1)*titv 224 | 225 | print('1平均功率为',p1total/tmax) 226 | 227 | 228 | plt.plot(tres,xv1res) 229 | plt.plot(tres,xf1res) 230 | 231 | # plt.plot(tres,xv1res-xf1res) 232 | 233 | # plt.plot(tres,p1) 234 | 235 | plt.subplot(2,1,2) 236 | 237 | xres=sol2.y 238 | xv2res=xres[0] 239 | dxv2res=xres[2] 240 | xf2res=xres[1] 241 | dxf2res=xres[3] 242 | tres=sol2.t 243 | 244 | p2=nu1*(dxv2res-dxf2res)**2 245 | p2total=np.sum(p2)*titv 246 | 247 | print('2平均为',p2total/tmax) 248 | 249 | # plt.plot(tres,xv1res-xv2res) 250 | # plt.plot(tres,xf1res-xf2res) 251 | # plt.plot(tres,xv2res-xf2res) 252 | # plt.plot(tres,p1) 253 | 254 | draw1() 255 | 256 | # %% 257 | 258 | def errequ1(value): 259 | value=np.abs(value) 260 | sol=intode.solve_ivp(lambda t,x:equ1(t,x,value),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 261 | xres=sol.y 262 | dxv1res=xres[2] 263 | dxf1res=xres[3] 264 | p1=value*(dxv1res-dxf1res)**2 265 | p1average=Dint(p1,titv)/tmax 266 | print(value,'->',p1average) 267 | return -p1average 268 | 269 | 270 | # %% 271 | def errequ2(nu,n): 272 | sol=intode.solve_ivp(lambda t,x:equ2(t,x,nu,n),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 273 | xres=sol.y 274 | dxv1res=xres[2] 275 | dxf1res=xres[3] 276 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 277 | p1average=Dint(p1,titv)/tmax 278 | print(nu,'&&',n,'->',p1average) 279 | return -p1average 280 | 281 | 282 | # %% 283 | 284 | 285 | 286 | aa=np.arange(start=0,stop=100000,step=1000) 287 | bb=[-errequ1(i) for i in aa] 288 | 289 | 290 | 291 | # %% 292 | aa=np.linspace(start=0,stop=100000,num=200) 293 | cc=np.linspace(start=0,stop=1,num=100) 294 | X,Y=np.meshgrid(aa,cc) 295 | dd=[[-errequ2(i,j) for j in cc] for i in aa] 296 | 297 | 298 | # %% 299 | Z=np.array(dd) 300 | Z=np.transpose(Z) 301 | 302 | # %% 303 | 304 | 305 | fig=plt.figure() 306 | ax = fig.add_subplot(111,projection='3d') 307 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 308 | plt.title('阻尼系数-幂次-功率') 309 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 310 | plt.ylabel(r'幂次$n$') 311 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 312 | 313 | 314 | 315 | cs=plt.contourf(X,Y,Z,50,extend='max') 316 | 317 | plt.title('阻尼系数-幂次-功率') 318 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 319 | plt.ylabel(r'幂次$n$') 320 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 321 | 322 | # %% 323 | 324 | plt.rcParams['font.sans-serif'] = ['STSong'] 325 | plt.rcParams['axes.unicode_minus'] = False 326 | plt.plot(aa,bb) 327 | plt.xlabel(r' 阻尼系数$\nu(N/m)$') 328 | plt.ylabel(r' 平均功率$P(N/m^2)$') 329 | plt.title('各个阻尼系数下的平均功率') 330 | 331 | 332 | # %% 333 | res=opt.minimize(errequ1,[10000],method='Nelder-Mead',bounds=[(0,100000)]) 334 | 335 | print(res) 336 | print(-errequ1(res.x[0])) 337 | 338 | # %% 339 | nu1=res.x[0] 340 | 341 | # %% 342 | errequ2(49875,0),errequ1(49875.06) 343 | 344 | # %% 345 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),[40000,0.2],method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.0001) 346 | 347 | print(res2) 348 | print(-errequ2(res2.x[0],res2.x[1])) 349 | 350 | # %% 351 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),[40000,0.6],method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.0001) 352 | 353 | print(res2) 354 | print(-errequ2(res2.x[0],res2.x[1])) 355 | 356 | # %% 357 | res2=opt.differential_evolution(lambda x:errequ2(np.abs(x[0]),x[1]),x0=[40000,0.2],bounds=[(0,100000),(0,1)],tol=0.001) 358 | 359 | # %% 360 | nu1=res2.x[0] 361 | n1=res2.x[1] 362 | 363 | 364 | -------------------------------------------------------------------------------- /code/simpson.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | def Dint(arr,h): 4 | #复合辛普森积分 5 | n=len(arr) 6 | sum=0 7 | if (n%2==0): 8 | sum+=(arr[-1]+arr[-2])*h/2 9 | n-=1 10 | tsum=arr[0]+arr[n-1] 11 | for i in range(1,n-1): 12 | if(i%2): 13 | tsum+=4*arr[i] 14 | else: 15 | tsum+=2*arr[i] 16 | sum+=tsum*h/3 17 | return sum -------------------------------------------------------------------------------- /pic/1-1运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/1-1运动图.png -------------------------------------------------------------------------------- /pic/1-2运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/1-2运动图.png -------------------------------------------------------------------------------- /pic/2-1运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/2-1运动图.png -------------------------------------------------------------------------------- /pic/2-2运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/2-2运动图.png -------------------------------------------------------------------------------- /pic/3-1运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/3-1运动图.png -------------------------------------------------------------------------------- /pic/3-2运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/3-2运动图.png -------------------------------------------------------------------------------- /pic/3运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/3运动图.png -------------------------------------------------------------------------------- /pic/4运动图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/4运动图.png -------------------------------------------------------------------------------- /pic/amplitude2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/amplitude2.png -------------------------------------------------------------------------------- /pic/amplitude4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/amplitude4-1.png -------------------------------------------------------------------------------- /pic/amplitude4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/amplitude4-2.png -------------------------------------------------------------------------------- /pic/error2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/error2.png -------------------------------------------------------------------------------- /pic/error4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/error4.png -------------------------------------------------------------------------------- /pic/第二题(1)P-nu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第二题(1)P-nu.png -------------------------------------------------------------------------------- /pic/第二题(2)P-nu-cont-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第二题(2)P-nu-cont-min.png -------------------------------------------------------------------------------- /pic/第二题(2)P-nu-cont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第二题(2)P-nu-cont.png -------------------------------------------------------------------------------- /pic/第二题(2)P-nu-surf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第二题(2)P-nu-surf.png -------------------------------------------------------------------------------- /pic/第四题(2)P-nu-cont-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第四题(2)P-nu-cont-min.png -------------------------------------------------------------------------------- /pic/第四题P-nu-num-cont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第四题P-nu-num-cont.png -------------------------------------------------------------------------------- /pic/第四题P-nu-surf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/pic/第四题P-nu-surf.png -------------------------------------------------------------------------------- /results/result1-1.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/results/result1-1.xlsx -------------------------------------------------------------------------------- /results/result1-2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/results/result1-2.xlsx -------------------------------------------------------------------------------- /results/result3.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/results/result3.xlsx -------------------------------------------------------------------------------- /section/Jacobian.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/section/Jacobian.pdf -------------------------------------------------------------------------------- /section/Laplace.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/section/Laplace.pdf -------------------------------------------------------------------------------- /section/复振幅求解.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zjuyfy/CUMCM/00ad23a8d3f2fb0e8079f72639f85bd1ce8afe7a/section/复振幅求解.pdf -------------------------------------------------------------------------------- /support/Jacobian.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 12.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 8544, 248] 14 | NotebookOptionsPosition[ 7737, 225] 15 | NotebookOutlinePosition[ 8145, 242] 16 | CellTagsIndexPosition[ 8102, 239] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[BoxData[ 22 | RowBox[{ 23 | RowBox[{"(*", "\:6570\:636e", "*)"}], "\[IndentingNewLine]", 24 | RowBox[{ 25 | RowBox[{ 26 | RowBox[{"mv", "=", "2433"}], ";"}], "\n", 27 | RowBox[{ 28 | RowBox[{"mf", "=", "4866"}], ";"}], "\[IndentingNewLine]", 29 | RowBox[{ 30 | RowBox[{"k", "=", "80000"}], ";"}], "\[IndentingNewLine]", 31 | RowBox[{ 32 | RowBox[{"g", "=", "9.8"}], ";"}], "\[IndentingNewLine]", 33 | RowBox[{ 34 | RowBox[{"r", "=", 35 | RowBox[{"1025", "*", "g", "*", "Pi"}]}], ";"}], "\[IndentingNewLine]", 36 | RowBox[{ 37 | RowBox[{"w", "=", "1.4005"}], ";"}], "\[IndentingNewLine]", 38 | RowBox[{ 39 | RowBox[{"ma", "=", "1335.535"}], ";"}], "\[IndentingNewLine]", 40 | RowBox[{ 41 | RowBox[{"\[Mu]", "=", 42 | RowBox[{"u", "=", "656.3616"}]}], ";"}], "\[IndentingNewLine]", 43 | RowBox[{ 44 | RowBox[{"f", "=", "6250"}], ";"}], "\[IndentingNewLine]", 45 | RowBox[{ 46 | RowBox[{"v", "=", "10000"}], ";"}]}]}]], "Input", 47 | CellChangeTimes->{{3.872458026375393*^9, 3.872458056279663*^9}, { 48 | 3.8724581053009977`*^9, 3.872458122704405*^9}}, 49 | CellLabel->"In[1]:=",ExpressionUUID->"eac22b86-9728-47be-b69d-eec30dcd79a5"], 50 | 51 | Cell[CellGroupData[{ 52 | 53 | Cell[BoxData[ 54 | RowBox[{ 55 | RowBox[{"(*", 56 | RowBox[{ 57 | RowBox[{ 58 | RowBox[{"xx1", "'"}], "=", 59 | RowBox[{ 60 | RowBox[{"(", 61 | RowBox[{ 62 | RowBox[{ 63 | RowBox[{"-", "k"}], " ", "x1"}], "+", 64 | RowBox[{"k", " ", "x2"}], "-", " ", 65 | RowBox[{"v", " ", 66 | RowBox[{"(", 67 | RowBox[{"xx1", "-", "xx2"}], ")"}], 68 | RowBox[{"Sqrt", "[", 69 | RowBox[{"Abs", "[", 70 | RowBox[{ 71 | RowBox[{"xx1", "[", "t", "]"}], "-", 72 | RowBox[{"xx2", "[", "t", "]"}]}], "]"}], "]"}]}]}], ")"}], "/", 73 | "mv"}]}], ";", "\[IndentingNewLine]", 74 | RowBox[{ 75 | RowBox[{"xx2", "'"}], "=", 76 | RowBox[{ 77 | RowBox[{"(", 78 | RowBox[{ 79 | RowBox[{ 80 | RowBox[{"-", "k"}], " ", "x2"}], "+", 81 | RowBox[{"k", " ", "x1"}], "+", 82 | RowBox[{"v", " ", 83 | RowBox[{"(", 84 | RowBox[{"xx1", "-", "xx2"}], ")"}], 85 | RowBox[{"Sqrt", "[", 86 | RowBox[{"Abs", "[", 87 | RowBox[{ 88 | RowBox[{"xx1", "[", "t", "]"}], "-", 89 | RowBox[{"xx2", "[", "t", "]"}]}], "]"}], "]"}]}], "-", 90 | RowBox[{"\[Mu]", " ", "xx2"}], "+", 91 | RowBox[{"f", " ", 92 | RowBox[{"Cos", "[", 93 | RowBox[{"w", " ", "t"}], "]"}]}], "-", 94 | RowBox[{"r", " ", "x2"}]}], ")"}], "/", 95 | RowBox[{"(", 96 | RowBox[{"mf", "+", "ma"}], ")"}]}]}], ";", "\[IndentingNewLine]", 97 | RowBox[{ 98 | RowBox[{"x1", "'"}], "=", "xx1"}], ";", "\[IndentingNewLine]", 99 | RowBox[{ 100 | RowBox[{"x2", "'"}], "=", "xx2"}], ";"}], "*)"}], "\[IndentingNewLine]", 101 | 102 | RowBox[{"jacobian", "=", 103 | RowBox[{"N", "[", 104 | RowBox[{"D", "[", 105 | RowBox[{ 106 | RowBox[{"{", 107 | RowBox[{"xx1", ",", "xx2", ",", 108 | RowBox[{ 109 | RowBox[{"(", 110 | RowBox[{ 111 | RowBox[{ 112 | RowBox[{"-", "k"}], " ", "x1"}], "+", 113 | RowBox[{"k", " ", "x2"}], "-", " ", 114 | RowBox[{"v", " ", 115 | RowBox[{"(", 116 | RowBox[{"xx1", "-", "xx2"}], ")"}], 117 | RowBox[{"Sqrt", "[", 118 | RowBox[{"xx1", "-", "xx2"}], "]"}]}]}], ")"}], "/", "mv"}], ",", 119 | 120 | RowBox[{ 121 | RowBox[{"(", 122 | RowBox[{ 123 | RowBox[{ 124 | RowBox[{"-", "k"}], " ", "x2"}], "+", 125 | RowBox[{"k", " ", "x1"}], "+", 126 | RowBox[{"v", " ", 127 | RowBox[{"(", 128 | RowBox[{"xx1", "-", "xx2"}], ")"}], 129 | RowBox[{"Sqrt", "[", 130 | RowBox[{"xx1", "-", "xx2"}], "]"}]}], "-", 131 | RowBox[{"\[Mu]", " ", "xx2"}], "-", 132 | RowBox[{"r", " ", "x2"}]}], ")"}], "/", 133 | RowBox[{"(", 134 | RowBox[{"mf", "+", "ma"}], ")"}]}]}], "}"}], ",", 135 | RowBox[{"{", 136 | RowBox[{"{", 137 | RowBox[{"x1", ",", "x2", ",", "xx1", ",", "xx2"}], "}"}], "}"}]}], 138 | "]"}], "]"}]}]}]], "Input", 139 | CellChangeTimes->{{3.872458026375393*^9, 3.872458031423942*^9}, { 140 | 3.8724581838771133`*^9, 3.8724582375743837`*^9}, 3.872458375794694*^9, { 141 | 3.872458421599287*^9, 3.8724584296988993`*^9}, 3.8724586036408033`*^9, { 142 | 3.872458851177225*^9, 3.8724588669066668`*^9}}, 143 | CellLabel->"In[21]:=",ExpressionUUID->"961d2a82-561d-4b74-b73d-f1a5072ab7fa"], 144 | 145 | Cell[BoxData[ 146 | RowBox[{"{", 147 | RowBox[{ 148 | RowBox[{"{", 149 | RowBox[{"0.`", ",", "0.`", ",", "1.`", ",", "0.`"}], "}"}], ",", 150 | RowBox[{"{", 151 | RowBox[{"0.`", ",", "0.`", ",", "0.`", ",", "1.`"}], "}"}], ",", 152 | RowBox[{"{", 153 | RowBox[{ 154 | RowBox[{"-", "32.88121660501439`"}], ",", "32.88121660501439`", ",", 155 | RowBox[{ 156 | RowBox[{"-", "6.165228113440198`"}], " ", 157 | SqrtBox[ 158 | RowBox[{"xx1", "-", 159 | RowBox[{"1.`", " ", "xx2"}]}]]}], ",", 160 | RowBox[{"6.165228113440198`", " ", 161 | SqrtBox[ 162 | RowBox[{"xx1", "-", 163 | RowBox[{"1.`", " ", "xx2"}]}]]}]}], "}"}], ",", 164 | RowBox[{"{", 165 | RowBox[{"12.900032008204422`", ",", 166 | RowBox[{"-", "17.988658969966224`"}], ",", 167 | RowBox[{"2.418756001538329`", " ", 168 | SqrtBox[ 169 | RowBox[{"xx1", "-", 170 | RowBox[{"1.`", " ", "xx2"}]}]]}], ",", 171 | RowBox[{"0.00016125040010255527`", " ", 172 | RowBox[{"(", 173 | RowBox[{ 174 | RowBox[{"-", "656.3616`"}], "-", 175 | RowBox[{"15000.`", " ", 176 | SqrtBox[ 177 | RowBox[{"xx1", "-", 178 | RowBox[{"1.`", " ", "xx2"}]}]]}]}], ")"}]}]}], "}"}]}], 179 | "}"}]], "Output", 180 | CellChangeTimes->{ 181 | 3.87245815553646*^9, {3.872458193062418*^9, 3.8724582512067633`*^9}, { 182 | 3.872458349301401*^9, 3.872458353659601*^9}, {3.8724584108389473`*^9, 183 | 3.8724584322016497`*^9}, 3.872458605263982*^9, 3.8724588684318953`*^9}, 184 | CellLabel->"Out[21]=",ExpressionUUID->"dd7c1638-6e1e-45d7-ac42-1801a955bb6f"] 185 | }, Open ]], 186 | 187 | Cell[CellGroupData[{ 188 | 189 | Cell[BoxData[ 190 | RowBox[{"jacobian", "/.", 191 | RowBox[{"{", 192 | RowBox[{ 193 | RowBox[{"xx1", "->", "1"}], ",", 194 | RowBox[{"xx2", "->", 195 | RowBox[{"-", "1"}]}]}], "}"}], " ", 196 | RowBox[{"(*", 197 | RowBox[{ 198 | "\:901f\:5ea6\:533a\:95f4\:5728\:6b63\:8d1f\:4e00\:5185", ",", 199 | "\:901f\:5ea6\:5dee\:6700\:5927\:6c42\:6700\:5927\:521a\:5ea6"}], 200 | "*)"}]}]], "Input", 201 | CellChangeTimes->{{3.87245898152738*^9, 3.8724590088654947`*^9}, { 202 | 3.872459075436748*^9, 3.872459138755281*^9}, {3.8724591768873863`*^9, 203 | 3.872459196774316*^9}},ExpressionUUID->"468882cf-528c-4ec9-8a10-\ 204 | b15212e3d20d"], 205 | 206 | Cell[BoxData[ 207 | RowBox[{"{", 208 | RowBox[{ 209 | RowBox[{"{", 210 | RowBox[{"0.`", ",", "0.`", ",", "1.`", ",", "0.`"}], "}"}], ",", 211 | RowBox[{"{", 212 | RowBox[{"0.`", ",", "0.`", ",", "0.`", ",", "1.`"}], "}"}], ",", 213 | RowBox[{"{", 214 | RowBox[{ 215 | RowBox[{"-", "32.88121660501439`"}], ",", "32.88121660501439`", ",", 216 | RowBox[{"-", "8.718949213151019`"}], ",", "8.718949213151019`"}], "}"}], 217 | ",", 218 | RowBox[{"{", 219 | RowBox[{"12.900032008204422`", ",", 220 | RowBox[{"-", "17.988658969966224`"}], ",", "3.420637541446824`", ",", 221 | RowBox[{"-", "3.5264761120587775`"}]}], "}"}]}], "}"}]], "Output", 222 | CellChangeTimes->{{3.872458992707891*^9, 3.872459009365259*^9}}, 223 | CellLabel->"Out[25]=",ExpressionUUID->"d865ea27-35da-4c92-89d1-eead4a4a4c2f"] 224 | }, Open ]] 225 | }, 226 | WindowSize->{808, 816}, 227 | WindowMargins->{{219, Automatic}, {Automatic, 45}}, 228 | FrontEndVersion->"12.3 for Mac OS X x86 (64-bit) \ 229 | (2021\:5e746\:670819\:65e5)", 230 | StyleDefinitions->"Default.nb", 231 | ExpressionUUID->"5fb27e17-0d7d-4255-9683-029961cc62fc" 232 | ] 233 | (* End of Notebook Content *) 234 | 235 | (* Internal cache information *) 236 | (*CellTagsOutline 237 | CellTagsIndex->{} 238 | *) 239 | (*CellTagsIndex 240 | CellTagsIndex->{} 241 | *) 242 | (*NotebookFileOutline 243 | Notebook[{ 244 | Cell[558, 20, 1097, 28, 256, "Input",ExpressionUUID->"eac22b86-9728-47be-b69d-eec30dcd79a5"], 245 | Cell[CellGroupData[{ 246 | Cell[1680, 52, 3185, 90, 188, "Input",ExpressionUUID->"961d2a82-561d-4b74-b73d-f1a5072ab7fa"], 247 | Cell[4868, 144, 1467, 39, 84, "Output",ExpressionUUID->"dd7c1638-6e1e-45d7-ac42-1801a955bb6f"] 248 | }, Open ]], 249 | Cell[CellGroupData[{ 250 | Cell[6372, 188, 589, 15, 30, "Input",ExpressionUUID->"468882cf-528c-4ec9-8a10-b15212e3d20d"], 251 | Cell[6964, 205, 757, 17, 56, "Output",ExpressionUUID->"d865ea27-35da-4c92-89d1-eead4a4a4c2f"] 252 | }, Open ]] 253 | } 254 | ] 255 | *) 256 | 257 | -------------------------------------------------------------------------------- /support/Laplace.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 12.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 20897, 571] 14 | NotebookOptionsPosition[ 18506, 521] 15 | NotebookOutlinePosition[ 18964, 539] 16 | CellTagsIndexPosition[ 18921, 536] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | Cell[BoxData[""], "Input", 22 | CellChangeTimes->{{3.872390278855454*^9, 3.872390302172152*^9}, { 23 | 3.8723903344193983`*^9, 3.872390344223914*^9}, {3.8723904504397583`*^9, 24 | 3.872390621065383*^9}, {3.872390971100922*^9, 3.872390980189507*^9}, { 25 | 3.87239125373523*^9, 3.872391257396427*^9}, {3.872391440757862*^9, 26 | 3.872391440990899*^9}, {3.8723916945489063`*^9, 3.87239169593043*^9}, { 27 | 3.8723980526727753`*^9, 3.872398059746108*^9}, {3.8724192636966476`*^9, 28 | 3.872419282938339*^9}, 3.872419359498258*^9, 29 | 3.872419849482547*^9},ExpressionUUID->"6c706d57-cb9c-40c3-ba65-\ 30 | 9107f082f532"], 31 | 32 | Cell[CellGroupData[{ 33 | 34 | Cell[BoxData[ 35 | RowBox[{"Solve", "[", "\[IndentingNewLine]", 36 | RowBox[{ 37 | RowBox[{"{", 38 | RowBox[{ 39 | RowBox[{ 40 | RowBox[{"mv", " ", 41 | SuperscriptBox["p", "2"], " ", "xv"}], "==", 42 | RowBox[{ 43 | RowBox[{"(", 44 | RowBox[{ 45 | RowBox[{"-", "k"}], "-", 46 | RowBox[{"v", " ", "p"}]}], ")"}], 47 | RowBox[{"(", 48 | RowBox[{"xv", "-", "xf"}], ")"}]}]}], ",", "\[IndentingNewLine]", 49 | RowBox[{ 50 | RowBox[{ 51 | RowBox[{"(", 52 | RowBox[{"mf", "+", "ma"}], ")"}], 53 | SuperscriptBox["p", "2"], "xf"}], "==", 54 | RowBox[{ 55 | RowBox[{ 56 | RowBox[{"(", 57 | RowBox[{"k", "+", 58 | RowBox[{"v", " ", "p"}]}], ")"}], 59 | RowBox[{"(", 60 | RowBox[{"xv", "-", "xf"}], ")"}]}], "-", 61 | RowBox[{"u", " ", "p", " ", "xf"}], "-", 62 | RowBox[{"r", " ", "xf"}], " ", "+", 63 | RowBox[{"f", "*", 64 | FractionBox["p", 65 | RowBox[{ 66 | SuperscriptBox["p", "2"], "+", 67 | SuperscriptBox["w", "2"]}]]}]}]}]}], "}"}], ",", 68 | "\[IndentingNewLine]", 69 | RowBox[{"{", 70 | RowBox[{"xf", ",", "xv"}], "}"}]}], "]"}]], "Input", 71 | CellChangeTimes->{{3.872390278855454*^9, 3.872390302172152*^9}, { 72 | 3.8723903344193983`*^9, 3.872390344223914*^9}, {3.8723904504397583`*^9, 73 | 3.872390621065383*^9}, {3.872390971100922*^9, 3.872390980189507*^9}, { 74 | 3.87239125373523*^9, 3.872391257396427*^9}, {3.872391440757862*^9, 75 | 3.872391440990899*^9}, {3.8723916945489063`*^9, 3.87239169593043*^9}, { 76 | 3.8723980526727753`*^9, 3.872398059746108*^9}, {3.8724192636966476`*^9, 77 | 3.872419282938339*^9}, 3.872419359498258*^9, 3.8724212825094757`*^9}, 78 | CellLabel->"In[3]:=",ExpressionUUID->"f863abe2-1f43-4c3a-98d7-db565aa4f4d8"], 79 | 80 | Cell[BoxData[ 81 | RowBox[{"{", 82 | RowBox[{"{", 83 | RowBox[{ 84 | RowBox[{"xf", "\[Rule]", 85 | FractionBox[ 86 | RowBox[{"f", " ", "p", " ", 87 | RowBox[{"(", 88 | RowBox[{"k", "+", 89 | RowBox[{"mv", " ", 90 | SuperscriptBox["p", "2"]}], "+", 91 | RowBox[{"p", " ", "v"}]}], ")"}]}], 92 | RowBox[{ 93 | RowBox[{"(", 94 | RowBox[{ 95 | RowBox[{"-", 96 | SuperscriptBox[ 97 | RowBox[{"(", 98 | RowBox[{ 99 | RowBox[{"-", "k"}], "-", 100 | RowBox[{"p", " ", "v"}]}], ")"}], "2"]}], "+", 101 | RowBox[{ 102 | RowBox[{"(", 103 | RowBox[{"k", "+", 104 | RowBox[{"mv", " ", 105 | SuperscriptBox["p", "2"]}], "+", 106 | RowBox[{"p", " ", "v"}]}], ")"}], " ", 107 | RowBox[{"(", 108 | RowBox[{"k", "+", 109 | RowBox[{ 110 | RowBox[{"(", 111 | RowBox[{"ma", "+", "mf"}], ")"}], " ", 112 | SuperscriptBox["p", "2"]}], "+", "r", "+", 113 | RowBox[{"p", " ", "u"}], "+", 114 | RowBox[{"p", " ", "v"}]}], ")"}]}]}], ")"}], " ", 115 | RowBox[{"(", 116 | RowBox[{ 117 | SuperscriptBox["p", "2"], "+", 118 | SuperscriptBox["w", "2"]}], ")"}]}]]}], ",", 119 | RowBox[{"xv", "\[Rule]", 120 | FractionBox[ 121 | RowBox[{"f", " ", "p", " ", 122 | RowBox[{"(", 123 | RowBox[{"k", "+", 124 | RowBox[{"p", " ", "v"}]}], ")"}]}], 125 | RowBox[{ 126 | RowBox[{"(", 127 | RowBox[{ 128 | RowBox[{"k", " ", "ma", " ", 129 | SuperscriptBox["p", "2"]}], "+", 130 | RowBox[{"k", " ", "mf", " ", 131 | SuperscriptBox["p", "2"]}], "+", 132 | RowBox[{"k", " ", "mv", " ", 133 | SuperscriptBox["p", "2"]}], "+", 134 | RowBox[{"ma", " ", "mv", " ", 135 | SuperscriptBox["p", "4"]}], "+", 136 | RowBox[{"mf", " ", "mv", " ", 137 | SuperscriptBox["p", "4"]}], "+", 138 | RowBox[{"k", " ", "r"}], "+", 139 | RowBox[{"mv", " ", 140 | SuperscriptBox["p", "2"], " ", "r"}], "+", 141 | RowBox[{"k", " ", "p", " ", "u"}], "+", 142 | RowBox[{"mv", " ", 143 | SuperscriptBox["p", "3"], " ", "u"}], "+", 144 | RowBox[{"ma", " ", 145 | SuperscriptBox["p", "3"], " ", "v"}], "+", 146 | RowBox[{"mf", " ", 147 | SuperscriptBox["p", "3"], " ", "v"}], "+", 148 | RowBox[{"mv", " ", 149 | SuperscriptBox["p", "3"], " ", "v"}], "+", 150 | RowBox[{"p", " ", "r", " ", "v"}], "+", 151 | RowBox[{ 152 | SuperscriptBox["p", "2"], " ", "u", " ", "v"}]}], ")"}], " ", 153 | RowBox[{"(", 154 | RowBox[{ 155 | SuperscriptBox["p", "2"], "+", 156 | SuperscriptBox["w", "2"]}], ")"}]}]]}]}], "}"}], "}"}]], "Output", 157 | CellChangeTimes->{ 158 | 3.872390480749362*^9, {3.872390605197628*^9, 3.872390627315061*^9}, 159 | 3.8723907559325237`*^9, {3.872390972715948*^9, 3.8723909809104767`*^9}, { 160 | 3.872391233757275*^9, 3.872391257732008*^9}, 3.872391442854562*^9, 161 | 3.872391697612486*^9, 3.8723980665297127`*^9, 3.872419205615271*^9, { 162 | 3.8724192894813747`*^9, 3.8724193121388474`*^9}, {3.8724193501679792`*^9, 163 | 3.8724193672552977`*^9}, 3.872420122121636*^9, 3.872422031556839*^9, 164 | 3.8724223105922747`*^9, 3.872422366905751*^9}, 165 | CellLabel->"Out[3]=",ExpressionUUID->"137bc56f-bd27-424e-82ad-ac5f761b4424"] 166 | }, Open ]], 167 | 168 | Cell[CellGroupData[{ 169 | 170 | Cell[BoxData[ 171 | RowBox[{ 172 | RowBox[{"(*", "\:4e0d\:53d8\:53c2\:6570", "*)"}], "\[IndentingNewLine]", 173 | RowBox[{ 174 | RowBox[{ 175 | RowBox[{"mv", "=", "2433"}], ";"}], "\n", 176 | RowBox[{ 177 | RowBox[{"mf", "=", "4866"}], ";"}], "\[IndentingNewLine]", 178 | RowBox[{ 179 | RowBox[{"k", "=", "80000"}], ";"}], "\[IndentingNewLine]", 180 | RowBox[{ 181 | RowBox[{"g", "=", "9.8"}], ";"}], "\[IndentingNewLine]", 182 | RowBox[{ 183 | RowBox[{"r", "=", 184 | RowBox[{"1025", "*", "g", "*", "Pi"}]}], ";"}], "\[IndentingNewLine]", 185 | RowBox[{"v", "=", "10000"}], "\[IndentingNewLine]", 186 | RowBox[{ 187 | RowBox[{"km", "=", "250000"}], ";"}], "\[IndentingNewLine]", 188 | RowBox[{ 189 | RowBox[{"rm", "=", "8890.7"}], ";"}], "\[IndentingNewLine]", 190 | RowBox[{ 191 | RowBox[{"l", "=", "0.5"}], ";"}], "\[IndentingNewLine]", 192 | RowBox[{ 193 | RowBox[{"w", "=", "1.4005"}], ";"}], "\[IndentingNewLine]", 194 | RowBox[{ 195 | RowBox[{"ma", "=", "1335.535"}], ";"}], "\[IndentingNewLine]", 196 | RowBox[{ 197 | RowBox[{"\[Mu]", "=", 198 | RowBox[{"u", "=", "656.3616"}]}], ";"}], "\[IndentingNewLine]", 199 | RowBox[{"(*", 200 | RowBox[{ 201 | RowBox[{"\[Mu]m", "=", 202 | RowBox[{"um", "=", "151.4388"}]}], ";"}], "*)"}], "\[IndentingNewLine]", 203 | RowBox[{ 204 | RowBox[{"f", "=", "6250"}], ";"}]}]}]], "Input", 205 | CellChangeTimes->{{3.872420145502413*^9, 3.87242014743647*^9}}, 206 | CellLabel->"In[4]:=",ExpressionUUID->"3351fb0b-524a-4040-8bdc-52d560f7631e"], 207 | 208 | Cell[BoxData["10000"], "Output", 209 | CellChangeTimes->{ 210 | 3.872420148028863*^9, 3.872422035115513*^9, {3.872422308525231*^9, 211 | 3.872422312584499*^9}, 3.872422368259756*^9}, 212 | CellLabel->"Out[9]=",ExpressionUUID->"c483b613-d765-4f16-b90a-4d0e6d277688"] 213 | }, Open ]], 214 | 215 | Cell[CellGroupData[{ 216 | 217 | Cell[BoxData[{ 218 | RowBox[{"xf", "=", 219 | FractionBox[ 220 | RowBox[{"f", " ", "p", " ", 221 | RowBox[{"(", 222 | RowBox[{"k", "+", 223 | RowBox[{"mv", " ", 224 | SuperscriptBox["p", "2"]}], "+", 225 | RowBox[{"p", " ", "v"}]}], ")"}]}], 226 | RowBox[{ 227 | RowBox[{"(", 228 | RowBox[{ 229 | RowBox[{"-", 230 | SuperscriptBox[ 231 | RowBox[{"(", 232 | RowBox[{ 233 | RowBox[{"-", "k"}], "-", 234 | RowBox[{"p", " ", "v"}]}], ")"}], "2"]}], "+", 235 | RowBox[{ 236 | RowBox[{"(", 237 | RowBox[{"k", "+", 238 | RowBox[{"mv", " ", 239 | SuperscriptBox["p", "2"]}], "+", 240 | RowBox[{"p", " ", "v"}]}], ")"}], " ", 241 | RowBox[{"(", 242 | RowBox[{"k", "+", 243 | RowBox[{ 244 | RowBox[{"(", 245 | RowBox[{"ma", "+", "mf"}], ")"}], " ", 246 | SuperscriptBox["p", "2"]}], "+", "r", "+", 247 | RowBox[{"p", " ", "u"}], "+", 248 | RowBox[{"p", " ", "v"}]}], ")"}]}]}], ")"}], " ", 249 | RowBox[{"(", 250 | RowBox[{ 251 | SuperscriptBox["p", "2"], "+", 252 | SuperscriptBox["w", "2"]}], ")"}]}]]}], "\[IndentingNewLine]", 253 | RowBox[{"xv", "=", 254 | RowBox[{ 255 | RowBox[{"(", 256 | RowBox[{"f", " ", "p", " ", 257 | RowBox[{"(", 258 | RowBox[{"k", "+", 259 | RowBox[{"p", " ", "v"}]}], ")"}]}], ")"}], "/", 260 | RowBox[{"(", 261 | RowBox[{ 262 | RowBox[{"(", 263 | RowBox[{ 264 | RowBox[{"k", " ", "ma", " ", 265 | SuperscriptBox["p", "2"]}], "+", 266 | RowBox[{"k", " ", "mf", " ", 267 | SuperscriptBox["p", "2"]}], "+", 268 | RowBox[{"k", " ", "mv", " ", 269 | SuperscriptBox["p", "2"]}], "+", 270 | RowBox[{"ma", " ", "mv", " ", 271 | SuperscriptBox["p", "4"]}], "+", 272 | RowBox[{"mf", " ", "mv", " ", 273 | SuperscriptBox["p", "4"]}], "+", 274 | RowBox[{"k", " ", "r"}], "+", 275 | RowBox[{"mv", " ", 276 | SuperscriptBox["p", "2"], " ", "r"}], "+", 277 | RowBox[{"k", " ", "p", " ", "u"}], "+", 278 | RowBox[{"mv", " ", 279 | SuperscriptBox["p", "3"], " ", "u"}], "+", 280 | RowBox[{"ma", " ", 281 | SuperscriptBox["p", "3"], " ", "v"}], "+", 282 | RowBox[{"mf", " ", 283 | SuperscriptBox["p", "3"], " ", "v"}], "+", 284 | RowBox[{"mv", " ", 285 | SuperscriptBox["p", "3"], " ", "v"}], "+", 286 | RowBox[{"p", " ", "r", " ", "v"}], "+", 287 | RowBox[{ 288 | SuperscriptBox["p", "2"], " ", "u", " ", "v"}]}], ")"}], " ", 289 | RowBox[{"(", 290 | RowBox[{ 291 | SuperscriptBox["p", "2"], "+", 292 | SuperscriptBox["w", "2"]}], ")"}]}], ")"}]}]}]}], "Input", 293 | CellChangeTimes->{{3.87241917665858*^9, 3.8724191911925783`*^9}, 294 | 3.872419337546651*^9, {3.87241937160402*^9, 3.872419380895734*^9}, { 295 | 3.872419412469369*^9, 3.872419420706129*^9}, {3.872419776015655*^9, 296 | 3.872419794119824*^9}, {3.872419869480784*^9, 3.872419881497345*^9}, { 297 | 3.872422125794024*^9, 3.872422152449382*^9}}, 298 | CellLabel->"In[17]:=",ExpressionUUID->"7705e243-bb0b-4b19-b902-8f38e6cdb542"], 299 | 300 | Cell[BoxData[ 301 | FractionBox[ 302 | RowBox[{"6250", " ", "p", " ", 303 | RowBox[{"(", 304 | RowBox[{"80000", "+", 305 | RowBox[{"10000", " ", "p"}], "+", 306 | RowBox[{"2433", " ", 307 | SuperscriptBox["p", "2"]}]}], ")"}]}], 308 | RowBox[{ 309 | RowBox[{"(", 310 | RowBox[{"1.9614002500000003`", "\[VeryThinSpace]", "+", 311 | SuperscriptBox["p", "2"]}], ")"}], " ", 312 | RowBox[{"(", 313 | RowBox[{ 314 | RowBox[{"-", 315 | SuperscriptBox[ 316 | RowBox[{"(", 317 | RowBox[{ 318 | RowBox[{"-", "80000"}], "-", 319 | RowBox[{"10000", " ", "p"}]}], ")"}], "2"]}], "+", 320 | RowBox[{ 321 | RowBox[{"(", 322 | RowBox[{"80000", "+", 323 | RowBox[{"10000", " ", "p"}], "+", 324 | RowBox[{"2433", " ", 325 | SuperscriptBox["p", "2"]}]}], ")"}], " ", 326 | RowBox[{"(", 327 | RowBox[{"111557.29820530947`", "\[VeryThinSpace]", "+", 328 | RowBox[{"10656.3616`", " ", "p"}], "+", 329 | RowBox[{"6201.535`", " ", 330 | SuperscriptBox["p", "2"]}]}], ")"}]}]}], ")"}]}]]], "Output", 331 | CellChangeTimes->{3.872419881913928*^9, 3.8724201257448997`*^9, 332 | 3.8724220391502657`*^9, 3.8724223147912188`*^9, 3.872422370609695*^9}, 333 | CellLabel->"Out[17]=",ExpressionUUID->"ed132202-abf6-44ed-976a-7a0512e31437"], 334 | 335 | Cell[BoxData[ 336 | FractionBox[ 337 | RowBox[{"6250", " ", "p", " ", 338 | RowBox[{"(", 339 | RowBox[{"80000", "+", 340 | RowBox[{"10000", " ", "p"}]}], ")"}]}], 341 | RowBox[{ 342 | RowBox[{"(", 343 | RowBox[{"1.9614002500000003`", "\[VeryThinSpace]", "+", 344 | SuperscriptBox["p", "2"]}], ")"}], " ", 345 | RowBox[{"(", 346 | RowBox[{"2.5245838564247575`*^9", "+", 347 | RowBox[{"3.680819100530947`*^8", " ", "p"}], "+", 348 | RowBox[{"7.74105322533518`*^8", " ", 349 | SuperscriptBox["p", "2"]}], "+", 350 | RowBox[{"8.79422777728`*^7", " ", 351 | SuperscriptBox["p", "3"]}], "+", 352 | RowBox[{"1.5088334655000001`*^7", " ", 353 | SuperscriptBox["p", "4"]}]}], ")"}]}]]], "Output", 354 | CellChangeTimes->{3.872419881913928*^9, 3.8724201257448997`*^9, 355 | 3.8724220391502657`*^9, 3.8724223147912188`*^9, 3.872422370613283*^9}, 356 | CellLabel->"Out[18]=",ExpressionUUID->"dd39954d-21ac-4988-9ea9-631ae5bf6db5"] 357 | }, Open ]], 358 | 359 | Cell[CellGroupData[{ 360 | 361 | Cell["\:6d6e\:5b50\:4f4d\:79fb", "Section", 362 | CellChangeTimes->{{3.872420391203538*^9, 363 | 3.872420395720952*^9}},ExpressionUUID->"4ea8b7ea-e34c-44b0-87db-\ 364 | 08c1241468d7"], 365 | 366 | Cell[BoxData[ 367 | RowBox[{" ", 368 | RowBox[{ 369 | RowBox[{"Re", "[", 370 | RowBox[{"InverseLaplaceTransform", "[", 371 | RowBox[{"xf", ",", "p", ",", "t"}], "]"}], "]"}], "/.", " ", 372 | RowBox[{"t", "->", 373 | RowBox[{"{", 374 | RowBox[{"Range", "[", 375 | RowBox[{"0", ",", 376 | RowBox[{"40", " ", "2", " ", 377 | RowBox[{"Pi", "/", "w"}]}], ",", "0.2"}], "]"}], "}"}]}]}]}]], "Input",\ 378 | 379 | CellChangeTimes->{{3.872419892396769*^9, 3.872420036665893*^9}, { 380 | 3.872420110920835*^9, 3.87242011349158*^9}, {3.872420162777917*^9, 381 | 3.872420247678697*^9}, {3.872420408972637*^9, 3.872420457480789*^9}, { 382 | 3.872421124287559*^9, 383 | 3.872421221806554*^9}},ExpressionUUID->"92040324-bc81-40c2-a1ad-\ 384 | 3c47e6f3ead9"] 385 | }, Open ]], 386 | 387 | Cell[CellGroupData[{ 388 | 389 | Cell["\:6d6e\:5b50\:901f\:5ea6", "Section", 390 | CellChangeTimes->{{3.872419892396769*^9, 3.872420036665893*^9}, { 391 | 3.872420110920835*^9, 3.87242011349158*^9}, {3.872420162777917*^9, 392 | 3.872420247678697*^9}, {3.872420408972637*^9, 393 | 3.872420458893615*^9}},ExpressionUUID->"c7fbd42c-96f5-4032-b6d0-\ 394 | a2282a688ac7"], 395 | 396 | Cell[BoxData[ 397 | RowBox[{ 398 | RowBox[{"Re", "[", 399 | RowBox[{"D", "[", 400 | RowBox[{ 401 | RowBox[{"InverseLaplaceTransform", "[", 402 | RowBox[{"xv", ",", "p", ",", "t"}], "]"}], ",", "t"}], "]"}], "]"}], "/.", 403 | " ", 404 | RowBox[{"t", "->", 405 | RowBox[{"{", 406 | RowBox[{"Range", "[", 407 | RowBox[{"0", ",", 408 | RowBox[{"40", " ", "2", " ", 409 | RowBox[{"Pi", "/", "w"}]}], ",", "0.2"}], "]"}], "}"}]}]}]], "Input", 410 | CellChangeTimes->{{3.872419892396769*^9, 3.872420036665893*^9}, { 411 | 3.872420110920835*^9, 3.87242011349158*^9}, {3.872420162777917*^9, 412 | 3.872420247678697*^9}, {3.872420408972637*^9, 3.872420463450979*^9}}, 413 | CellLabel->"In[61]:=",ExpressionUUID->"d550f473-30cf-41e8-9dee-da76b0c86d2c"] 414 | }, Open ]], 415 | 416 | Cell[CellGroupData[{ 417 | 418 | Cell["\:632f\:5b50\:4f4d\:79fb", "Section", 419 | CellChangeTimes->{{3.872419892396769*^9, 3.872420036665893*^9}, { 420 | 3.872420110920835*^9, 3.87242011349158*^9}, {3.872420162777917*^9, 421 | 3.872420247678697*^9}, {3.872420408972637*^9, 422 | 3.8724204682136517`*^9}},ExpressionUUID->"85fcde87-2a43-422d-b4f7-\ 423 | 13de28f21bcd"], 424 | 425 | Cell[BoxData[ 426 | RowBox[{ 427 | RowBox[{"Re", "[", 428 | RowBox[{"InverseLaplaceTransform", "[", 429 | RowBox[{"xv", ",", "p", ",", "t"}], "]"}], "]"}], "/.", " ", 430 | RowBox[{"t", "->", 431 | RowBox[{"{", 432 | RowBox[{"Range", "[", 433 | RowBox[{"0", ",", 434 | RowBox[{"40", " ", "2", " ", 435 | RowBox[{"Pi", "/", "w"}]}], ",", "0.2"}], "]"}], "}"}]}]}]], "Input", 436 | CellChangeTimes->{{3.872420271188353*^9, 3.872420271369918*^9}, 437 | 3.872420413126067*^9, {3.872420469688794*^9, 438 | 3.872420487532441*^9}},ExpressionUUID->"7779eaff-8a25-4c59-be7d-\ 439 | 95b574761724"] 440 | }, Open ]], 441 | 442 | Cell[CellGroupData[{ 443 | 444 | Cell["\:632f\:5b50\:901f\:5ea6", "Section", 445 | CellChangeTimes->{{3.872420271188353*^9, 3.872420271369918*^9}, 446 | 3.872420413126067*^9, {3.872420469688794*^9, 447 | 3.87242048865275*^9}},ExpressionUUID->"77ee6f29-de6a-490e-95bf-\ 448 | c684711eec86"], 449 | 450 | Cell[BoxData[ 451 | RowBox[{ 452 | RowBox[{"Re", "[", 453 | RowBox[{"D", "[", 454 | RowBox[{ 455 | RowBox[{"InverseLaplaceTransform", "[", 456 | RowBox[{"xf", ",", "p", ",", "t"}], "]"}], ",", "t"}], "]"}], "]"}], "/.", 457 | " ", 458 | RowBox[{"t", "->", 459 | RowBox[{"{", 460 | RowBox[{"Range", "[", 461 | RowBox[{"0", ",", 462 | RowBox[{"40", " ", "2", " ", 463 | RowBox[{"Pi", "/", "w"}]}], ",", "0.2"}], "]"}], "}"}]}]}]], "Input", 464 | CellChangeTimes->{{3.872420379228325*^9, 465 | 3.872420380867051*^9}},ExpressionUUID->"5ce78d11-2495-4462-b3cb-\ 466 | eca8016ac8c7"] 467 | }, Open ]], 468 | 469 | Cell[CellGroupData[{ 470 | 471 | Cell["\:753b\:56fe\:50cf", "Section", 472 | CellChangeTimes->{{3.872421845476473*^9, 3.8724218473547897`*^9}, { 473 | 3.872421971534007*^9, 474 | 3.872421981375771*^9}},ExpressionUUID->"6d58c658-a24a-4c53-ba98-\ 475 | f70d5c7f8768"], 476 | 477 | Cell[BoxData[{ 478 | RowBox[{ 479 | RowBox[{"Xf", "=", 480 | RowBox[{"Re", "[", 481 | RowBox[{"InverseLaplaceTransform", "[", 482 | RowBox[{"xf", ",", "p", ",", "t"}], "]"}], "]"}]}], 483 | ";"}], "\[IndentingNewLine]", 484 | RowBox[{ 485 | RowBox[{"Xv", "=", 486 | RowBox[{"Re", "[", 487 | RowBox[{"InverseLaplaceTransform", "[", 488 | RowBox[{"xv", ",", "p", ",", "t"}], "]"}], "]"}]}], ";"}]}], "Input", 489 | CellChangeTimes->{{3.872421845476473*^9, 3.8724218473547897`*^9}, { 490 | 3.872421971534007*^9, 3.87242199026381*^9}, {3.87242205118419*^9, 491 | 3.8724220790669518`*^9}, {3.872422165126581*^9, 3.872422178939818*^9}}, 492 | CellLabel->"In[19]:=",ExpressionUUID->"667dd04e-0c31-4d36-a3fd-0892310ea878"], 493 | 494 | Cell[BoxData[{ 495 | RowBox[{"Plot", "[", " ", 496 | RowBox[{ 497 | RowBox[{"{", 498 | RowBox[{"Xv", ",", "Xf"}], "}"}], ",", 499 | RowBox[{"{", 500 | RowBox[{"t", ",", "0", ",", 501 | RowBox[{"40", "*", "2", 502 | RowBox[{"Pi", "/", "w"}]}]}], "}"}]}], "]"}], "\[IndentingNewLine]", 503 | RowBox[{ 504 | RowBox[{"(*", 505 | RowBox[{"Plot", "[", 506 | RowBox[{ 507 | RowBox[{"{", 508 | RowBox[{"D", "[", 509 | RowBox[{"Xf", ",", "t"}], "]"}], "}"}], ",", 510 | RowBox[{"{", 511 | RowBox[{"t", ",", "0", ",", "200"}], "}"}]}], "]"}], "*)"}]}]}], "Input",\ 512 | 513 | CellChangeTimes->{{3.872421850510427*^9, 3.872421946263998*^9}, { 514 | 3.872422000809783*^9, 3.8724220009540253`*^9}, {3.872422067683558*^9, 515 | 3.872422117687866*^9}, {3.872422189568315*^9, 3.872422252283908*^9}, { 516 | 3.8724223586660013`*^9, 3.87242243157771*^9}, {3.8724224931107197`*^9, 517 | 3.872422545647497*^9}, {3.8724552694724703`*^9, 3.8724552777336597`*^9}, 518 | 3.872455370904414*^9},ExpressionUUID->"0fdb12ca-4e43-419d-bfd7-\ 519 | 35a6edee8f4a"] 520 | }, Open ]] 521 | }, 522 | WindowSize->{1122, 849}, 523 | WindowMargins->{{84, Automatic}, {0, Automatic}}, 524 | TaggingRules->Association["TryRealOnly" -> False], 525 | FrontEndVersion->"12.3 for Mac OS X x86 (64-bit) \ 526 | (2021\:5e746\:670819\:65e5)", 527 | StyleDefinitions->"Default.nb", 528 | ExpressionUUID->"8b08bc8d-325e-41d2-a147-8646cc551ab8" 529 | ] 530 | (* End of Notebook Content *) 531 | 532 | (* Internal cache information *) 533 | (*CellTagsOutline 534 | CellTagsIndex->{} 535 | *) 536 | (*CellTagsIndex 537 | CellTagsIndex->{} 538 | *) 539 | (*NotebookFileOutline 540 | Notebook[{ 541 | Cell[558, 20, 597, 9, 30, "Input",ExpressionUUID->"6c706d57-cb9c-40c3-ba65-9107f082f532"], 542 | Cell[CellGroupData[{ 543 | Cell[1180, 33, 1718, 44, 150, "Input",ExpressionUUID->"f863abe2-1f43-4c3a-98d7-db565aa4f4d8"], 544 | Cell[2901, 79, 3249, 85, 110, "Output",ExpressionUUID->"137bc56f-bd27-424e-82ad-ac5f761b4424"] 545 | }, Open ]], 546 | Cell[CellGroupData[{ 547 | Cell[6187, 169, 1407, 36, 340, "Input",ExpressionUUID->"3351fb0b-524a-4040-8bdc-52d560f7631e"], 548 | Cell[7597, 207, 249, 4, 34, "Output",ExpressionUUID->"c483b613-d765-4f16-b90a-4d0e6d277688"] 549 | }, Open ]], 550 | Cell[CellGroupData[{ 551 | Cell[7883, 216, 2886, 81, 85, "Input",ExpressionUUID->"7705e243-bb0b-4b19-b902-8f38e6cdb542"], 552 | Cell[10772, 299, 1208, 33, 62, "Output",ExpressionUUID->"ed132202-abf6-44ed-976a-7a0512e31437"], 553 | Cell[11983, 334, 886, 21, 57, "Output",ExpressionUUID->"dd39954d-21ac-4988-9ea9-631ae5bf6db5"] 554 | }, Open ]], 555 | Cell[CellGroupData[{ 556 | Cell[12906, 360, 169, 3, 67, "Section",ExpressionUUID->"4ea8b7ea-e34c-44b0-87db-08c1241468d7"], 557 | Cell[13078, 365, 705, 18, 44, "Input",ExpressionUUID->"92040324-bc81-40c2-a1ad-3c47e6f3ead9"] 558 | }, Open ]], 559 | Cell[CellGroupData[{ 560 | Cell[13820, 388, 312, 5, 67, "Section",ExpressionUUID->"c7fbd42c-96f5-4032-b6d0-a2282a688ac7"], 561 | Cell[14135, 395, 707, 17, 44, "Input",ExpressionUUID->"d550f473-30cf-41e8-9dee-da76b0c86d2c"] 562 | }, Open ]], 563 | Cell[CellGroupData[{ 564 | Cell[14879, 417, 314, 5, 67, "Section",ExpressionUUID->"85fcde87-2a43-422d-b4f7-13de28f21bcd"], 565 | Cell[15196, 424, 557, 14, 44, "Input",ExpressionUUID->"7779eaff-8a25-4c59-be7d-95b574761724"] 566 | }, Open ]], 567 | Cell[CellGroupData[{ 568 | Cell[15790, 443, 241, 4, 67, "Section",ExpressionUUID->"77ee6f29-de6a-490e-95bf-c684711eec86"], 569 | Cell[16034, 449, 545, 16, 44, "Input",ExpressionUUID->"5ce78d11-2495-4462-b3cb-eca8016ac8c7"] 570 | }, Open ]], 571 | Cell[CellGroupData[{ 572 | Cell[16616, 470, 214, 4, 67, "Section",ExpressionUUID->"6d58c658-a24a-4c53-ba98-f70d5c7f8768"], 573 | Cell[16833, 476, 671, 15, 80, "Input",ExpressionUUID->"667dd04e-0c31-4d36-a3fd-0892310ea878"], 574 | Cell[17507, 493, 983, 25, 67, "Input",ExpressionUUID->"0fdb12ca-4e43-419d-bfd7-35a6edee8f4a"] 575 | }, Open ]] 576 | } 577 | ] 578 | *) 579 | 580 | -------------------------------------------------------------------------------- /support/analysis.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | from calcdiff34 import * 3 | import scipy.integrate as intode 4 | import numpy as np 5 | import matplotlib.pyplot as plt 6 | from matplotlib import cm 7 | import time 8 | import scipy.optimize as opt 9 | from mpl_toolkits.mplot3d import Axes3D 10 | import matplotlib_inline.backend_inline 11 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 12 | import pandas as pd 13 | 14 | 15 | from optimize34 import * 16 | 17 | def equt(t,x,nu,nuM,f,L,w,k,km): 18 | xv=x[0] 19 | xf=x[1] 20 | tv=x[2] 21 | tf=x[3] 22 | vv=x[4] 23 | vf=x[5] 24 | wv=x[6] 25 | wf=x[7] 26 | dxv=vv 27 | dxf=vf 28 | dtv=wv 29 | dtf=wf 30 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 31 | Iv=Iv0+mv*xv**2 32 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 33 | m=mf+ma+mv*np.sin(tv+tf)**2 34 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 35 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 36 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 37 | 38 | def calcPow(nu,nuM,f,L,w,k,km): 39 | print(x0) 40 | sol=intode.solve_ivp(lambda t,x:equt(t,x,nu,nuM,f,L,w,k,km),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 41 | xres=sol.y 42 | tres=sol.t 43 | p=calcP(nu,nuM,xres) 44 | index=xres[1]/np.cos(xres[3])+np.tan(xres[3]) 45 | return Dint(p,titv)/tmax,max(index) 46 | 47 | nu0,num0=res.x[0],res.x[1] 48 | 49 | ff=range(0,2500,40) 50 | mm=[0 for i in ff] 51 | pp=mm[:] 52 | for i in range(len(ff)): 53 | temp=calcPow(nu0,num0,ff[i],L,w,k,km) 54 | mm[i]=temp[1] 55 | pp[i]=temp[0] 56 | 57 | plt.plot(ff,mm) 58 | plt.ylim(0.69,1.2) 59 | plt.xlim(-100,2600) 60 | plt.plot(range(-1000,9000,1000),[1 for i in range(-1000,9000,1000)],color='r') 61 | plt.title('激励力-浮子振幅指数') 62 | plt.xlabel(r'激励力($N$)') 63 | plt.ylabel('浮子振幅指数(m)') 64 | xxx=2289.24 65 | plt.vlines([xxx],[0],[1],linestyles='dashed',colors=['grey']) 66 | plt.text(xxx+50,0.7,r'x='+str(xxx)) 67 | 68 | ll=range(0,7500,100) 69 | mm=[0 for i in ll] 70 | pp=mm[:] 71 | for i in range(len(ll)): 72 | temp=calcPow(nu0,num0,f,ll[i],w,k,km) 73 | mm[i]=temp[1] 74 | pp[i]=temp[0] 75 | 76 | plt.plot(ll,mm) 77 | plt.ylim(0.88,1.02) 78 | plt.xlim(-100,7500) 79 | plt.plot(range(-1000,9000,1000),[1 for i in range(-1000,9000,1000)],color='r') 80 | plt.title('激励力矩-浮子振幅指数') 81 | plt.xlabel(r'激励力矩($N\cdot m$)') 82 | plt.ylabel('浮子振幅指数(m)') 83 | xxx=6932.31 84 | plt.vlines([xxx],[0],[1],linestyles='dashed',colors=['grey']) 85 | plt.text(xxx+50,0.883,r'x='+str(xxx)) -------------------------------------------------------------------------------- /support/calcdiff12.py: -------------------------------------------------------------------------------- 1 | import scipy.integrate as intode 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib import cm 5 | import time 6 | import scipy.optimize as opt 7 | from mpl_toolkits.mplot3d import Axes3D 8 | import matplotlib_inline.backend_inline 9 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 10 | import pandas as pd 11 | 12 | solvemethod='Radau' 13 | problem=2 14 | plt.rcParams['font.sans-serif'] = ['STSong'] 15 | plt.rcParams['axes.unicode_minus'] = False 16 | 17 | k=80000 18 | r=1025*9.8*np.pi 19 | mv=2433 20 | mf=4866 21 | if(problem==1): 22 | ma=1335.535 23 | mu=656.3616 24 | w=1.4005 25 | f=6250 26 | elif(problem==2): 27 | ma=1165.992 28 | mu=167.8395 29 | w=2.2143 30 | f=4890 31 | prd=2*np.pi/w 32 | tmax=prd*40 33 | titv=0.2 34 | nu1=10000 35 | n1=0.5 36 | 37 | start=time.time() 38 | try: 39 | x0=np.array([xres1[i][-1] for i in range(4)]) 40 | x1=np.array([xres2[i][-1] for i in range(4)]) 41 | except: 42 | x0=np.array([0,0,0,0]) 43 | x1=np.array([0,0,0,0]) 44 | def equ1(t,x,nu): 45 | xv=x[0] 46 | xf=x[1] 47 | dxv=x[2] 48 | dxf=x[3] 49 | fxv=dxv 50 | fxf=dxf 51 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 52 | m=mf+ma 53 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 54 | return np.array([fxv,fxf,fdxv,fdxf]) 55 | def fun1(t,x): 56 | return equ1(t,x,nu1) 57 | def equ2(t,x,nu,n): 58 | xv=x[0] 59 | xf=x[1] 60 | dxv=x[2] 61 | dxf=x[3] 62 | fxv=dxv 63 | fxf=dxf 64 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 65 | m=mf+ma 66 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 67 | return np.array([fxv,fxf,fdxv,fdxf]) 68 | def fun2(t,x): 69 | return equ2(t,x,nu1,n1) 70 | print(x0) 71 | print(x1) 72 | te=np.arange(start=0,stop=tmax,step=titv) 73 | sol1 = intode.solve_ivp(fun1,(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 74 | sol2 = intode.solve_ivp(fun2,(te[0],te[-1]),x1,method=solvemethod,t_eval=te) 75 | end=time.time() 76 | print(end-start) 77 | 78 | xres1=sol1.y 79 | xres2=sol2.y 80 | tres=sol1.t 81 | 82 | data=pd.DataFrame(np.transpose(xres1)) 83 | writer=pd.ExcelWriter('xres1-temp.xlsx') 84 | data.to_excel(writer,'page_1',float_format='%.5f') 85 | writer.save() 86 | writer.close() 87 | data=pd.DataFrame(np.transpose(xres2)) 88 | writer=pd.ExcelWriter('xres2-temp.xlsx') 89 | data.to_excel(writer,'page_1',float_format='%.5f') 90 | writer.save() 91 | writer.close() 92 | data=pd.DataFrame(np.transpose(tres)) 93 | writer=pd.ExcelWriter('t-temp.xlsx') 94 | data.to_excel(writer,'page_1',float_format='%.5f') 95 | writer.save() 96 | writer.close() 97 | 98 | x1vres=xres1[0] 99 | x1fres=xres1[1] 100 | v1vres=xres1[2] 101 | v1fres=xres1[3] 102 | x2vres=xres2[0] 103 | x2fres=xres2[1] 104 | v2vres=xres2[2] 105 | v2fres=xres2[3] 106 | 107 | def draw1(): 108 | plt.figure(figsize=(15,5)) 109 | plt.suptitle(r'$\nu\in[0,100000],n=0$时最大功率下浮子与振子运动时间图') 110 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 111 | plt.subplot(2,2,1) 112 | plt.plot(tres,x1vres) 113 | plt.title('振子位置') 114 | plt.xlabel(r't(s)') 115 | plt.ylabel(r'$x_{v}$(m)') 116 | plt.subplot(2,2,2) 117 | plt.plot(tres,v1vres) 118 | plt.title('振子速度') 119 | plt.xlabel(r't(s)') 120 | plt.ylabel(r'$\dot x_{v}$(m/s)') 121 | plt.subplot(2,2,3) 122 | plt.plot(tres,x1fres) 123 | plt.title('浮子位置') 124 | plt.xlabel(r't(s)') 125 | plt.ylabel(r'$x_{f}$(m)') 126 | plt.subplot(2,2,4) 127 | plt.plot(tres,v1fres) 128 | plt.title('浮子速度') 129 | plt.xlabel(r't(s)') 130 | plt.ylabel(r'$\dot x_{f}$(m/s)') 131 | 132 | def draw2(): 133 | plt.figure(figsize=(15,5)) 134 | plt.suptitle(r'$\nu\in[0,100000],n\in[0,1]$时最大功率下浮子与振子稳定运动时间图') 135 | plt.subplots_adjust(wspace=0.25,hspace=0.45) 136 | plt.subplot(2,2,1) 137 | plt.plot(tres,x2vres) 138 | plt.title('振子位置') 139 | plt.xlabel(r't(s)') 140 | plt.ylabel(r'$x_{v}$(m)') 141 | plt.subplot(2,2,2) 142 | plt.plot(tres,v2vres) 143 | plt.title('振子速度') 144 | plt.xlabel(r't(s)') 145 | plt.ylabel(r'$\dot x_{v}$(m/s)') 146 | plt.subplot(2,2,3) 147 | plt.plot(tres,x2fres) 148 | plt.title('浮子位置') 149 | plt.xlabel(r't(s)') 150 | plt.ylabel(r'$x_{f}$(m)') 151 | plt.subplot(2,2,4) 152 | plt.plot(tres,v2fres) 153 | plt.title('浮子速度') 154 | plt.xlabel(r't(s)') 155 | plt.ylabel(r'$\dot x_{f}$(m/s)') 156 | 157 | draw1() 158 | plt.show() -------------------------------------------------------------------------------- /support/calcdiff34.py: -------------------------------------------------------------------------------- 1 | import scipy.integrate as intode 2 | import numpy as np 3 | import matplotlib.pyplot as plt 4 | from matplotlib import cm 5 | import time 6 | import scipy.optimize as opt 7 | from mpl_toolkits.mplot3d import Axes3D 8 | import matplotlib_inline.backend_inline 9 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 10 | import pandas as pd 11 | 12 | #参数 13 | solvemethod='Radau' 14 | problem=4 15 | k=80000 16 | km=250000 17 | r=1025*9.8*np.pi 18 | rm=8890.7 19 | mv=2433 20 | mf=4866 21 | if(problem==3): 22 | ma=1028.876 23 | Ia=7001.914 24 | mu=683.4558 25 | muM=654.3383 26 | w=1.7152 27 | f=3640 28 | L=1690 29 | elif(problem==4): 30 | ma=1091.099 31 | Ia=7142.493 32 | mu=528.5018 33 | muM=1655.909 34 | w=1.9806 35 | f=1760 36 | L=2140 37 | elif(problem==5): 38 | ma=1091.099 39 | Ia=7142.493 40 | mu=528.5018 41 | muM=1655.909 42 | w=1.9806 43 | f=1760 44 | L=0 45 | prd=2*np.pi/w 46 | tmax=prd*40 47 | titv=0.2 48 | nu1=10000 49 | num1=1000 50 | g=9.8 51 | l=0.5 52 | 53 | #计算转动惯量 54 | R=1 55 | Hcone=0.8 56 | Hclnd=3 57 | M=mf 58 | LL=np.sqrt(R**2+Hcone**2) 59 | temp=np.pi*R*LL+2*np.pi*R*Hclnd 60 | mcone=np.pi*R*LL*M/temp 61 | mclnd=2*np.pi*R*Hclnd*M/temp 62 | If=mclnd*R*R/2+mclnd*Hclnd**2/3+mcone*R*R/4+mcone*Hcone*Hcone/6 63 | rr,h=0.5,0.5 64 | Iv0=mv*rr**2/4+mv*h**2/12 65 | 66 | #微分方程 67 | def equ(t,x,nu,nuM): 68 | xv=x[0] 69 | xf=x[1] 70 | tv=x[2] 71 | tf=x[3] 72 | vv=x[4] 73 | vf=x[5] 74 | wv=x[6] 75 | wf=x[7] 76 | dxv=vv 77 | dxf=vf 78 | dtv=wv 79 | dtf=wf 80 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 81 | Iv=Iv0+mv*xv**2 82 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 83 | m=mf+ma+mv*np.sin(tv+tf)**2 84 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 85 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 86 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 87 | 88 | #求解 89 | te=np.arange(start=0,stop=tmax,step=titv) 90 | try: 91 | x0=np.array([xres[i][-1] for i in range(8)]) 92 | except: 93 | x0=np.array([l-mv*g/k,0,0,0,0,0,0,0]) 94 | print(x0) 95 | sol=intode.solve_ivp(lambda t,x:equ(t,x,nu1,num1),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 96 | xres=sol.y 97 | tres=sol.t 98 | 99 | #输出结果 100 | data=pd.DataFrame(np.transpose(xres)) 101 | writer=pd.ExcelWriter('3-xres.xlsx') 102 | data.to_excel(writer,'page_1',float_format='%.5f') 103 | writer.save() 104 | writer.close() 105 | data=pd.DataFrame(np.transpose(tres)) 106 | writer=pd.ExcelWriter('3-t.xlsx') 107 | data.to_excel(writer,'page_1',float_format='%.5f') 108 | writer.save() 109 | writer.close() 110 | xvres=xres[0] 111 | xfres=xres[1] 112 | tvres=xres[2] 113 | tfres=xres[3] 114 | vvres=xres[4] 115 | vfres=xres[5] 116 | wvres=xres[6] 117 | wfres=xres[7] 118 | plt.rcParams['font.sans-serif'] = ['STSong'] 119 | plt.rcParams['axes.unicode_minus'] = False 120 | fig = plt.figure(figsize=(15, 8)) 121 | plt.suptitle(r'$\nu\in[0,100000],\nu_m\in[0,100000]$中最优解时浮子与振子稳定运动时间图') 122 | plt.subplots_adjust(wspace=0.25,hspace=0.25) 123 | ax1 = fig.add_subplot(2,2,1) 124 | ax1.set_ylim(-0.4,0.4) 125 | ha11,=ax1.plot(tres,xvres,color='b') 126 | ax1.set_ylabel('位移x(m)') 127 | ax1.set_title("振子位移-时间图") 128 | ax1.set_xlabel('时间t(s)') 129 | bx1 = ax1.twinx() 130 | bx1.set_ylim(-0.01,0.01) 131 | hb11,=bx1.plot(tres,wvres,color='g') 132 | bx1.set_ylabel(r'角位移$\theta(rad)$') 133 | ax1.legend([ha11,hb11,],['振子位移','振子角位移']) 134 | ax2 = fig.add_subplot(2,2,3) 135 | ax2.set_ylim(-2,2) 136 | ha2,=ax2.plot(tres,xfres,color='b') 137 | ax2.set_ylabel('位移x(m)') 138 | ax2.set_title("浮子位移-时间图") 139 | ax2.set_xlabel('时间t(s)') 140 | bx2 = ax2.twinx() 141 | bx2.set_ylim(-0.1,0.1) 142 | hb2,=bx2.plot(tres,wfres,color='g') 143 | bx2.set_ylabel(r'角位移$\theta(rad)$') 144 | ax2.legend([ha2,hb2],['浮子位移','浮子角位移']) 145 | ax3 = fig.add_subplot(2,2,2) 146 | ax3.set_ylim(-0.5,0.5) 147 | ha3,=ax3.plot(tres,vvres,color='b') 148 | ax3.set_ylabel('速度v(m/s)') 149 | ax3.set_title("振子速度-时间图") 150 | ax3.set_xlabel('时间t(s)') 151 | bx3 = ax3.twinx() 152 | bx3.set_ylim(-0.005,0.005) 153 | hb3,=bx3.plot(tres,wvres,color='g') 154 | bx3.set_ylabel(r'角速度$\omega(rad/s)$') 155 | ax3.legend([ha3,hb3],['振子速度','振子角速度']) 156 | ax4 = fig.add_subplot(2,2,4) 157 | ax4.set_ylim(-2,2) 158 | ha4,=ax4.plot(tres,vfres,color='b') 159 | ax4.set_ylabel('速度v(m/s)') 160 | ax4.set_title("浮子速度-时间图") 161 | ax4.set_xlabel('时间t(s)') 162 | bx4 = ax4.twinx() 163 | bx4.set_ylim(-0.1,0.1) 164 | hb4,=bx4.plot(tres,wfres,color='g') 165 | bx4.set_ylabel(r'角速度$\omega(rad/s)$') 166 | ax4.legend([ha4,hb4],['浮子速度','浮子角速度']) 167 | 168 | plt.show() -------------------------------------------------------------------------------- /support/optimize12.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | 14 | solvemethod='Radau' 15 | problem=2 16 | plt.rcParams['font.sans-serif'] = ['STSong'] 17 | plt.rcParams['axes.unicode_minus'] = False 18 | k=80000 19 | r=1025*9.8*np.pi 20 | mv=2433 21 | mf=4866 22 | if(problem==1): 23 | ma=1335.535 24 | mu=656.3616 25 | w=1.4005 26 | f=6250 27 | elif(problem==2): 28 | ma=1165.992 29 | mu=167.8395 30 | w=2.2143 31 | f=4890 32 | prd=2*np.pi/w 33 | tmax=prd*40 34 | titv=0.2 35 | nu1=10000 36 | n1=0.5 37 | 38 | try: 39 | x0=np.array([xres1[i][-1] for i in range(4)]) 40 | x1=np.array([xres2[i][-1] for i in range(4)]) 41 | except: 42 | x0=np.array([0,0,0,0]) 43 | x1=np.array([0,0,0,0]) 44 | 45 | te=np.arange(start=0,stop=tmax,step=titv) 46 | def equ1(t,x,nu): 47 | xv=x[0] 48 | xf=x[1] 49 | dxv=x[2] 50 | dxf=x[3] 51 | fxv=dxv 52 | fxf=dxf 53 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf))/mv 54 | m=mf+ma 55 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)-mu*dxf+f*np.cos(w*t)-r*xf)/m 56 | return np.array([fxv,fxf,fdxv,fdxf]) 57 | def fun1(t,x): 58 | return equ1(t,x,nu1) 59 | def equ2(t,x,nu,n): 60 | xv=x[0] 61 | xf=x[1] 62 | dxv=x[2] 63 | dxf=x[3] 64 | fxv=dxv 65 | fxf=dxf 66 | fdxv=(-k*xv+k*xf-nu*(dxv-dxf)*(np.abs(dxv-dxf))**n)/mv 67 | m=mf+ma 68 | fdxf=(-k*xf+k*xv+nu*(dxv-dxf)*(np.abs(dxv-dxf))**n-mu*dxf+f*np.cos(w*t)-r*xf)/m 69 | return np.array([fxv,fxf,fdxv,fdxf]) 70 | def fun2(t,x): 71 | return equ2(t,x,nu1,n1) 72 | 73 | def errequ2(nu,n): 74 | sol=intode.solve_ivp(lambda t,x:equ2(t,x,nu,n),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 75 | xres=sol.y 76 | dxv1res=xres[2] 77 | dxf1res=xres[3] 78 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 79 | p1average=Dint(p1,titv)/tmax 80 | print(nu,'&&',n,'->',p1average) 81 | return -p1average 82 | def calcP(nu,n,xres): 83 | dxv1res=xres[2] 84 | dxf1res=xres[3] 85 | p1=nu*(dxv1res-dxf1res)**2*np.abs(dxv1res-dxf1res)**n 86 | return Dint(p1,titv)/tmax 87 | 88 | aa=np.linspace(start=0,stop=100000,num=200) 89 | cc=np.linspace(start=0,stop=1,num=100) 90 | X,Y=np.meshgrid(aa,cc) 91 | dd=[[-errequ2(i,j) for j in cc] for i in aa] 92 | 93 | Z=np.array(dd) 94 | Z=np.transpose(Z) 95 | fig=plt.figure() 96 | ax = fig.add_subplot(111,projection='3d') 97 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 98 | plt.title('阻尼系数-幂次-功率') 99 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 100 | plt.ylabel(r'幂次$n$') 101 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 102 | 103 | cs=plt.contourf(X,Y,Z,50,extend='max') 104 | plt.title('阻尼系数-幂次-功率') 105 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 106 | plt.ylabel(r'幂次$n$') 107 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 108 | plt.contour(X,Y,Z>228.2,1,colors=['None','Black']) 109 | 110 | nun0=[40000,0.8] 111 | ptstore=np.array(nun0) 112 | def drawpt(x): 113 | global ptstore 114 | plt.scatter(x[0],x[1],color='b') 115 | plt.plot([x[0],ptstore[0]],[x[1],ptstore[1]],color='b') 116 | ptstore=x 117 | cs=plt.contourf(X,Y,Z,50,extend='max') 118 | 119 | plt.title('阻尼系数-幂次-功率') 120 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 121 | plt.ylabel(r'幂次$n$') 122 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 123 | 124 | res2=opt.minimize(lambda x:errequ2(x[0],x[1]),nun0,method='Nelder-Mead',bounds=[(0,100000),(0,1)],tol=0.00001,callback=drawpt) 125 | 126 | print(res2) 127 | print(-errequ2(res2.x[0],res2.x[1])) -------------------------------------------------------------------------------- /support/optimize34.py: -------------------------------------------------------------------------------- 1 | from simpson import * 2 | import scipy.integrate as intode 3 | import numpy as np 4 | import matplotlib.pyplot as plt 5 | from matplotlib import cm 6 | import time 7 | import scipy.optimize as opt 8 | from mpl_toolkits.mplot3d import Axes3D 9 | import matplotlib_inline.backend_inline 10 | matplotlib_inline.backend_inline.set_matplotlib_formats('svg') 11 | import pandas as pd 12 | 13 | #参数 14 | solvemethod='Radau' 15 | problem=4 16 | k=80000 17 | km=250000 18 | r=1025*9.8*np.pi 19 | rm=8890.7 20 | mv=2433 21 | mf=4866 22 | if(problem==3): 23 | ma=1028.876 24 | Ia=7001.914 25 | mu=683.4558 26 | muM=654.3383 27 | w=1.7152 28 | f=3640 29 | L=1690 30 | elif(problem==4): 31 | ma=1091.099 32 | Ia=7142.493 33 | mu=528.5018 34 | muM=1655.909 35 | w=1.9806 36 | f=1760 37 | L=2140 38 | elif(problem==5): 39 | ma=1091.099 40 | Ia=7142.493 41 | mu=528.5018 42 | muM=1655.909 43 | w=1.9806 44 | f=1760 45 | L=0 46 | prd=2*np.pi/w 47 | tmax=prd*40 48 | titv=0.2 49 | nu1=10000 50 | num1=1000 51 | g=9.8 52 | l=0.5 53 | 54 | #计算转动惯量 55 | R=1 56 | Hcone=0.8 57 | Hclnd=3 58 | M=mf 59 | LL=np.sqrt(R**2+Hcone**2) 60 | temp=np.pi*R*LL+2*np.pi*R*Hclnd 61 | mcone=np.pi*R*LL*M/temp 62 | mclnd=2*np.pi*R*Hclnd*M/temp 63 | If=mclnd*R*R/2+mclnd*Hclnd**2/3+mcone*R*R/4+mcone*Hcone*Hcone/6 64 | rr,h=0.5,0.5 65 | Iv0=mv*rr**2/4+mv*h**2/12 66 | 67 | #微分方程 68 | def equ(t,x,nu,nuM): 69 | xv=x[0] 70 | xf=x[1] 71 | tv=x[2] 72 | tf=x[3] 73 | vv=x[4] 74 | vf=x[5] 75 | wv=x[6] 76 | wf=x[7] 77 | dxv=vv 78 | dxf=vf 79 | dtv=wv 80 | dtf=wf 81 | dwf=(-rm*tf-muM*wf+nuM*wv+km*tv+L*np.cos(w*t))/(If+Ia) 82 | Iv=Iv0+mv*xv**2 83 | dwv=(-nuM*wv-km*tv+mv*g*xv*np.sin(tv+tf))/Iv-dwf 84 | m=mf+ma+mv*np.sin(tv+tf)**2 85 | dvf=(k*(xv-l+mv*g/k)*np.cos(tv+tf)+nu*vv*np.cos(tv+tf)-mu*vf+f*np.cos(w*t)-r*xf+np.sin(tv+tf)*(mv*(xv*dwv+2*vv*wv+xv*dwf+2*vv*wf)-mv*g*np.sin(tv+tf)))/m 86 | dvv=(-k*(xv-l)-nu*vv-mv*g*np.cos(tv+tf)-mv*(-xv*wv**2+dvf*np.cos(tv+tf)-xv*wf**2-2*xv*wf*wv))/mv 87 | return np.array([dxv,dxf,dtv,dtf,dvv,dvf,dwv,dwf]) 88 | 89 | #求解 90 | te=np.arange(start=0,stop=tmax,step=titv) 91 | try: 92 | x0=np.array([xres[i][-1] for i in range(8)]) 93 | except: 94 | x0=np.array([l-mv*g/k,0,0,0,0,0,0,0]) 95 | print(x0) 96 | 97 | #计算功率 98 | def calcP(nu,nuM,res): 99 | vv=res[4] 100 | wv=res[6] 101 | 102 | pv=nu*vv**2 103 | pw=nuM*wv**2 104 | p=pv+pw 105 | return p 106 | 107 | #误差函数 108 | def errequ(nu,num): 109 | sol=intode.solve_ivp(lambda t,x:equ(t,x,nu,num),(te[0],te[-1]),x0,method=solvemethod,t_eval=te) 110 | xres=sol.y 111 | p=calcP(nu,num,xres) 112 | paverage=Dint(p,titv)/tmax 113 | print(nu,'&&',num,'->',paverage) 114 | return -paverage 115 | 116 | #做初步图像 117 | aa=np.linspace(start=0,stop=100000,num=200) 118 | cc=np.linspace(start=0,stop=100000,num=100) 119 | X,Y=np.meshgrid(aa,cc) 120 | dd=[[-errequ(i,j) for j in cc] for i in aa] 121 | Z=np.array(dd) 122 | Z=np.transpose(Z) 123 | fig=plt.figure() 124 | ax = fig.add_subplot(111,projection='3d') 125 | ax.plot_surface(X,Y,Z,cmap=cm.coolwarm,linewidth=0, antialiased=False) 126 | plt.title('阻尼系数-转动阻尼系数-功率') 127 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 128 | plt.ylabel(r'转动阻尼系数$\mu_m$') 129 | ax.set_zlabel(r'功率$p(N\cdot m/s)$') 130 | cs=plt.contourf(X,Y,Z,50,extend='max') 131 | plt.title('阻尼系数-转动阻尼系数-功率') 132 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 133 | plt.ylabel(r'转动阻尼系数$\nu_m(N\cdot m)$') 134 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 135 | plt.contour(X,Y,Z>731.17,1,colors=['None','Black']) 136 | 137 | #优化 138 | nunum0=[10000,50000] 139 | ptstore=np.array(nunum0) 140 | def drawpt(x): 141 | global ptstore 142 | plt.scatter(x[0],x[1],color='b') 143 | plt.plot([x[0],ptstore[0]],[x[1],ptstore[1]],color='b') 144 | ptstore=x 145 | cs=plt.contourf(X,Y,Z,50,extend='max') 146 | plt.title('阻尼系数-转动阻尼系数-功率') 147 | plt.xlabel(r'阻尼系数$\nu(N\cdot s/m)$') 148 | plt.ylabel(r'转动阻尼系数$\nu_m(N\cdot m)$') 149 | plt.colorbar(cs,label=r'功率$p(N\cdot m/s)$') 150 | res=opt.minimize(lambda x:errequ(x[0],x[1]),nunum0,method='Nelder-Mead',bounds=[(0,100000),(0,100000)],tol=0.0001,callback=drawpt) 151 | print(res) 152 | print(-errequ(res.x[0],res.x[1])) -------------------------------------------------------------------------------- /support/simpson.py: -------------------------------------------------------------------------------- 1 | 2 | 3 | def Dint(arr,h): 4 | #复合辛普森积分 5 | n=len(arr) 6 | sum=0 7 | if (n%2==0): 8 | sum+=(arr[-1]+arr[-2])*h/2 9 | n-=1 10 | tsum=arr[0]+arr[n-1] 11 | for i in range(1,n-1): 12 | if(i%2): 13 | tsum+=4*arr[i] 14 | else: 15 | tsum+=2*arr[i] 16 | sum+=tsum*h/3 17 | return sum -------------------------------------------------------------------------------- /support/复振幅求解.nb: -------------------------------------------------------------------------------- 1 | (* Content-type: application/vnd.wolfram.mathematica *) 2 | 3 | (*** Wolfram Notebook File ***) 4 | (* http://www.wolfram.com/nb *) 5 | 6 | (* CreatedBy='Mathematica 12.3' *) 7 | 8 | (*CacheID: 234*) 9 | (* Internal cache information: 10 | NotebookFileLineBreakTest 11 | NotebookFileLineBreakTest 12 | NotebookDataPosition[ 158, 7] 13 | NotebookDataLength[ 12948, 359] 14 | NotebookOptionsPosition[ 11762, 332] 15 | NotebookOutlinePosition[ 12169, 349] 16 | CellTagsIndexPosition[ 12126, 346] 17 | WindowFrame->Normal*) 18 | 19 | (* Beginning of Notebook Content *) 20 | Notebook[{ 21 | 22 | Cell[CellGroupData[{ 23 | Cell[BoxData[ 24 | RowBox[{"s", "=", 25 | RowBox[{"Solve", "[", 26 | RowBox[{ 27 | RowBox[{"{", 28 | RowBox[{ 29 | RowBox[{ 30 | RowBox[{ 31 | RowBox[{"-", 32 | SuperscriptBox["w", "2"]}], " ", "mv", " ", "Av"}], " ", "==", " ", 33 | RowBox[{ 34 | RowBox[{ 35 | RowBox[{"-", "k"}], " ", "Av"}], " ", "+", 36 | RowBox[{"k", " ", "Af"}], "-", 37 | RowBox[{"v", 38 | RowBox[{"(", 39 | RowBox[{ 40 | RowBox[{ 41 | RowBox[{"-", "I"}], " ", "w", " ", "Av"}], "+", 42 | RowBox[{"I", " ", "w", " ", "Af"}]}], ")"}]}]}]}], ",", 43 | "\[IndentingNewLine]", 44 | RowBox[{ 45 | RowBox[{ 46 | RowBox[{"-", 47 | SuperscriptBox["w", "2"]}], 48 | RowBox[{"(", 49 | RowBox[{"mf", "+", "ma"}], ")"}], "Af"}], "==", 50 | RowBox[{ 51 | RowBox[{ 52 | RowBox[{"-", "k"}], " ", "Af"}], "+", 53 | RowBox[{"k", " ", "Av"}], "+", 54 | RowBox[{"v", 55 | RowBox[{"(", 56 | RowBox[{ 57 | RowBox[{ 58 | RowBox[{"-", "I"}], " ", "w", " ", "Av"}], "+", 59 | RowBox[{"I", " ", "w", " ", "Af"}]}], ")"}]}], "+", 60 | RowBox[{"I", " ", "u", " ", "w", " ", "Af"}], "-", 61 | RowBox[{"r", " ", "Af"}], "+", "f"}]}]}], "}"}], ",", 62 | RowBox[{"{", 63 | RowBox[{"Av", ",", "Af"}], "}"}]}], "]"}]}]], "Input", 64 | CellChangeTimes->{3.8724670429114943`*^9}, 65 | CellLabel->"In[1]:=",ExpressionUUID->"ea80b30c-f42b-4e7d-b308-03823a6cdbab"], 66 | 67 | Cell[BoxData[ 68 | RowBox[{"{", 69 | RowBox[{"{", 70 | RowBox[{ 71 | RowBox[{"Av", "\[Rule]", 72 | FractionBox[ 73 | RowBox[{"f", " ", 74 | RowBox[{"(", 75 | RowBox[{ 76 | RowBox[{"-", "k"}], "+", 77 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}]}], ")"}]}], 78 | RowBox[{ 79 | SuperscriptBox[ 80 | RowBox[{"(", 81 | RowBox[{ 82 | RowBox[{"-", "k"}], "+", 83 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}]}], ")"}], "2"], "-", 84 | RowBox[{ 85 | RowBox[{"(", 86 | RowBox[{"k", "+", "r", "-", 87 | RowBox[{"\[ImaginaryI]", " ", "u", " ", "w"}], "-", 88 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 89 | RowBox[{ 90 | RowBox[{"(", 91 | RowBox[{"ma", "+", "mf"}], ")"}], " ", 92 | SuperscriptBox["w", "2"]}]}], ")"}], " ", 93 | RowBox[{"(", 94 | RowBox[{"k", "-", 95 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 96 | RowBox[{"mv", " ", 97 | SuperscriptBox["w", "2"]}]}], ")"}]}]}]]}], ",", 98 | RowBox[{"Af", "\[Rule]", 99 | RowBox[{"-", 100 | RowBox[{"(", 101 | RowBox[{ 102 | RowBox[{"(", 103 | RowBox[{"f", " ", 104 | RowBox[{"(", 105 | RowBox[{"k", "-", 106 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 107 | RowBox[{"mv", " ", 108 | SuperscriptBox["w", "2"]}]}], ")"}]}], ")"}], "/", 109 | RowBox[{"(", 110 | RowBox[{ 111 | RowBox[{ 112 | RowBox[{"-", "k"}], " ", "r"}], "+", 113 | RowBox[{"\[ImaginaryI]", " ", "k", " ", "u", " ", "w"}], "+", 114 | RowBox[{"\[ImaginaryI]", " ", "r", " ", "v", " ", "w"}], "+", 115 | RowBox[{"k", " ", "ma", " ", 116 | SuperscriptBox["w", "2"]}], "+", 117 | RowBox[{"k", " ", "mf", " ", 118 | SuperscriptBox["w", "2"]}], "+", 119 | RowBox[{"k", " ", "mv", " ", 120 | SuperscriptBox["w", "2"]}], "+", 121 | RowBox[{"mv", " ", "r", " ", 122 | SuperscriptBox["w", "2"]}], "+", 123 | RowBox[{"u", " ", "v", " ", 124 | SuperscriptBox["w", "2"]}], "-", 125 | RowBox[{"\[ImaginaryI]", " ", "mv", " ", "u", " ", 126 | SuperscriptBox["w", "3"]}], "-", 127 | RowBox[{"\[ImaginaryI]", " ", "ma", " ", "v", " ", 128 | SuperscriptBox["w", "3"]}], "-", 129 | RowBox[{"\[ImaginaryI]", " ", "mf", " ", "v", " ", 130 | SuperscriptBox["w", "3"]}], "-", 131 | RowBox[{"\[ImaginaryI]", " ", "mv", " ", "v", " ", 132 | SuperscriptBox["w", "3"]}], "-", 133 | RowBox[{"ma", " ", "mv", " ", 134 | SuperscriptBox["w", "4"]}], "-", 135 | RowBox[{"mf", " ", "mv", " ", 136 | SuperscriptBox["w", "4"]}]}], ")"}]}], ")"}]}]}]}], "}"}], 137 | "}"}]], "Output", 138 | CellChangeTimes->{ 139 | 3.87246701561924*^9, 3.872467071485735*^9, 3.872467232407246*^9, 140 | 3.872467376173987*^9, {3.872467434491501*^9, 3.87246746279538*^9}, 141 | 3.8724677182008038`*^9, 3.8724678600876703`*^9}, 142 | CellLabel->"Out[1]=",ExpressionUUID->"028f9511-ba18-4c38-adbd-a9e1c0a8b0d3"] 143 | }, Open ]], 144 | 145 | Cell[BoxData[ 146 | RowBox[{"\[IndentingNewLine]", 147 | RowBox[{ 148 | RowBox[{ 149 | RowBox[{"av", "=", 150 | FractionBox[ 151 | RowBox[{"f", " ", 152 | RowBox[{"(", 153 | RowBox[{ 154 | RowBox[{"-", "k"}], "+", 155 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}]}], ")"}]}], 156 | RowBox[{ 157 | SuperscriptBox[ 158 | RowBox[{"(", 159 | RowBox[{ 160 | RowBox[{"-", "k"}], "+", 161 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}]}], ")"}], "2"], "-", 162 | RowBox[{ 163 | RowBox[{"(", 164 | RowBox[{"k", "+", "r", "-", 165 | RowBox[{"\[ImaginaryI]", " ", "u", " ", "w"}], "-", 166 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 167 | RowBox[{ 168 | RowBox[{"(", 169 | RowBox[{"ma", "+", "mf"}], ")"}], " ", 170 | SuperscriptBox["w", "2"]}]}], ")"}], " ", 171 | RowBox[{"(", 172 | RowBox[{"k", "-", 173 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 174 | RowBox[{"mv", " ", 175 | SuperscriptBox["w", "2"]}]}], ")"}]}]}]]}], ";"}], 176 | "\[IndentingNewLine]", 177 | RowBox[{ 178 | RowBox[{"af", "=", 179 | RowBox[{"-", 180 | RowBox[{"(", 181 | RowBox[{ 182 | RowBox[{"(", 183 | RowBox[{"f", " ", 184 | RowBox[{"(", 185 | RowBox[{"k", "-", 186 | RowBox[{"\[ImaginaryI]", " ", "v", " ", "w"}], "-", 187 | RowBox[{"mv", " ", 188 | SuperscriptBox["w", "2"]}]}], ")"}]}], ")"}], "/", 189 | RowBox[{"(", 190 | RowBox[{ 191 | RowBox[{ 192 | RowBox[{"-", "k"}], " ", "r"}], "+", 193 | RowBox[{"\[ImaginaryI]", " ", "k", " ", "u", " ", "w"}], "+", 194 | RowBox[{"\[ImaginaryI]", " ", "r", " ", "v", " ", "w"}], "+", 195 | RowBox[{"k", " ", "ma", " ", 196 | SuperscriptBox["w", "2"]}], "+", 197 | RowBox[{"k", " ", "mf", " ", 198 | SuperscriptBox["w", "2"]}], "+", 199 | RowBox[{"k", " ", "mv", " ", 200 | SuperscriptBox["w", "2"]}], "+", 201 | RowBox[{"mv", " ", "r", " ", 202 | SuperscriptBox["w", "2"]}], "+", 203 | RowBox[{"u", " ", "v", " ", 204 | SuperscriptBox["w", "2"]}], "-", 205 | RowBox[{"\[ImaginaryI]", " ", "mv", " ", "u", " ", 206 | SuperscriptBox["w", "3"]}], "-", 207 | RowBox[{"\[ImaginaryI]", " ", "ma", " ", "v", " ", 208 | SuperscriptBox["w", "3"]}], "-", 209 | RowBox[{"\[ImaginaryI]", " ", "mf", " ", "v", " ", 210 | SuperscriptBox["w", "3"]}], "-", 211 | RowBox[{"\[ImaginaryI]", " ", "mv", " ", "v", " ", 212 | SuperscriptBox["w", "3"]}], "-", 213 | RowBox[{"ma", " ", "mv", " ", 214 | SuperscriptBox["w", "4"]}], "-", 215 | RowBox[{"mf", " ", "mv", " ", 216 | SuperscriptBox["w", "4"]}]}], ")"}]}], ")"}]}]}], 217 | ";"}]}]}]], "Input", 218 | CellChangeTimes->{{3.872467698757574*^9, 3.8724677310466146`*^9}}, 219 | CellLabel->"In[2]:=",ExpressionUUID->"ce8da3fa-1574-4b17-b4de-605a015e360b"], 220 | 221 | Cell[BoxData[ 222 | RowBox[{"\[IndentingNewLine]", 223 | RowBox[{ 224 | RowBox[{ 225 | RowBox[{"mv", "=", "2433"}], ";"}], "\n", 226 | RowBox[{ 227 | RowBox[{"mf", "=", "4866"}], ";"}], "\[IndentingNewLine]", 228 | RowBox[{ 229 | RowBox[{"k", "=", "80000"}], ";"}], "\[IndentingNewLine]", 230 | RowBox[{ 231 | RowBox[{"g", "=", "9.8"}], ";"}], "\[IndentingNewLine]", 232 | RowBox[{ 233 | RowBox[{"r", "=", 234 | RowBox[{"1025", "*", "g", "*", "Pi"}]}], ";"}], "\[IndentingNewLine]", 235 | RowBox[{ 236 | RowBox[{"w", "=", "2.2143"}], ";"}], "\[IndentingNewLine]", 237 | RowBox[{ 238 | RowBox[{"ma", "=", "1165.992"}], ";"}], "\[IndentingNewLine]", 239 | RowBox[{ 240 | RowBox[{"\[Mu]", "=", 241 | RowBox[{"u", "=", "167.8395"}]}], ";"}], "\[IndentingNewLine]", 242 | RowBox[{ 243 | RowBox[{"f", "=", "4890"}], ";"}]}]}]], "Input", 244 | CellChangeTimes->{{3.872467774404738*^9, 3.87246777562635*^9}}, 245 | CellLabel->"In[4]:=",ExpressionUUID->"69e38821-7399-41db-badb-5d29cf87dbe0"], 246 | 247 | Cell[BoxData[ 248 | RowBox[{ 249 | RowBox[{"p", "=", 250 | RowBox[{"Integrate", "[", 251 | RowBox[{ 252 | RowBox[{"v", " ", 253 | FractionBox["1", 254 | RowBox[{"2", 255 | RowBox[{"Pi", "/", "w"}]}]], 256 | SuperscriptBox[ 257 | RowBox[{"(", 258 | RowBox[{ 259 | RowBox[{"D", "[", 260 | RowBox[{ 261 | RowBox[{ 262 | RowBox[{ 263 | RowBox[{"Re", "[", "af", "]"}], 264 | RowBox[{"Cos", "[", 265 | RowBox[{"w", " ", "t"}], "]"}]}], "+", 266 | RowBox[{ 267 | RowBox[{"Im", "[", "af", "]"}], 268 | RowBox[{"Sin", "[", 269 | RowBox[{"w", " ", "t"}], "]"}]}]}], ",", "t"}], "]"}], "-", 270 | RowBox[{"D", "[", 271 | RowBox[{ 272 | RowBox[{ 273 | RowBox[{ 274 | RowBox[{"Re", "[", "av", "]"}], 275 | RowBox[{"Cos", "[", 276 | RowBox[{"w", " ", "t"}], "]"}]}], "+", 277 | RowBox[{ 278 | RowBox[{"Im", "[", "av", "]"}], 279 | RowBox[{"Sin", "[", 280 | RowBox[{"w", " ", "t"}], "]"}]}]}], ",", "t"}], "]"}]}], ")"}], 281 | "2"]}], ",", 282 | RowBox[{"{", 283 | RowBox[{"t", ",", "0", ",", 284 | RowBox[{"2", " ", 285 | RowBox[{"Pi", "/", "w"}]}]}], "}"}]}], "]"}]}], ";"}]], "Input", 286 | CellChangeTimes->{{3.8724670452681627`*^9, 3.872467081864274*^9}, { 287 | 3.872467687182873*^9, 3.8724676964243937`*^9}, 3.872467796468988*^9}, 288 | CellLabel->"In[13]:=",ExpressionUUID->"4fd68c8a-56d8-4e99-80e7-8d0f33e10255"], 289 | 290 | Cell[BoxData[ 291 | RowBox[{ 292 | RowBox[{"p1", "=", 293 | RowBox[{"Together", "[", 294 | RowBox[{"ComplexExpand", "[", "p", "]"}], "]"}]}], ";"}]], "Input", 295 | CellChangeTimes->{{3.8724672761901493`*^9, 3.8724672867215157`*^9}, { 296 | 3.8724673327637997`*^9, 3.872467332969839*^9}, 3.872467838450027*^9}, 297 | CellLabel->"In[14]:=",ExpressionUUID->"62875253-bcce-447a-b738-9aaa32976350"], 298 | 299 | Cell[CellGroupData[{ 300 | 301 | Cell[BoxData[ 302 | RowBox[{"Solve", "[", 303 | RowBox[{ 304 | RowBox[{ 305 | RowBox[{ 306 | RowBox[{"D", "[", 307 | RowBox[{"p1", ",", "v"}], "]"}], "==", "0"}], "&&", 308 | RowBox[{ 309 | RowBox[{"D", "[", 310 | RowBox[{"p1", ",", 311 | RowBox[{"{", 312 | RowBox[{"v", ",", "2"}], "}"}]}], "]"}], "<", "0"}], "&&", 313 | RowBox[{"v", ">", "0"}]}], ",", "v", ",", "Reals"}], "]"}]], "Input", 314 | CellChangeTimes->{{3.872467815374929*^9, 3.872467820718894*^9}}, 315 | CellLabel->"In[15]:=",ExpressionUUID->"c1defaa2-3fa6-4b2f-9ad2-ab3cd3ccd096"], 316 | 317 | Cell[BoxData[ 318 | RowBox[{"{", 319 | RowBox[{"{", 320 | RowBox[{"v", "\[Rule]", "37193.81188797485`"}], "}"}], "}"}]], "Output", 321 | CellChangeTimes->{ 322 | 3.872467291510591*^9, 3.872467342162109*^9, 3.8724675122481947`*^9, 323 | 3.8724676031931887`*^9, {3.8724678037153378`*^9, 3.8724678216667852`*^9}, 324 | 3.8724678758537693`*^9}, 325 | CellLabel->"Out[15]=",ExpressionUUID->"9445aaa1-4402-449c-9e87-718891ae3cd6"] 326 | }, Open ]], 327 | 328 | Cell[BoxData[""], "Input", 329 | CellChangeTimes->{{3.872467076683269*^9, 330 | 3.8724670830520687`*^9}},ExpressionUUID->"7235dbba-78cb-4761-bff2-\ 331 | e016cc439ca1"] 332 | }, 333 | WindowSize->{808, 816}, 334 | WindowMargins->{{92, Automatic}, {16, Automatic}}, 335 | FrontEndVersion->"12.3 for Mac OS X x86 (64-bit) \ 336 | (2021\:5e746\:670819\:65e5)", 337 | StyleDefinitions->"Default.nb", 338 | ExpressionUUID->"d2ca90ad-7ac7-4db2-91e9-2e663637968c" 339 | ] 340 | (* End of Notebook Content *) 341 | 342 | (* Internal cache information *) 343 | (*CellTagsOutline 344 | CellTagsIndex->{} 345 | *) 346 | (*CellTagsIndex 347 | CellTagsIndex->{} 348 | *) 349 | (*NotebookFileOutline 350 | Notebook[{ 351 | Cell[CellGroupData[{ 352 | Cell[580, 22, 1426, 42, 84, "Input",ExpressionUUID->"ea80b30c-f42b-4e7d-b308-03823a6cdbab"], 353 | Cell[2009, 66, 2982, 75, 110, "Output",ExpressionUUID->"028f9511-ba18-4c38-adbd-a9e1c0a8b0d3"] 354 | }, Open ]], 355 | Cell[5006, 144, 2877, 74, 170, "Input",ExpressionUUID->"ce8da3fa-1574-4b17-b4de-605a015e360b"], 356 | Cell[7886, 220, 928, 24, 235, "Input",ExpressionUUID->"69e38821-7399-41db-badb-5d29cf87dbe0"], 357 | Cell[8817, 246, 1449, 41, 155, "Input",ExpressionUUID->"4fd68c8a-56d8-4e99-80e7-8d0f33e10255"], 358 | Cell[10269, 289, 369, 7, 44, "Input",ExpressionUUID->"62875253-bcce-447a-b738-9aaa32976350"], 359 | Cell[CellGroupData[{ 360 | Cell[10663, 300, 527, 14, 44, "Input",ExpressionUUID->"c1defaa2-3fa6-4b2f-9ad2-ab3cd3ccd096"], 361 | Cell[11193, 316, 396, 8, 34, "Output",ExpressionUUID->"9445aaa1-4402-449c-9e87-718891ae3cd6"] 362 | }, Open ]], 363 | Cell[11604, 327, 154, 3, 30, "Input",ExpressionUUID->"7235dbba-78cb-4761-bff2-e016cc439ca1"] 364 | } 365 | ] 366 | *) 367 | 368 | --------------------------------------------------------------------------------