求解ODE方程的关键方法写在ODE模块中,n曹泽熙

问题:赤尾:今益求精,头头事到n金立:赢得卓绝nSamsung:恭喜中国足球,今天看本人的nNokia科学和技术:只要有1%的只怕,大家就有99%的信仰nAcer:追寻无可比拟,就是担任14亿盼望,寸步不让n安踏体育:不时交恶不及翻身n恰恰食物:国“仁”骄傲n……n

"增速是GDP的三倍! 高盛:今后中华的投资机缘在此四大行当n3小时前  nn曹泽熙 小说总量 219篇n 关注n摘要:在华夏,值得投资的不止有BATJ,还恐怕有新兴工业、新花费和医疗常规等非常多家底。n*正文来源华尔街视线(微信ID:wallstreetcn),小编曹泽熙。更加多美丽资源音讯请登入wallstreetcn.com,或下载华尔街见闻应用软件。*nn高盛把近些年来中国的浮动总结为二个定义:“新的中华”(New China),在这里个概念中,新兴工业、网络、新花费和健康行当是值得关怀的投资机缘。nn高盛估计,那四大行业的平均增加大致为五分之二,大概是中华夏儿女民共和国GDP年增长速度的三倍。nn高盛将各类行当又细分了2-3个行当,并依据差异行当的影响力进行了赋权:nnn新兴工业占比21%(个中高级创设业占8%,IT创建业占9%,清洁财富占3%);新费用占比32%(其Hong Kong中华电力有限公司动汽车占2%,娱乐产业占14%,教育行业占16%);互连网占21%(其香江中华电力有限公司商、游戏占15%,网络经济占6%);健康行当占26%(当中医治常规服务占19%,医疗安保卫证占7%)。n那四大产业有啥样特色吗?求解ODE方程的关键方法写在ODE模块中,n曹泽熙 文章总数 219篇。nn首先,增加将持续维持强硬。在过去八年中,那四大行业的年复合增加率为18%,高于GDP年复合增进率8%。我们认为,在今后,那四大行当的年复合增加率将达19%。nnn第二,不止局限在互连网领域。中夏族民共和国的网络和本事集团抓住了大多投资人目光。可是,咱们只付与了互连网22%的权重。除了网络,满含了游戏、旅游、教育等在内的新花费,以致健康行业和新颖工业行当等等,比重都比表现抢眼的网络集团大。nnn第三,分歧于“新经济”。互连网和新兴工业的比例占到了55%,而正规行业和新开支的增加率约为15%,那和“新经济”的概念分裂。nnn第四,拉长不要仅仅是量的增加。那四大行当不满意于夺取越多的市集分占的额数,同有的时候候还在商海上存有越来越大的话语权,并在股票总市值链中处于更加高档的不及。nn最终,有谈得来的周期和逻辑。那四大产业的加强受到经济周期的熏陶不大,有友好的抓实周期。nnn从宏观经济的角度来明白那四大行业,最简便易行的措施实际上把宏观经济数据拆分为率先、二、三家底,以至投资和言语。之所以那四大产业能成为中华的丹东行当,高盛感到,首要基于以下多少个因素:nn首先,2011年来讲,第三行业的增速超过第第二行当业:nnn第二,中华夏族民共和国花费者的成本行为爆发刚烈改造,网购正在蚕食越多的线下购物市集分占的额数:nnn第三,越来越多的“软基本建设”(水务、教育、医治、文娱体育)落榜,带动中国新开支:nnn第四,在说话方面,中中原人民共和国的低附赠值产品出口比重下跌,高附赠值产品出口比重返涨:nnn别的,中华夏族民共和国政坛也会有风流浪漫多级政策推动那四大行业的上进。nn包蕴二〇一二年就写入“十二五”规划的七大新兴行业;二零一二年国家统计局引进的八个总括门类:高科学和技术创造业和高科学和技术服务业,注重考察于研究开发投入;中中原人民共和国还在2016年提议了“中华人民共和国创设2025”安插,希望拉长创设业水平;二零一六年,人民政党还发表了兴妖作怪人工智能发展的相关设计,希望在创立业、种植业、金融、教育以至政务等地点揭橥人工智能的效用。nn宏观数据显现卓越、还会有政策协理,那四大行当发表现状怎么样?nn高盛从以下多个方面实行了分析:nn第大器晚成,智力资本。研究开发投入是间接呈现智力资本投入的数据。二零一五年,中华夏儿女民共和国在研发方面包车型地铁投入差十分的少占到了GDP的2%,同众多蓬勃经济体极其。专利申请方面,2014年,中华夏族民共和国申请专利数占到了中外的29%,已经超先生越澳洲,并和U.S.一定。nn第二,人力资本。中华夏族民共和国相当的重教投入,2014年的引导投入差不离占GDP的3%。长时间的教诲投入让中夏族民共和国享有足够的工程工夫人力财富。nn第三,基础设备建设。在过去十年中,中中原人民共和国高科学技术行业中央建设年复合拉长率达13%。"

求解难点

Write a program to solve the following ordinary differential equation by

  • basic Euler method
  • improved Euler method
  • four-order Runge-Kutta method

云顶娱乐 1=3 end{cases} xin[0, 1.5])

and calculate y(1.5) with stepsize=0.1, 0.1/2, 0.1/4, 0.1/8

Compare it with analytic solution (in figure)

云顶娱乐 2 = dfrac{3}{1 x^3})

回答:

主程序

program main
    use ODE
    implicit none
    real :: x0=0.0,y0=3.0,a=0.0,b=1.5,h=0.1
    integer :: n,i,j
    character(len=512) :: filename


    print *,'The analytic solution of y(1.5)= ',analytic_solution(1.5)
    print *

    print *,'Basic Euler Method'
    print '(5x,a,f3.1,3x,a,f3.1,3x,a,f3.1,3x,a,f3.1)','Set initial  x0= ',x0,'y0= ',y0,'a= ',a,'b= ',b
    do j=0,3
        h=0.1/2**j
        print '(5x,a,f6.4)','Set h= ',h
        call init(x0,y0,a,b,h)
        n=size(x)-1
        call Basic_Euler
        print '(8x,a,f10.8)','y(1.5)= ',y(n)
        write(filename, *) j
        filename='BEM_'//Trim(AdjustL(filename))//'.txt'
        open(101,file=filename)
        write(101,'(f3.1,f10.8)') (x(i),y(i),i=0,n)
        close(101)
        deallocate(x,y)
    end do
    print *

    print *,'Improved Euler Method'
    print '(5x,a,f3.1,3x,a,f3.1,3x,a,f3.1,3x,a,f3.1)','Set initial  x0= ',x0,'y0= ',y0,'a= ',a,'b= ',b
    do j=0,3
        h=0.1/2**j
        print '(5x,a,f6.4)','Set h= ',h
        call init(x0,y0,a,b,h)
        n=size(x)-1
        call Improved_Euler
        print '(8x,a,f10.8)','y(1.5)= ',y(n)
        write(filename, *) j
        filename='IEM_'//Trim(AdjustL(filename))//'.txt'
        open(101,file=filename)
        write(101,'(f3.1,f10.8)') (x(i),y(i),i=0,n)
        close(101)
        deallocate(x,y)
    end do
    print *

    print *,'Four Order Runge-Kutta Method'
    print '(5x,a,f3.1,3x,a,f3.1,3x,a,f3.1,3x,a,f3.1)','Set initial  x0= ',x0,'y0= ',y0,'a= ',a,'b= ',b
    do j=0,3
        h=0.1/2**j
        print '(5x,a,f6.4)','Set h= ',h
        call init(x0,y0,a,b,h)
        n=size(x)-1
        call Four_Order_Runge_Kutta
        print '(8x,a,f10.8)','y(1.5)= ',y(n)
        write(filename, *) j
        filename='RKM_'//Trim(AdjustL(filename))//'.txt'
        open(101,file=filename)
        write(101,'(f3.1,f10.8)') (x(i),y(i),i=0,n)
        close(101)
        deallocate(x,y)
    end do
    print *

end program main

求解ODE方程的首要办法写在ODE模块中:

module ODE
    implicit none
    private
    public :: x,y,init,Basic_Euler,Improved_Euler,Four_Order_Runge_Kutta,analytic_solution

    real,allocatable :: x(:),y(:)
    real :: x0,y0,a,b,h
    integer :: n,i

contains

    function f(x,y)
        implicit none
        real :: f,x,y
        f=-x*x*y*y
    end function f

    function analytic_solution(x) result(f)
        implicit none
        real :: f,x
        f=3.0/(1 x*x*x)
    end function

    subroutine init(x0_,y0_,a_,b_,h_)
        implicit none
        real :: x0_,y0_,a_,b_,h_
        x0=x0_
        y0=y0_
        a=a_
        b=b_
        h=h_
        n=int((b-a)/h)
        allocate(x(0:n),y(0:n))
        x=(/ (a i*h,i=0,n) /)
        y=0
        y(0)=y0
    end subroutine init

    subroutine Basic_Euler()
        implicit none
        do i=1,n
            y(i)=y(i-1) h*f(x(i-1),y(i-1))
        end do
    end subroutine Basic_Euler

    subroutine Improved_Euler()
        implicit none
        real :: y_
        do i=1,n
            y_=y(i-1) h*f(x(i-1),y(i-1))
            y(i)=y(i-1) h/2*(f(x(i-1),y(i-1)) f(x(i),y_))
        end do
    end subroutine Improved_Euler

    subroutine Four_Order_Runge_Kutta()
        implicit none
        real :: k1,k2,k3,k4
        do i=1,n
            k1=f(x(i-1),y(i-1))
            k2=f(x(i-1) h/2,y(i-1) h/2*k1)
            k3=f(x(i-1) h/2,y(i-1) h/2*k2)
            k4=f(x(i-1) h,y(i-1) h*k3)
            y(i)=y(i-1) h/6*(k1 2*k2 2*k3 k4)
        end do
    end subroutine Four_Order_Runge_Kutta
end module ODE

其中init艺术是用来早先化:

    subroutine init(x0_,y0_,a_,b_,h_)
        implicit none
        real :: x0_,y0_,a_,b_,h_
        x0=x0_
        y0=y0_
        a=a_
        b=b_
        h=h_
        n=int((b-a)/h)
        allocate(x(0:n),y(0:n))
        x=(/ (a i*h,i=0,n) /)
        y=0
        y(0)=y0
    end subroutine init

analytic_solution是数值解:

    function analytic_solution(x) result(f)
        implicit none
        real :: f,x
        f=3.0/(1 x*x*x)
    end function

不是广告,小编只是认为此番大家合营社的文案不错
云顶娱乐 3

Basic Euler Method

流程图:

云顶娱乐 4

原理:
![][3]
[3]: http://latex.codecogs.com/gif.latex?begin{cases} y(x_{n 1})=y(x_n) hf(x_n,y(x_n)) O(h^2) y(x_0)=y_0 end{cases}

代码:

    subroutine Basic_Euler()
        implicit none
        do i=1,n
            y(i)=y(i-1) h*f(x(i-1),y(i-1))
        end do
    end subroutine Basic_Euler

出口结果:

云顶娱乐 5

Basic Euler 方法

图例:

云顶娱乐 6

分裂h每步迭代结果

Improved Euler Method

流程图:

云顶娱乐 7

原理:
![][4]
[4]: http://latex.codecogs.com/gif.latex?begin{cases} bar y_{n 1}=y_n hf(x_n,y_n) y(x_{n 1})=y(x_n) dfrac{h}{2}[f(x_n,y(x_n)) f(x_{n 1},bar y_{n 1})] O(h^2) y(x_云顶娱乐,0)=y_0 end{cases}

代码:

    subroutine Improved_Euler()
        implicit none
        real :: y_
        do i=1,n
            y_=y(i-1) h*f(x(i-1),y(i-1))
            y(i)=y(i-1) h/2*(f(x(i-1),y(i-1)) f(x(i),y_))
        end do
    end subroutine Improved_Euler

出口结果:

云顶娱乐 8

Improved Euler 方法

图例:

云顶娱乐 9

不相同h每步迭代结果

Four Order Runge-Kutta Method

流程图:

云顶娱乐 10

原理:
![][5]
[5]: http://latex.codecogs.com/gif.latex?begin{cases} y_{n 1}=y_n dfrac{h}{6}(K_1 2K_2 2K_3 K_4) K_1=f(x_n,y_n) K_2=f(x_n dfrac{h}{2},y_n dfrac{h}{2}K_1) K_3=f(x_n dfrac{h}{2},y_n dfrac{h}{2}K_2) K_4=f(x_n h,y_n hK_3) end{cases}

代码:

    subroutine Four_Order_Runge_Kutta()
        implicit none
        real :: k1,k2,k3,k4
        do i=1,n
            k1=f(x(i-1),y(i-1))
            k2=f(x(i-1) h/2,y(i-1) h/2*k1)
            k3=f(x(i-1) h/2,y(i-1) h/2*k2)
            k4=f(x(i-1) h,y(i-1) h*k3)
            y(i)=y(i-1) h/6*(k1 2*k2 2*k3 k4)
        end do
    end subroutine Four_Order_Runge_Kutta

输出结果:

云顶娱乐 11

4 Order Runge-Kutta 方法

图例:

云顶娱乐 12

不一样h每步迭代结果

三种艺术结果相比较

云顶娱乐 13

h=0.1时

云顶娱乐 14

h=0.1/8时

能够见到,当h异常的大时,三种艺术的歧异如故十分的大的,当h慢慢减小时,三种格局的结果已基本同样。

本文由云顶娱乐发布于娱乐,转载请注明出处:求解ODE方程的关键方法写在ODE模块中,n曹泽熙

TAG标签: 云顶娱乐
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。