常微分方程求解器ODE solver

本文探讨了常微分方程的初值问题(IVP),介绍了Euler显式格式、隐式Euler法、预报矫正法以及4阶龙格-库塔方法(RK4)等求解策略。通过实例展示了不同方法的解题效果,并讨论了常微分方程与最优化问题的转化,包括变分法的应用。此外,还提及了利用神经网络解决此类问题的可能性。
摘要由CSDN通过智能技术生成

IVP问题

对于常微分方程的初值问题
{ d y d t = f ( t , y ) , t ∈ [ a , b ] y ( a ) = y 0 (1) \left\{ \begin{array}{l} \frac{ {dy}}{ {dt}} = f(t,y),t \in \left[ {a,b} \right]\\ y\left( a \right) = {y_0} \end{array} \right.\tag{1} { dtdy=f(t,y),t[a,b]y(a)=y0(1)
有以下解的存在性、唯一性定理:

假设 f ( t , y ) f(t,y) f(t,y)定义在集合 [ a , b ] × [ α , β ] [a,b]\times[\alpha,\beta] [a,b]×[α,β]并且初值 α < y 0 < β \alpha<y_0<\beta α<y0<β,函数对于变量 y y y是Lipschitz连续,则在 a a a b b b之间存在 c c c,使得初值问题
{ d y d t = f ( t , y ) , t ∈ [ a , b ] y ( a ) = y 0 t ∈ [ a , c ] (2) \left\{ \begin{array}{l} \frac{ {dy}}{ {dt}} = f(t,y),t \in \left[ {a,b} \right]\\ y\left( a \right) = {y_0}\\ t\in[a,c] \end{array} \right.\tag{2} dtdy=f(t,y),t[a,b]y(a)=y0t[a,c](2)
有唯一解 y ( t ) y(t) y(t)。而且,如果 f f f [ a , b ] × [ − ∞ , + ∞ ] [a,b]\times[-\infty,+\infty] [a,b]×[,+]上是Lipschitz连续,则其在 [ a , b ] [a,b] [a,b]上存在唯一解。

定义一个ODEsolver类来使用各种方法求解常微分方程,使用待求解的函数和初始值来初始化该类:

class ODEsolver:
    def __init__(self,fun,t0,y0):
        self.fun=fun
        self.t0=t0
        self.y0=y0

Euler显式格式

Euler方法为:
{ w 0 = y 0 w i + 1 = w i + h f ( t i , w i ) (2) \left\{ \begin{array}{l} {w_0} = {y_0}\\ {w_{i + 1}} = {w_i} + hf\left( { {t_i},{w_i}} \right) \end{array} \right.\tag{2} { w0=y0wi+1=wi+hf(ti,wi)(2)
代码为:

    def eulersolver(self,tend,step=None):
        if step is None:
            step=(tend-self.t0)/1e3
        from ArrayTable import ArrayTable
        result=ArrayTable(2,0)
        result.setTableHeader(["$t$","$y(t)$"])
        result.setTableUnit(["/","/"])
        result.append([self.t0,self.y0])
        t=self.t0
        while t<tend:
            ynext=result.table[1].data[-1]+self.fun(t,result.table[1].data[-1])*step
            result.append([t+step,ynext])
            t+=step
        return result

隐式Euler法

隐式Euler法的原理为:
{ w 0 = y 0 w i + 1 = w i + h f ( t

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值