ZKX's LAB

用C#编写一段代码,实现欧拉格式和龙格库塔格式。这里有一段C语言的代码,怎么改写成C#? 龙格库塔与欧拉法的优缺点

2020-07-26知识13

三阶_龙格-库塔公式 详细推导过程 最低0.27元开通文库会员,查看完整内容>;原发布者:jiwen2001a作者2113最近在学习《数值分析》这门课程5261时,发现多数教材只以二4102阶二段龙格库塔(R-K)公式为例进行推1653导,对于三四阶R-K公式只是简单一提,便给出结论。作者查了一些资料,都未找到三阶R-K公式的详细推导过程。于是饶有兴致地尝试推导,功夫不负有心人,终于有所收获,特与大家分享。作者以30岁的年龄、18岁的心态,终得此成果,很欣慰。R-K公式应用广泛,是一种高精度的单步法,读者在阅读本文之前,应该已经了解R-K方法,并已熟悉二阶二段龙格库塔(R-K)公式的推导过程。主要参考资料:同济大学出版社:《高等数学》、《数值分析基础》。三阶R-K公式如下:其中:将k2按二元函数在处按Taylor公式展开,()然后k3作类似的处理(注意:将其中的k2用上式代替,并注意略去导致最终展开式中的O(h4)项):将上述公式带入总公式即可,读者可自己尝试,此处不再赘述。然后再与y(xn+1)在点xn处的泰勒展开式(如下)比较使对应项的系数相等,聪明的你经过简单分析即可得到:这是8个未知数6个方程的方程组,解不唯一。哪位大哥能帮我找到关于“龙格库塔方法”方面的文字说明啊?越详细越好。 龙格-库塔(Runge-Kutta)法到目前为止,我们已经学习了多步法,例如:亚当斯-巴什福思(AdamsBashorth)法,亚当斯-莫尔顿(Adams-Monlton)法,都是常微分方程的积分方法。它们需要在每一次迭代时重新计算一遍等式右边的结果(非线性隐含问题忽略计算多个 f(ω)值的可能性)龙格-库塔(Runge-Kutta)法是一种不同的处理,作为多级方法为人们所知。它要求对于一个简单的校正计算多个 f 的值。下面,我们列出了 3 种最流行的龙格-库塔(Runge-Kutta)法:改进的欧拉方法(精度:p=2):V a=V n+Δtf(V n,tn)2Δt)二阶格式V n+1=V n+Δtf(V a,tn+2Hevn’s 方法(p=2):这是另一种二阶格式:V a=V n+Δtf(V n,tn)V n=V n+1 Δt[f(V n,tn)+f(V a,tn+Δt)]2注意:f(Vn,tn)在运算中应该只被计算一次。四次龙格-库塔(Runge-Kutta)法(p=4):这是一个 4 阶格式。这次我们写的形式有点不同:a=Δtf(V n,tn)b=Δtf(V n+1 a,tn+12 2 Δt)c=Δtf(V n+1 b,tn+Δt)12 2d=Δtf(V n+c,tn+Δt)V n=V n+1 1(a+2b+2c+d)。6分别用 欧拉法 和 四阶龙格-库塔法 解微分方程 f=inline('x*y','x','y');微分2113方程的右边项dx=0.05;x方向步长xleft=0;区域的左5261边界4102xright=3;区域的右边界xx=xleft:dx:xright;一系列离散的点n=length(xx);点的个数y0=1;(1)欧拉法Euler=y0;for i=2:nEuler(i)=Euler(i-1)+dx*f(xx(i-1),Euler(i-1));end(2)龙格1653库塔法RK=y0;for i=2:nk1=f(xx(i-1),RK(i-1));k2=f(xx(i-1)+dx/2,RK(i-1)+k1*dx/2);k3=f(xx(i-1)+dx/2,RK(i-1)+k2*dx/2);k4=f(xx(i-1)+dx,RK(i-1)+k3*dx);RK(i)=RK(i-1)+dx*(k1+2*k2+2*k3+k4)/6;endEuler和Rk法结果比较plot(xx,Euler,xx,RK)hold on精确解用作图syms xrightsolve=dsolve('Dy=x*y','y(0)=1','x');求出解析解rightdata=subs(rightsolve,xx);将xx代入解析解,得到解析解对应的数值plot(xx,rightdata,'r*')legend('Euler','Runge-Kutta','analytic')

qrcode
访问手机版