Dec-11-2018, 03:26 PM
(This post was last modified: Dec-11-2018, 03:26 PM by pianistseb.)
This code solves a differential equation by the method of 4nd Runge-Kutta. It works fine, but I want to save the diagram for each loop with high resolution. What can I do?
from sympy.solvers import solve
from sympy import Symbol
from sympy import solve, Poly, Eq, Function, exp
from sympy.abc import x, y, z, a, b
import matplotlib.pyplot as plt
import numpy as np
import math as mt
def coef0(k0,c,N):
return k0**2*c**2*N**2
def coef1(k0,q,a):
return -(k0**2+q**2+0.25*a**2)*c**2
def coef2(k0):
return 1
def sols(a0,a1,a2):
omg2=Symbol('omg2')
c=solve(Poly(a2*omg2**2+a1*omg2+a0),omg2)
return c
def co1(a,k0,omg2,N,c):
c=a
return c
def co2(a,k0,omg2,N,c):
c=-(omg2**2-k0**2*c**2*omg2+k0**2*c**2*N**2)/(c**2*omg2)
return c
def deriv(t,y,c1,c2): # Αυτή εδώ
xi_dev=y[1]
psi_dev=c1*y[1]+c2*y[0]
return xi_dev,psi_dev
loop=(1,2,3)
for j in loop:
a=20.42
k0=2
c=2
N=10
q=j*np.pi
print('q=',q)
cof0=coef0(k0,c,N)
cof1=coef1(k0,q,a)
cof2=coef2(k0)
omg2=sols(cof0,cof1,cof2)[1]
print('omg2=',omg2)
c1=co1(a,k0,omg2,N,c)
c2=co2(a,k0,omg2,N,c)
tmin=0
tmax=5
h=0.05
t=np.arange(tmin,tmax,h)
y=np.zeros((2,len(t)), dtype=float)
k1=np.zeros((2,len(t)), dtype=float)
k2=np.zeros((2,len(t)), dtype=float)
k3=np.zeros((2,len(t)), dtype=float)
k4=np.zeros((2,len(t)), dtype=float)
y[0,0]=0.1
y[1,0]=0.2
plt.figure(j)
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
for i in range(len(t)):
if i==len(t)-1: # Αν δεν το κάνω αυτό υπάρχει πρόβλημα με τις διαστάσεις
break
k1[:,i]=deriv(t[i],y[:,i],c1,c2)
k2[:,i]=deriv(t[i]+0.5*h,y[:,i]+k1[:,i]*0.5*h,c1,c2)
k3[:,i]=deriv(t[i]+0.5*h,y[:,i]+k2[:,i]*0.5*h,c1,c2)
k4[:,i]=deriv(t[i]+h,y[:,i]+k3[:,i]*h,c1,c2)
y[0,i+1]=y[0,i]+1/6*(k1[0,i]+2*k2[0,i]+2*k3[0,i]+k4[0,i])*h
y[1,i+1]=y[1,i]+1/6*(k1[1,i]+2*k2[1,i]+2*k3[1,i]+k4[1,i])*h
col1=(1,0,0)
plt.scatter(t[i], y[0,i], s=7, c=col1, marker='*')
plt.xlabel(r'$x$',fontsize=16)
plt.ylabel(r'$\log\xi_{x}$',fontsize=16)
plt.title(r"Dependence of $\log\xi_{x}$ from $x$",fontsize=16, color='Black')
plt.yscale('log')
plt.savefig('x_dependence')
plt.show()I am asking sorry because the code is very large.
