精华内容
下载资源
问答
  • python求解偏微分方程

    2020-04-23 19:33:53
    python求解偏微分方程,画图,容易修改。
  • 非稳态的偏微分方程组是一个比较难解决的问题,也是在热质交换等方面的常常遇到的问题,因此需要一套程序来解决非稳态偏微分方程组的数值解。
  • 神经网络求解二阶微分方程(代码)

    千次阅读 2020-11-29 20:24:27
    相关的理论推导请参考: 神经网络求解二阶微分方程. 以下是程序分享 import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf import matplotlib.pyplot as plt import numpy as np import ...

    相关的理论推导请参考: 神经网络求解二阶常微分方程.
    在这里展示我使用Tensorflow设计的,求解二阶常微分方程的程序结果。二阶常微分方程式由以下方程给出:
    在这里插入图片描述

    二阶微分方程的初始值:
    在这里插入图片描述

    该微分方程的解析解:
    在这里插入图片描述

    使用设计的程序,仿真出的结果如图所示:
    在这里插入图片描述
    其中,解析解和神经网络解之间的差值用下图可以看出:
    在这里插入图片描述
    可以看到,这个拟合结果还是非常不错的,误差数量级控制在10^-4以下。

    以下是程序分享

    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    import tensorflow as tf
    #若使用tf V2.0以上版本,将上面的那一行注释掉,改为这两行
    #import tensorflow.compat.v1 as tf
    #tf.compat.v1.disable_eager_execution()
    
    import matplotlib.pyplot as plt
    import numpy as np
    import math
    x_train = np.linspace(0, 2, 400)#生成[0,2]区间100个点
    y_trail = np.exp(-0.2*x_train)*np.sin(x_train)#已知解析解用于比较
    x_t = np.zeros((len(x_train), 1))
    for i in range(len(x_train)):
        x_t[i] = x_train[i]
    x1 = tf.placeholder("float", [None, 1])#一次传入100个点[100,1]
    W = tf.Variable(tf.zeros([1, 10]))
    b = tf.Variable(tf.zeros([10]))
    y1 = tf.nn.sigmoid(tf.matmul(x1, W)+b)#sigmoid激活函数y1的形状[100,10]
    W1 = tf.Variable(tf.zeros([10, 1]))
    b1 = tf.Variable(tf.zeros([1]))
    y = tf.matmul(y1, W1)+b1#网络的输出[100,1]
    lq = tf.exp(-0.2*x1)*tf.cos(x1)
    
    dif1 = tf.matmul(tf.multiply(y1*(1-y1),W),W1)#dy/dx,dif形状[100,1],即对应点的导数值
    dif2 = tf.matmul(tf.multiply((y1*(1-y1)*(1-y1)-y1*y1*(1-y1))*W, W),W1)#dy/dx,dif形状[100,1],即对应点的导数值
    t_loss = (dif2+0.2*dif1+y+0.2*lq)**2#常微分方程F的平方
    # loss = tf.reduce_mean(t_loss)+(y[0]-0)**2+(y[199]-math.sin(1)*math.exp(-0.2))**2#每点F平方求和后取平均再加上边界条件
    loss = tf.reduce_mean(t_loss)+(y[0]-0)**2+(dif1[0]-1)**2
    train_step = tf.train.AdamOptimizer(0.0001).minimize(loss)#Adam优化器训练网络参数
    init = tf.global_variables_initializer()
    with tf.Session() as sess:
        sess.run(init)
        for i in range(50000):#训练50000次
            sess.run(train_step,feed_dict={x1: x_t})
            if i%50 == 0:
                total_loss = sess.run(loss,feed_dict={x1: x_t})
                print("loss={}".format(total_loss))
                print(sess.run(y[0], feed_dict={x1: x_t}))
        # saver = tf.train.Saver(max_to_keep=1)#保存模型,训练一次后可以将训练过程注释掉
        # saver.save(sess,'ckpt/nn.ckpt',global_step=50000)
        # saver = tf.train.Saver(max_to_keep=1)
        # model_file="ckpt/nn.ckpt-50000"
        # saver.restore(sess, model_file)
        output = sess.run(y,feed_dict={x1:x_t})
        output1 = sess.run(t_loss,feed_dict={x1:x_t})
        y_output = x_train.copy()
        y_output1 = x_train.copy()
        for i in range(len(x_train)):
            y_output[i] = output[i]
            y_output1[i] = output1[i]
        fig = plt.figure("预测曲线与实际曲线")
        L1, = plt.plot(x_train,y_trail, c = 'b')
        L2, = plt.plot(x_train,y_output, c = 'g')
        plt.legend([L1,L2],["analytic solution","network solution"], loc='upper right')
        plt.title('Comparison of results')
        fig2 = plt.figure("y_-y")#画实际值与预测值得偏差
        plt.title('y_-y')
        plt.plot(x_train,y_trail-y_output)
        fig3 = plt.figure("loss")#画出每一点对Loss的贡献
        plt.title('loss')
        plt.plot(x_train,y_output1+(y_output[0]-1)**2)
        plt.show()
    

    最后说明,本程序参考了以下博主提供的代码,在其基础上开发了二阶常微分求解的方法。在此对其表示感谢
    Tensorflow一个很简单的神经网络求解常微分及偏微分方程.

    展开全文
  • >利用Matlab求解二阶偏微分方程的一般有以下步骤    → 题目定义:由方程(3.4.33)和(3.4.35)可以看出,参量 是二阶偏微 分方程的主要参量,只要这几个参量确定,就可以定下偏微分方程的结构。此外要做的事是确定偏...
    >利用Matlab求解二阶偏微分方程的一般有以下步骤
        → 题目定义:由方程(3.4.33)和(3.4.35)可以看出,参量 是二阶偏微 分方程的主要参量,只要这几个参量确定,就可以定下偏微分方程的结构。此外要做的事是确定偏微分 方程的求解区域,即边界条件。在PDE ToolBox中有许多类似circleg.m的m文件定义了不同的边界形状。 使用前可以借助help命令查看,或参考其它资料。
        →求解域的网格化:通常采用命令initmesh进行初始网格化,还可以采用命 令refinemesh进行网格的细化和修整。这些命令的用法同样可以使用help命令,如[p,e,t]=initmesh(g) ,这里的参量p、e、t提供给下面的问题求解时使用。
        → 问题的求解:在PDE工具箱中有许多求解我们在上面提到的不同类型 的二阶偏微分方程的指令,主要有:
        ◆assempde    调用格式为:u=assempde(b,p,e,t,c,a,f)
    该命令用来求解椭圆型偏微分方程(3.4.31),求解的边界条件由函数b确定,网格类型由p、e和t确 定,c、a、f是椭圆型偏微分方程(3.4.31)
        ◆hyperbolic  调用格式为:u1=hyperbolic (u0,ut0,tlist,b,p,e,t,c,a,f,d)
    该命令用来求解双曲型偏微分方程(3.4.35)。
        ◆ parabolic 调用格式为:u1=parabolic (u0,tlist,b,p,e,t,c,a,f,d)
    该命令用来求解抛物线型偏微分方程(3.4.33)。
        ◆pdeeig   调用格式为:[v,l]= pdeeig(b,p,e,t,c,a,d,r)
       该命令用来求解特征值型偏微分方程(3.4.37)。
        ◆pdenonlin 调用格式为:[u,res]= pdenonlin(b,p,e,t,c,a,f)
       该命令使用具有阻尼的Newton迭代法,在由参量p、e、t确定的网格上求解非线性椭 圆型偏微分方程(3.4.31)。
      ◆poisolv 该命令在一个矩形网格上求解Poisson方程。    

    →结果处理:如Matlab的主要特色一样,在PDE工具箱中提供了丰富的图形显 示,因此用户不但可以对产生的网格进行图形显示和处理,对求解的数据也可以选择多种的图形显示和 处理方法,甚至包括对计算结果的动画显示。用户可以参考相关资料来使用。
    展开全文
  • 神经网络求解二阶微分方程

    千次阅读 热门讨论 2020-11-20 15:10:41
    需要让我使用深度神经网络求解偏微分方程。在相关调研过程中,CSDN上作者Trytobenice分享过相关的程序源码。基于相关程序源码,我将他的一阶常微分方程求解扩充到二阶常微分方程求解。并且按照此方法可以求解高阶常...

    神经网络求解二阶常微分方程

    最近课题组老师给出一篇文献,文件原文如链接一所示。需要让我使用深度神经网络求解偏微分方程。在相关调研过程中,CSDN上作者Trytobenice分享过相关的程序源码。基于相关程序源码,我将他的一阶常微分方程求解扩充到二阶常微分方程求解。并且按照此方法可以求解高阶常微分方程。

    理论分析

    对于任意一个微分方程,我们都可以用这个方程表示出
    在这里插入图片描述
    求解目的就是找出这样的一个方程:ψ(x),能够满足以上的G()函数。
    对于计算机求解,第一步要将其离散化处理:
    在这里插入图片描述
    人工神经网络若要求解该方程,那就设方程ψ(x)函数如下形式:
    在这里插入图片描述
    将预设的ψ(x)带入原方程中,只需要让G()函数在定义范围内达到最小,那就求解出这个方程了。二次方项是为了将负数对结果的影响消除。
    在这里插入图片描述
    下面再来分析ψ(x)的内容:
    在讲解这个解函数之前,需要给出一个补充知识。要求解出常微分方程,仅仅给出常微分方程表达式是不够的,还要给出常微分方程的初始条件和边界条件。这样才能保证解函数的唯一性。

    ψ(x)函数中包含两项。第一项是A(x),这一项是为了满足初始条件或者边界条件。第二项F{x,N(x,p)},这一项是神经网络满足偏微分方程的部分,不考虑边界条件。【注:为什么F()项能够不考虑边界条件,文中例子会给出介绍】

    继续看F{x,N(x,p)},这一项中包含N(x,p)。这个N()函数就是神经网络函数表达式形式。x表示输入数据,p表示神经网络中的参数。通过BP网络优化神经网络中的参数p,使神经网络能够达到最适,就能得到神经网络的解函数ψ(x)。

    设出这个解函数之后,我们下一步要根据解函数表达出微分方程。微分方程中至少包含一个微分项,可能是一阶,也可能是二阶;可能是常微分,也可能是偏微分。论文中给出神经网络N(x,p)输出对输入x的微分公式。公式形式如下:在这里插入图片描述
    式中k表示k阶导数,j表示对输入数据 xj(j是下角标) 的偏导。本文仅仅探讨常微分形式。

    举例分析

    这里给出一个一阶常微分方程表达式,用这个方程分析如何使用神经网络求解。方程入下:
    在这里插入图片描述
    并且给出边界条件,在这里插入图片描述
    这个方程有很明确的解析解,解析解如下所示:
    在这里插入图片描述
    对于神经网络求解,我们可以设神经网络解ψ(x)形式为:
    在这里插入图片描述
    在这里,满足边界条件的A(x)直接为1。不需要考虑边界条件的项F{x,N(x,p)}设为x*N(x,p),那么在x=0的情况下,解第二项直接为0,仅仅保留A(x),这样就能解释前部分的【注】。

    方法提升

    以上分析全部针对论文1的内容,论文1出版年份为1998年,论文2于2019年提出了更进一步的方法,下面我们进一步分析论文2的内容:

    论文2设计的神经网络与论文1,解析解设计过程中,直接设神经网络输出的结果为
    在这里插入图片描述
    在这里不考虑边界值,边界值在损失函数上体现。损失函数第一项如论文1相同,第二项体现边界值。损失函数通过以下函数给出:在这里插入图片描述
    论文2设计的神经网络结构非常简单,中间只有一个隐藏层,隐藏层中只有10个神经元。

    在这里插入图片描述

    代码结果

    在这里展示我使用Tensorflow设计的,求解二阶常微分方程的程序结果。二阶常微分方程式由以下方程给出:
    在这里插入图片描述

    二阶微分方程的初始值:
    在这里插入图片描述

    该微分方程的解析解:
    在这里插入图片描述

    使用设计的程序,仿真出的结果如图所示:
    在这里插入图片描述
    其中,解析解和神经网络解之间的差值用下图可以看出:
    在这里插入图片描述
    可以看到,这个拟合结果还是非常不错的,误差数量级控制在10^-4以下。

    有时间会在github上开源代码,到时候下载别忘了给我点一个star。

    论文1: Artificial neural networks for solving ordinary and partial differential equations
    论文2: Solving differential equations with neural networks: Applications to the calculation of cosmological phase transitions.

    展开全文
  • TMU_BME_2013 Topic: 如何使用 MATLAB 求 解常微分方程组 a.What ? 微分方程 指描述未知函数的导数与自变 量之间的关系的方程未知函数是一元函 数的微分方程称作 常微分方程 未知函数 是多元函数的微分方程称作 ...
  • 文章目录(1)偏微分方程的类型(二阶)(2)抛物线型1.显式法2.Crank-Nicholson隐式算法 (3)双曲线型(4)椭圆型 (1)偏微分方程的类型(二阶) a∂2u∂x2+b∂2u∂y∂x+c∂2u∂x2+d∂u∂x+e∂u∂y+fu+g=0a\frac{\partial^2u}{\...

    (1)偏微分方程的类型(二阶)

    a ∂ 2 u ∂ x 2 + b ∂ 2 u ∂ y ∂ x + c ∂ 2 u ∂ x 2 + d ∂ u ∂ x + e ∂ u ∂ y + f u + g = 0 a\frac{\partial^2u}{\partial x^2}+b\frac{\partial^2u}{\partial y\partial x}+c\frac{\partial^2u}{\partial x^2}+d\frac{\partial u}{\partial x}+e\frac{\partial u}{\partial y}+fu+g=0 ax22u+byx2u+cx22u+dxu+eyu+fu+g=0

    • b 2 − 4 a c < 0 b^2-4ac<0 b24ac<0 椭圆
    • b 2 − 4 a c = 0 b^2-4ac=0 b24ac=0 抛物线
    • b 2 − 4 a c > 0 b^2-4ac>0 b24ac>0 双曲线

    (2)抛物线型

    1.显式法

    • 求解思想:通过差分的方法一排一排向上推。
    • 做划分并代入方程 u i , j + 1 − u i , j k = u i + 1 , j − 2 u i , j + u i − 1 , j h 2    ( Δ x = h , Δ t = k ) \frac{u_{i,j+1}-u_{i,j}}{k}=\frac{u_{i+1,j}-2u_{i,j}+u_{i-1,j}}{h^2}~~(\Delta x=h,\Delta t=k) kui,j+1ui,j=h2ui+1,j2ui,j+ui1,j  (Δx=h,Δt=k)
    • 通过化简得到 u i , j + 1 = r u i − 1 , j + ( 1 − 2 r ) u i , j + r u i + 1 , j    ( r = k h 2 ) u_{i,j+1}=ru_{i-1,j}+(1-2r)u_{i,j}+ru_{i+1,j}~~(r=\frac{k}{h^2}) ui,j+1=rui1,j+(12r)ui,j+rui+1,j  (r=h2k)
    • 具体推的步骤大概如下:
      • 由于已知 u ( x , 0 ) = f ( x ) u(x,0)=f(x) u(x,0)=f(x),因此相当于知道 u 0 , 0 , u 1 , 0 , u 2 , 0 … u_{0,0},u_{1,0},u_{2,0}\dots u0,0,u1,0,u2,0
      • 通过上面的公式就可以推出来 u 1 , 1 , u 2 , 1 , u 3 , 1 … u_{1,1},u_{2,1},u_{3,1}\dots u1,1,u2,1,u3,1,注意由于已知左边界和右边界,因此 u 0 , 1 u_{0,1} u0,1也知道,所以第二排就可以全部推出来。
      • 通过上面的方式可以求出区域内全部的数值解。

    2.Crank-Nicholson隐式算法

    • 求解思想:也是一排一排向上推,但是这次是使用线性方程组一次性求出一排。
    • 这里采用相同的划分方式,但是代入不同的差分方程
    • 通过化简得到
    • 具体推的步骤大概如下:
      • 由于已知 u ( x , 0 ) = f ( x ) u(x,0)=f(x) u(x,0)=f(x),因此相当于知道 u 0 , 0 , u 1 , 0 , u 2 , 0 … u_{0,0},u_{1,0},u_{2,0}\dots u0,0,u1,0,u2,0
      • 通过上面的公式就可以推出来方程 − r u i − 1 , 1 + ( 2 + 2 r ) u i , 1 − r u i + 1 , 1 = c     ( c 是 一 个 常 数 ) -ru_{i-1,1}+(2+2r)u_{i,1}-ru_{i+1,1}=c~~~(c是一个常数) rui1,1+(2+2r)ui,1rui+1,1=c   (c),注意由于已知左边界和右边界,所以这个其实就转化成在一维上的差分问题,最后列出全部的方程构成方程组求解即可。
      • 通过上面的方式可以求出区域内全部的数值解。
    • 一个例子:
    • 做划分并且代入差分方程
      k = 0.01 , h = 0.1 k=0.01,h=0.1 k=0.01,h=0.1
      − u i − 1 , j + 1 + 4 u i , j + 1 − u i + 1 , j + 1 = u i − 1 , j + u i + 1 , j -u_{i-1,j+1}+4u_{i,j+1}-u_{i+1,j+1}=u_{i-1,j}+u_{i+1,j} ui1,j+1+4ui,j+1ui+1,j+1=ui1,j+ui+1,j
    • 进行求解(这里利用了对称性,在 x = 0.5 x=0.5 x=0.5 两边是对称的,将 j = 0 j=0 j=0隐去,并根据对称性将 u 6 u_6 u6替换成 u 4 u_4 u4)

    (3)双曲线型

    • 得到的差分方程为 ( r = k h r=\frac{k}{h} r=hk注意和之前的定义不同):
    • 划分需要满足一定的条件 k h ≤ 1 c \frac{k}{h}\le\frac{1}c{} hkc1
    • 具体求解按照之前类似的方法即可。

    (4)椭圆型

    • 得到的差分方程为 (这里取 k k k h h h相等):
    • 求解
      • 可以采用类似之前的隐式或者显式方法求解。
      • 可以采用迭代法求解,比如雅克比迭代,转换成下面的迭代式
    展开全文
  • 由于计算机的发展,采用数值方法求解微分方程的数值近似解得到广泛应用。微分方程的数值解法主要包括两大类:有限差分法和有限单元法。这里主要介绍有限单元法。 However,对于一个只学过微积分和矩阵论的工科生来...
  • 取得了较好的拟合效果,现在针对偏微分方程PDE进行最后的攻关,完成该部分攻关后即基本掌握了神经网络应用到方程求解的原理方法以及实践代码的自主可控,其实多元N阶微分如果不是偏微分方程则可表示为(以一阶微分为...
  • 采用4阶龙格库塔算法求解二阶微分方程。用VC实现数值分析中的算法。
  • 该模型是求解系数偏微分方程的好例子,神奇的大千世界都可在计算机上完美地重现!
  • 第四十九篇 二阶微分方程的打靶法 边界值问题 当我们试图用自变量的不同值所提供的信息来解二阶或更高阶的常微分方程时,我们必须使用与前面描述的不同的数值方法。 前面提到的初值问题经常涉及到“时间”作为自...
  • 零基础使用 MATLAB 求解偏微分方程(建议收藏) 文章目录零基础使用 MATLAB 求解偏微分方程(建议收藏)偏微分开源工具介绍PDE 工具箱函数汇总介绍0 基础:GUI 界面操作示例问题工具箱求解导出为代码形式代码导出...
  • matlab 多次求解偏微分方程 ode45

    千次阅读 2019-04-27 20:39:47
    师兄和我讨论了一个问题,就是在matlab中求解偏微分方程, 其中,偏微分方程中有的常数是一直变化的,要求很多次,而不是一个固定的常数求一次就行了。 其中,A1和A2是要求解的因变量,x是自变量,其他为...
  • 求解偏微分的代码欧米茄方程 关于 Omega 方程是一个与时间无关的偏微分,它控制着水的垂直速度。 通常,控制流体的方程与时间无关,但一种特殊的近似,称为准地转近似,允许将复杂的 Navier-Stokes 方程简化为这种更...
  • 神经网络求解偏微分方程代码分析

    千次阅读 2021-03-20 14:04:15
    下面把我求解偏微分方程的代码分享出来,主要是分享代码思路。这个代码是在求解常微分方程的基础上进行的修改,现在看来有些语句可以换成更高级的表达。若有更好的表达方式欢迎评论/私信! 运行环境:python3.6 + ...
  • 偏微分方程求解是一项非常重要和困难的任务,许多偏微分方程没有解析解,需要通过数值方法的手段寻找数值解。结合深度学习的偏微分方程求解方法有着巨大的应用潜力。PINN方法以其内嵌物理公式的创新正成为研究的...
  • 有限差分法求解偏微分方程

    万次阅读 多人点赞 2016-11-06 14:23:03
    只含有未知多元函数及其偏导数的方程,称之为偏微分方程偏微分方程在工程技术(甚至图像处理)中有...本文主要介绍利用有限差分(涉及Jacobi迭代和Gauss-Siedel迭代)求解偏微分方程(以Laplace方程为例)的方法,
  • 偏微分方程的特征线法

    万次阅读 多人点赞 2018-03-21 23:13:39
    本文以尽可能清晰、简明的方式来介绍了一阶偏微分方程的特征线法。个人认为这是偏微分方程理论中较为简单但事实上又容易让人含糊的一部分内容,因此尝试以自己的文字来做一番介绍。当然,更准确来说其实是笔者自己的...
  • 用Matlab解二阶非齐次微分方程

    千次阅读 2020-11-07 21:44:59
    用Matlab解二阶非齐次微分方程大纲函数代码 大纲 用Matlab解二阶非齐次微分方程,网上很多麻烦又累赘又无用的东西,一句话解决的事。 函数 dsolve(‘a’,‘b’,‘c’):解微分方程函数 a:(二阶微分方程 b: ...
  • 欧拉法求解微分方程c语言 1)多项式评估 (1) Polynomial Evaluation) We all know what polynomial equations are and it is one of the common problems given to the beginners when they first start learning C. ...
  • python初探偏微分方程数值解

    千次阅读 2021-01-28 00:32:59
    简要介绍偏微分方程基础概念,之后基于python,对椭圆型偏微分方程数值解进行代码实现
  • Python小白的数学建模课-11.偏微分方程数值解法

    千次阅读 多人点赞 2021-08-17 14:10:06
    本文采用有限差分法求解偏微分方程,通过案例讲解一维平流方程、一维热传导方程、二维双曲方程、二维抛物方程和二维椭圆方程等常见类型的偏微分方程的数值解法,给出了全部例程和运行结果。。 欢迎关注『Python小白...
  • Matlab学习——求解微分方程()

    千次阅读 2018-05-29 17:19:00
    函数 dsolve 用来解决常微分方程)的求解问题,调用格式为 X=dsolve(‘eqn1’,’eqn2’,…) 如果没有初始条件,则求出通解,如果有初始条件,则求出特解 系统缺省的自变量为 t。 2...
  • 方程组为·:{x′=−2x+2yy′=2x−5y\left\{\begin{matrix}{x}&amp;amp;amp;#x27;=-2x+2y\\ {y}&amp;amp;amp;#x27;=2x-5y\end{matrix}\right.{x′=−2x+2yy′=2x−5y​ 用消元法求出的通解为:{x=c1e−t+c2...
  • 用RK45解偏微分方程,变步长,注释详细。
  • matlab求解微分方程

    千次阅读 2020-03-30 00:51:14
    dsolve函数用于求常微分方程组的精确解,也称为常微分方程的符号解。如果没有初始条件或边界条件,则求出通解;如果有,则求出特解。 1)函数格式 Y = dsolve(‘eq1,eq2,…’ , ’cond1,cond2,…’ , ’Name’) 其中...
  • 偏微分方程数值模拟常用的方法主要有三种:有限差分方法(FDM)、有限元方法(FEM)、有限体积方法(FVM),本文将对这三种方法进行简单的介绍和比较。一.有限差分方法有限差分方法(Finite Difference Methods)是数值模拟...
  • 机器之心原创作者:蒋思源微分方程真的能结合深度神经网络?真的能用来理解深度神经网络、推导神经网络架构、构建深度生成模型?本文将从鄂维南、董彬和陈天琦等研究者的工作中,窥探微分方程与深度学习联袂前行的...
  • 【Mark下】三个微分公式三元函数,二阶或者更高阶的微分非线性方程利用Finite Difference Method展开,在利用牛顿迭代的方法,解方程,其下是考虑到电脑无法存储大量举阵情况下的分布解法。如果是N mesh grids,可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,446
精华内容 578
热门标签
关键字:

求解二阶偏微分方程组