微分方程解特殊差分模型
2011-07-06 10:33
225 查看
微分方程解特殊差分模型
由前面两种模型之间的联系,我们可以获得一些共同点;一部分的差分模型比较难解,我们可
以转化为微分方程的近似解来完成;
比如差分模型为:
n*{a(n)-a(n-1)}-0.0001*a(n-1)=0.0001*n^3
GO
n*a(n)-(n+0.0001)*a(n-1)=0.0001*n^3
如果是直接给出下面这个差分方程,要算出它的通项公式比较困难;因为它与上面一种等价,
我们对上面一种差分模型采用微分方法获得近似解答,然后再回代获得差分的解答;
对应的微分方程为x*y'-0.01*y=0.01*x^3 (100比1的关系)
采用标准解法有:
Go
y'-0.01/x*y=9*x^2
GO
可以解得u(x)=C/x^0.01
这样有{y*C/x^0.01}'=9*x^2*C/x^0.01
Go
{y*C/x^0.01}'=C*x^1.99
Go
y*C/x^0.01=A*x^2.99+B
Go
y=A*x^3+B*x^0.01
将这个值代入原始模型中可以得A=9/(3-0.01),现在假定y(1)=(12-0.01)/(3-0.01),这样就可
以得到B=1
通过原方程的形式还可以知道一条信息y(0)=0;
这对应于原来的a(0)=0,和a(100)=3/(3-0.01),
下面写程序来证明:
(setq a (/ 9
(- 3 0.01)))
(setq b 1)
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))
y'-0.01/x*y=0.01*x^2
(defun expr (x1 y1 )
(+ y1
(* 0.01
(+ (* 9
(pow x1 2))
(/ (* 0.01
y1)
x1)))))
(defun calc (n x)
(if (eq n 0)
1.0
(+ (calc (1- n)
x)
(* (pow x
n)
(/ 1
(slayer n))))))
(setq e (calc 10 1))
(defun formula (x)
(if (eq x 0)
0
(+ (* a
(pow x 3))
(* b
(calc 10
(* 0.01
(log x)))))))
(defun exprhelp (x1 )
(if (< (abs (- x1 0))
0.01)
(formula 0)
(expr x1
(exprhelp (- x1
0.01)))))
(defun test (n)
(if (> n 0)
(progn
(print (exprhelp n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
[200]> (test 20)
24097.682
COMPARE
24081.299
20661.563
COMPARE
20646.848
17568.674
COMPARE
17555.543
14800.9375
COMPARE
14789.322
12340.311
COMPARE
12330.125
10168.744
COMPARE
10159.89
8268.159
COMPARE
8260.558
6620.4917
COMPARE
6614.0693
5207.694
COMPARE
5202.3633
4011.7046
COMPARE
4007.3787
3014.4636
COMPARE
3011.0566
2197.9077
COMPARE
2195.3364
1543.9823
COMPARE
1542.1581
1034.6248
COMPARE
1033.461
651.7748
COMPARE
651.1853
377.37396
COMPARE
377.27042
193.36166
COMPARE
193.6561
81.67573
COMPARE
82.28195
24.260286
COMPARE
25.087223
3.0551095
COMPARE
4.0100336
OVER
OVER
从这个结果可以发现,两者的结果是相当类似,从这里我们可以得出一个结论,可能有的差分
方程没有解,不过采用微分的方法是可以获得近似解的;
另外关于求x^0.01次方的方法,这里采用以下方式获得:
(calc 10
(* 0.01
(log x)))))))
由前面两种模型之间的联系,我们可以获得一些共同点;一部分的差分模型比较难解,我们可
以转化为微分方程的近似解来完成;
比如差分模型为:
n*{a(n)-a(n-1)}-0.0001*a(n-1)=0.0001*n^3
GO
n*a(n)-(n+0.0001)*a(n-1)=0.0001*n^3
如果是直接给出下面这个差分方程,要算出它的通项公式比较困难;因为它与上面一种等价,
我们对上面一种差分模型采用微分方法获得近似解答,然后再回代获得差分的解答;
对应的微分方程为x*y'-0.01*y=0.01*x^3 (100比1的关系)
采用标准解法有:
Go
y'-0.01/x*y=9*x^2
GO
可以解得u(x)=C/x^0.01
这样有{y*C/x^0.01}'=9*x^2*C/x^0.01
Go
{y*C/x^0.01}'=C*x^1.99
Go
y*C/x^0.01=A*x^2.99+B
Go
y=A*x^3+B*x^0.01
将这个值代入原始模型中可以得A=9/(3-0.01),现在假定y(1)=(12-0.01)/(3-0.01),这样就可
以得到B=1
通过原方程的形式还可以知道一条信息y(0)=0;
这对应于原来的a(0)=0,和a(100)=3/(3-0.01),
下面写程序来证明:
(setq a (/ 9
(- 3 0.01)))
(setq b 1)
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))
y'-0.01/x*y=0.01*x^2
(defun expr (x1 y1 )
(+ y1
(* 0.01
(+ (* 9
(pow x1 2))
(/ (* 0.01
y1)
x1)))))
(defun calc (n x)
(if (eq n 0)
1.0
(+ (calc (1- n)
x)
(* (pow x
n)
(/ 1
(slayer n))))))
(setq e (calc 10 1))
(defun formula (x)
(if (eq x 0)
0
(+ (* a
(pow x 3))
(* b
(calc 10
(* 0.01
(log x)))))))
(defun exprhelp (x1 )
(if (< (abs (- x1 0))
0.01)
(formula 0)
(expr x1
(exprhelp (- x1
0.01)))))
(defun test (n)
(if (> n 0)
(progn
(print (exprhelp n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
[200]> (test 20)
24097.682
COMPARE
24081.299
20661.563
COMPARE
20646.848
17568.674
COMPARE
17555.543
14800.9375
COMPARE
14789.322
12340.311
COMPARE
12330.125
10168.744
COMPARE
10159.89
8268.159
COMPARE
8260.558
6620.4917
COMPARE
6614.0693
5207.694
COMPARE
5202.3633
4011.7046
COMPARE
4007.3787
3014.4636
COMPARE
3011.0566
2197.9077
COMPARE
2195.3364
1543.9823
COMPARE
1542.1581
1034.6248
COMPARE
1033.461
651.7748
COMPARE
651.1853
377.37396
COMPARE
377.27042
193.36166
COMPARE
193.6561
81.67573
COMPARE
82.28195
24.260286
COMPARE
25.087223
3.0551095
COMPARE
4.0100336
OVER
OVER
从这个结果可以发现,两者的结果是相当类似,从这里我们可以得出一个结论,可能有的差分
方程没有解,不过采用微分的方法是可以获得近似解的;
另外关于求x^0.01次方的方法,这里采用以下方式获得:
(calc 10
(* 0.01
(log x)))))))
相关文章推荐
- 微分方程解特殊差分模型(美化模型)
- 微分方程解特殊差分模型(解决一般的应用)
- 微分方程解特殊差分模型(解决一般的应用2)
- 微分方程解特殊差分模型(解决一般的应用3)
- 微分方程在建模中的应用(建立差分模型)
- 字典转模型的过程中,空值和id特殊字符的处理
- HDU - 3440 House Man 【差分约束 + 最短路模型】
- 常见的差分(动)阻抗计算模型
- Python学习笔记1:数据模型和特殊方法(魔术方法)
- 数学建模学习笔记(第五章:6个动态模型-微分方程的建立与分析)
- POJ - 1201 Intervals 【差分约束 + 最长路模型】
- 字典转模型的过程中,空值和id特殊字符的处理
- HBase - 数据模型的特殊属性 | 那伊抹微笑
- [时间序列分析][5]--非平稳时间序列模型与差分
- 时间序列(四)ARIMA模型与差分
- 二 树莓派3+ROS-kinetic+mbed-二轮差分模型
- AutoRegressive Integrated Moving Average(差分自回归移动平均模型)
- rails:simple_for 对于关联模型的特殊技巧
- 实体模型几类特殊应用
- 常见的差分(动)阻抗计算模型