许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  欧拉算法入门,数学和仿真里的欧拉法到底咋用

欧拉算法入门,数学和仿真里的欧拉法到底咋用

阅读数 3
点赞 0
article_banner


在计算固体力学中多用Lagrange 列式,计算流体力学用Euler列式,但在解决流体-固体耦合问题时需要一种将两种方法的优点结合起来的算法,即Arbitrary Lagrange-Euler算法,简称为ALE算法。ALE最早是为了解决流体动力学问题而引入的,并使用有限差分方法。Donea,Belytschko等人分别将ALE法引入有限元当中,用于求解流体于结构相互作用问题。Hughes等人建立了ALE描述的运动学理论,并使用有限元法解决了粘性不可压缩流体和自由表面流动问题。随着ALE技术的不断完善,一些专业计算软件开始加入ALE功能,LS—Dyna是目前具有较成熟的ALE算法的大型通用有限元程序,程序中最先采用简化ALE,后来发展到多物质ALE,其应用领域主要是流固耦合方面的计算。

欧拉算法

微分方程的本质特征是方程中含有导数项,数值解法的第一步就是设法消除其导数值,这个过程称为离散化。实现离散化的基本途径是用向前差商来近似代替导数,这就是欧拉算法实现的依据。欧拉(Euler)算法是数值求解中最基本、最简单的方法,但其求解精度较低,一般不在工程中单独进行运算。所谓数值求解,就是求问题的解y(x)在一系列点上的值y(xi)的近似值yi。对于常微分方程:

dy/dx=f(x,y),x∈[a,b]

y(a)=y0

可以将区间[a,b]分成n段,那么方程在第xi点有y'(xi)=f(xi,y(xi)),再用向前差商近似代替导数则为:(y(xi+1)-y(xi))/h= f(xi,y(xi)),在这里,h是步长,即相邻两个结点间的距离。因此可以根据xi点和yi点的数值计算出yi+1来:

yi+1= yi+h*f(xi ,yi),i=0,1,2,L

这就是欧拉格式,若初值yi+1是已知的,则可依据上式逐步算出数值解y1,y2,L。

为简化分析,人们常在yi为准确即yi=y(xi)的前提下估计误差y(xi+1)-yi+1,这种误差称为局部截断误差。

如果一种数值方法的局部截断误差为O(h^p+1),则称它的精度是p阶的,或称之为p阶方法。欧拉格式的局部截断误差为O(h^2),由此可知欧拉格式仅为一阶方法。

欧拉公式:

y(xi+1)=yi+h*f(xi,yi)

且xi=x0+i*h (i=0,1,2,…,n-1)

局部截断误差是O(h^2)

欧拉算法入门

改进的欧拉算法

先用欧拉法求得一个初步的近似值,称为预报值,然后用它替代梯形法右端的yi+1再直接计算fi+1,得到校正值yi+1,这样建立的预报-校正系统称为改进的欧拉格式:

预报值 y~i+1=yi+1 + h*f(xi,yi)

校正值 yi+1 =yi+(h/2)*[f(xi,yi)+f(xi+1,y~i+1)]

它有下列平均化形式:

yp=yi+h*f(xi,yi)

且 yc=yi+h*f(xi+1,yp)

且 yi+1=(xp+yc)/2

它的局部截断误差为O(h^3),可见,改进欧拉格式较欧拉格式提高了精度,其截断误差比欧拉格式提高了一阶。

注:欧拉法用差商 [y(xi+1)-y(xi)]/h 近似代替y(xi)的导数,局部截断误差较大;改进欧拉法先用欧拉法求出预报值,再利用梯形公式求出校正值,局部截断误差比欧拉法低了一阶,较大程度地提高了计算精度。

改进欧拉算法的c++代码如下:

#include<iostream.h> #define N 20

void ModEuler(float (*f1)(float,float),float x0,float y0,float xn,int n) { int i; float yp,yc,x=x0,y=y0,h=(xn-x0)/n; cout<<&#34;x[0]=&#​34;<<x<<&#39;t&#​39;<<&#34;y[0]&#​34;<<y<<endl; for(i=1;i<=n;i++) {   yp=y+h*f1(x,y);    x=x0+i*h;   yc=y+h*f1(x,yp);   y=(yp+yc)/2.0;   cout<<&#34;x[&#​34;<<i<<&#34;]=&#​34;<<x<<&#34;   y[&#​34;<<i<<&#34;]=&#​34;<<y<<endl; } } void main() {

float xn=5.0,x0=0.0,y0=2.0; float f1(float ,float); ModEuler(f1,x0,y0,xn,N); } float f1(float x,float y) { return -x*y*y; }


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空