使用scipy

时间:2018-11-06 12:06:31

标签: python matplotlib scipy

您好,我想解决以下第一个ODE:

dt / dr = +-cos(t)^ 2 / cos(r)^ 2

我知道解决方案是:t(r)= t(r)= arctan(tan(r)+ _ C1),其中: pi / 2

我想知道如何改善下面的代码,使我的解决方案类似于图像中t轴趋于+无穷大的曲线:

desired solution for one C value

我的代码是:

import numpy as np 
import matplotlib.pyplot as plt 
from scipy.integrate import odeint 

    """
    Equations to be solved: 


       boundary conditions: 

        -pi/2 << t << pi/2 
            0 <= r <= pi/2 


    Equation:

        dt/dr = +- cos^2(t)/cos^2(r)

    Solution : 

        t(r) = arctan(tan(r) +_C1)


"""
def dt_dr(t,r):

    return (cos(t)**2)/(cos(r)**2)

rs = np.linspace(0,pi/2,1000)
t0 = 0.0 #the initial condition 
ts = odeint(dt_dr,t0,rs)
ts = np.array(rs).flatten()

plt.rcParams.update({'font.size': 14}) 
plt.xlabel("r")
plt.ylabel("t")
plt.plot(rs,ts);

和我当前的图形输出是:

current_solution

2 个答案:

答案 0 :(得分:0)

不确定我是否理解您的问题,但是,似乎两个图中的解决方案相同,但绘制方式不同。在“对于一个C值的理想解”图中,y轴与x轴相比被拉伸。在您的“当前解决方案”中,它们是相等的。

答案 1 :(得分:0)

问题中的两个图是相同的,但是它们都有不同的限制。要更改限制,您需要执行TableModelplt.xlim()。将它们设置为与期望的结果相同将为您提供相同的结果。

期望结果有一个附加功能,因为y轴与x轴的交点为0,而不是该轴的左手边(默认值)。您可以通过移动左脊椎来更改此设置:

plt.ylim()

哪个给:

enter image description here