复数域内的微分解法

本文探讨了在复数域内解决微分方程的简便方法,以y'=e^x*cos x为例,通过转换到复数域简化求解过程。通过数值计算验证了解的准确性,并用Lisp程序实现计算过程,尽管存在浮点数计算精度限制导致的误差,但整体解法已非常接近实际结果。
复数域内的微分解法
先考虑一个简单的微分形式y'=e^x*cos x ,
这种形式如果考虑分离变量法,需要采用两次局部积分法最后才能获得结果;但如果在复数域


内解答将会很简单,并且我们将验证采用数值解法的结果比较;
将上面形式变为复数域的形式有:
yy'=Re { e^x*e^ix}
Go
yy'=Re{e^{x(1+i)}}
GO
yy=Re {1/(1+i)*e^{x(1+i)}+C }  (C为实数)
Go
yy=Re { (1-i)/2*e^{x(1+i)}+C }
Go
yy=Re { 1/2*e^x*(cos x+i*sin x)  - 1/2*e^x*(i*cos x-*sin x) +C}
Go
yy=Re { 1/2*e^x*(cos x-sin x)  + i/2*e^x*(sin x -cos x) +C}
回到实数领域内有:
y= 1/2*e^x*(cos x+sin x) +C
将y代入原微分方程可以获得解答;
现在假设初始条件y(0)=1,这个时候C为1/2


下面写程序来证明:
(setq  c  0.5)




(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))




(setq  e  (calc  30  1))




(defun  transform (x1)
(calc  30
       (mymod   x1)))


(defun  mymod  (x)
(/ 
    (round  x  1)
    1))


(defun  expr (x1 y1 )
(+  y1
    (*  0.01
        (*  (cos x1)
            (transform   x1)))))


(defun  calc (n x)
(if  (eq  n  0)
       1.0
    (+ (calc (1- n)
             x)
       (*  (pow  x  
                 n)
           (/    1
                 (slayer n))))))
      
(defun  mysqrt (x)
(calc  10
       (*  1/2 
           (log x))))


(defun  formula  (x)
(+   (*  0.5
         (calc 30 x)
         (+  (cos x)
             (sin x)))
      c))  




(defun  exprhelp (x1 )
(if (< (abs (-  x1  0))
       0.001)
        (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)))


[365]> (test  10)


-16685.893
COMPARE
-15231.83
-2424.1306
COMPARE
-2021.2682
1294.8411
COMPARE
1258.2537
843.1325
COMPARE
774.11414
160.25563
COMPARE
137.8181
-50.077778
COMPARE
-49.608906
-41.681297
COMPARE
-38.003887
-9.392899
COMPARE
-8.025031
2.224791
COMPARE
2.321959
2.473438
COMPARE
2.3780246
OVER
OVER
从这里可以看出误差还是有一些,不过相对已经很接近了;主要原因还是float计算能力的限


制,比如(calc 30 x)中如果x是整数是能够计算出结果的,如果是小数就不能了;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值