wiley 发表于 2010-1-7 06:01:50

Wayne, 什么是手工数值解?一阶微分方程的数值解有很多常规的算法.
你给的两个方程正如你5楼所说, 都是Riccati方程.第二个方程作代换 y=-f'/f , 化为二阶的线性方程 f''+x^2 f=0 .
之后变换成Bessel equation是查已知的结果.
(顺带推荐EqWorld这个网站.不过mathematica应该是包括了这些已知的exact solutions)

wayne 发表于 2010-1-7 08:53:22

第二个方程由于在初值处 y'(0)=0,所以 用传统的欧拉法失效。
我找到了一种方法可以,Runge–Kutta methods

http://exp.math.tsinghua.edu.cn:9100/odeweb/review/images/2_2_3.gif
用此方法画出来的图形的确跟符号解的图形一致,而且也得的了在x=2左右会有发散的迹象~~

wayne 发表于 2010-1-7 08:58:15

现在就是有一个问题,在不知道符号解的情况下,能否得到这个奇点的比较精确的值来

wayne 发表于 2010-1-7 09:16:42

我把Runge–Kutta法用Mathematica实现了一下,取步长为0.04,画出来的数值解跟符号解非常吻合,
不知道数值解能否分析出这个奇点的精确值来。。。

wiley 发表于 2010-1-7 09:45:30

本帖最后由 wiley 于 2010-1-7 09:52 编辑

如果要求 BesselJ[-1/4, x^2/2]=0 的解, mathematica有 BesselJZero 可以用:
N]] ~ 2.003
所以要得到奇点的数值精确值, 步长要更小.

数学星空 发表于 2010-1-7 09:47:41

本帖最后由 数学星空 于 2010-1-7 09:50 编辑

呵,看来,MAPLE在绘图方面也不如Mathematica 漂亮哟
明显第二个图画出来有偏差,即第一条竖线(无意义的点)不在横坐标2.0..的地方....

wayne 发表于 2010-1-7 09:50:23

呵呵,用backward Euler method也可以做,每迭代一次要解方程
http://upload.wikimedia.org/math/1/a/8/1a8e9cce361cf8dee7e4caca04a58bcb.png

还好,这是一个一元二次方程,解得:
y_{n+1}=\frac{1-\sqrt{1-4 h^2 x_n^2-4 h y_n}}{2 h}

不过必须把步长设很小,否则,很容易导致上面的根号里面为负值~~

Wiley,:victory:,你推荐的EqWorld网站我访问不了。。。

wayne 发表于 2010-1-7 09:54:27

BesselJZero很不错,竟然可以求BesselJ函数的任意零点~~,比我的FindRoot强多了

wayne 发表于 2010-1-7 09:58:29

25# 数学星空

呵呵,谢了,
学到了一个函数:Airy function

没想到竟然是一个很简单的二阶齐次方程的解:
y''-xy=0

数学星空 发表于 2010-1-7 10:14:08

呵,是的,我之前也纳闷,为什么画出来的不一样,原来还是计算有误...
我用21#重新计算了一下...
化简后和最开始得到的答案一样!
页: 1 2 [3] 4
查看完整版本: 一阶非线性微分方程的求解