微分方程数值解法(实际应用的改进)

 

微分方程数值解法(实际应用的改进)
延伸上面的问题
假设有这样一种情况,关于人行走的,从A到B地,行走速度越来越慢,速度是关于时间A/

(t+B)+C的函数,现在求当s和时间t的关系;
从微分的角度看,v=s'=A/(t+B)+C
采用分离变量法有:
d(s)/d(t)=A/(t+B)+C
Go
d(s)=d(t)*{A/(t+B)+C}
Go
s=A*In (t+B)+C*t+D
假设A=10,另外再假设B=1,C=2,D=100,
这样有s(0)=100;
下面看数值解法和公式解法的差异;

下面写程序来证明:
(setq  a  10)
(setq  b  1)
(setq  c  2)
(setq  d  100)


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


注意这里是关于x1的函数

(defun  expr (x1 y1 )
(+  y1
    (*  0.1
        (+ C
           (/ A
              (+  B
                  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)
(+  (*   A
         (log  (+  x
                   B)))
    (*   C
         x)
    D))


(defun  exprhelp (x1 )
(if (< (abs (-  x1  0))
       0.1)
        (formula  0)
    (expr  x1 
           (exprhelp  (-  x1 
                          0.1)))))                 

(defun  test (n)
(if (> n 99)
  (progn
       (print (exprhelp n))
       (print  'compare)
       (print (formula n))     
       (test (- n 0.1)))
  (print 'over)))

[32]> (test  100)

345.65558
COMPARE
346.15118
345.44568
COMPARE
345.94128
345.23578
COMPARE
345.73138
345.02585
COMPARE
345.52148
344.81592
COMPARE
345.31152
344.606
COMPARE
345.1016
344.39603
COMPARE
344.89163
344.18607
COMPARE
344.68167
343.9761
COMPARE
344.4717
343.7661
COMPARE
344.26172
343.55612
COMPARE
344.05173
OVER
OVER
两者的值也是非常的接近,不过这里线性关系已经占主要部分了;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微分方程数值解法(Numerical Methods for Differential Equations)是一门重要的应用数学课程,能够解决许多实际问题。第四题的问题要求我们用欧拉显式(Euler's explicit method)来求解一阶常微分方程的初值问题。 根据欧拉显式的求解公式,我们可以得到迭代公式: $$y_{n+1}=y_n+hf(t_n,y_n)$$ 其中,$y_n$ 表示第 $n$ 步时的近似解,$h$ 表示步长,$f(t,y)$ 表示微分方程中的函数。题目中给出的微分方程为$\frac{dy}{dt}=e^t-y$,初值为$y(0)=1$。 我们可以先确定步长,根据题目所给条件,步长 $h=0.1$。接下来,我们可以根据迭代公式,求解近似解: $$\begin{aligned} y_1&=y_0+hf(t_0,y_0)\\ &=1+0.1(e^0-1)\\ &=1.1 \end{aligned}$$ $$\begin{aligned} y_2&=y_1+hf(t_1,y_1)\\ &=1.1+0.1(e^{0.1}-1.1)\\ &=1.19 \end{aligned}$$ $$\cdots$$ 我们可以继续按照以上迭代公式,求解出 $y_3=1.267$, $y_4=1.416$, $y_5=1.651$ 等近似解,直至 $n=5$。最后的结果为:$y(0.5)\approx 1.651$。 因此,欧拉显式求解该初值问题的近似解为 $y(0.5)\approx 1.651$。 ### 回答2: 第四题要求用改进的欧拉公式求解微分方程dy/dx=1-x-y,y(0)=1,在x=0到x=1的区间内,步长为h=0.1。使用改进的欧拉公式,需要先使用欧拉计算出初始点,然后再使用改进的欧拉公式进行迭代求解。该方的迭代公式为y_n+1 = y_n + h/2(f(x_n, y_n) + f(x_n+1, y_n+h*f(x_n, y_n)))。 具体实现步骤如下: 1.将微分方程dy/dx=1-x-y转化为差分方程(y_n+1 - y_n)/h = 1 - x_n - y_n 2.根据初始条件y(0)=1,可以得到y_0=1 3.使用欧拉求得y_1: y_1 = y_0 + h*f(x_0, y_0) = 1 + 0.1*(1-0-1) = 0.9 4.使用改进的欧拉公式求解y_2到y_10: -迭代公式为y_n+1 = y_n + h/2(f(x_n, y_n) + f(x_n+1, y_n+h*f(x_n, y_n)))。 -代入f(x_n, y_n) = 1 - x_n - y_n可以得到y_n+1 = y_n + h/2(1 - x_n - y_n + 1 - (x_n+1) - (y_n+h*(1-x_n-y_n)))) -根据上式逐步计算得到y_2=0.8125,y_3=0.7536,y_4=0.7248,y_5=0.7203,y_6=0.7347,y_7=0.7615,y_8=0.7940,y_9=0.8269,y_10=0.8568。 5.最终的数值解为y(1)=y_10=0.8568。 6.需要注意的是,在每次计算y_n+1时,需要将y_n+1的值代入下一次迭代计算中。 通过使用改进的欧拉公式,可以得到y(1)的数值解为0.8568。这种方的优点在于计算简单,容易实现,但是误差较大,在实际应用中需要慎重考虑。 ### 回答3: 第四题要求利用欧拉公式,应用数值解法来计算微分方程y'=f(x,y)在特定条件下的近似解,并给出解的误差估计。 欧拉公式是一种基本的数值解法,利用直线近似来逼近真实函数的变化。对于微分方程y'=f(x,y),欧拉公式的推导是:将微分方程离散化,得到Δy= f(x,y)Δx,即变化量Δy等于f(x,y)在Δx内的积分。将Δy与y(x+Δx)近似等于y(x)+f(x,y)Δx,即可得到欧拉公式的计算公式: y(x+Δx) ≈ y(x) + f(x,y)Δx 根据欧拉公式,我们可以逐步计算微分方程的近似解。误差估计可以利用泰勒公式进行计算。泰勒公式是一种利用函数在某个点附近的多项式逼近来估计近似解的方。误差估计公式为: y(x+Δx) - y(x) = f(x,y)Δx + 1/2f'(x,y)Δx^2 + O(Δx^3) 其中O(Δx^3)表示高阶无穷小量,可以忽略。利用泰勒公式计算误差估计,可以将近似解与精确解之间的误差控制在一定范围内。 综上所述,对于微分方程数值解法p158第四题,我们可以使用欧拉公式来计算微分方程的近似解,并利用泰勒公式计算误差估计,从而求得可靠的解析解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值