代替导数。实现离散化的基本途径是用向前差商来近似代替导数,这就是欧拉算法实现的原理。欧拉(Euler)算法是数值求解中最基本、最简单的方法,但其求解精度较低,一般不在工程中单独进行运算。
matlab中没有内置MyEuler函数、MyEulerPro函数,是要根据Euler法的公式自己编写的。
MyEuler程序是用
欧拉法
来求解微分方程。此方法简单但精度要低一点。
这题量很大
#include <mathh>
#include <stdioh>
#include <conioh>
/
y'=y-2x/y(0<=x<=1)
y(0)=1问题补充:
步长01
/
int main()
{
double dx=01;
double x0=0,x1=1;
double y0=1;
double x,y,Ey,Ty,Ry;
double fun(double x,double y);
double Explicit(double x);
double Euler(double dx,double x,double y);
double Trapz(double dx,double x,double y);
double RK4(double dx,double x,double y);
Ey=Ty=Ry=y0;
printf("x\tEuler\t\tTrapz\t\tRk4\t\tExplict\n");
for (x=x0;x<x1;x+=dx)
{
Ey+=Euler(dx,x,Ey);
Ty+=Trapz(dx,x,Ty);
Ry+=RK4(dx,x,Ry);
y=Explicit(x+dx);
printf("%-42f\t%f\t%f\t%f\t%f\n",x,Ey,Ty,Ry,y);
}
getch();
return 0;
}
double fun(double x,double y)
{
return y-2x/y;
}
double Explicit(double x)
{
/令Z=y^2,原微分方程可写为:Z'-2Z+4x=0,为一阶非齐次常微分方程,代入公式以及初始条件,可得z=1+2x,最后得y=sqrt(1+2x)/
return sqrt(1+2x);
}
double Euler(double dx,double x,double y)
{
return dxfun(x,y);
}
double Trapz(double dx,double x,double y)
{
double dy=Euler(dx,x,y);
return (dy+Euler(dx,x+dx,y+dy))/2;
}
double RK4(double dx,double x,double y)
{
int i,j;
double dx_2=dx/2;
double k1,k2,k3,k4;
k1=dxfun(x,y);
k2=dxfun(x+dx_2,y+k1/2);
k3=dxfun(x+dx_2,y+k2/2);
k4=dxfun(x+dx,y+k3);
return (k1+2k2+2k3+k4)/6;
}
得到的结果:
x Euler Trapz Rk4 Explict
000 1100000 1095909 1095446 1095445
010 1191818 1184097 1183217 1183216
020 1277438 1266201 1264912 1264911
030 1358213 1343360 1341642 1341641
040 1435133 1416402 1414216 1414214
050 1508966 1485956 1483242 1483240
060 1580338 1552514 1549196 1549193
070 1649783 1616475 1612455 1612452
080 1717779 1678166 1673325 1673320
090 1784771 1737867 1732056 1732051
10 1851189 1795820 1788861 1788854
计算结果中,精度很明显就可以看出来
欧拉克罗默法的原理?用MATLAB实现用欧拉-克罗默法求解阻尼摆,且q=1dsolve1MATLAB求解函desolve('Dy = 2(1-001y)y','y(0) = 20','t') result1=dsolve('Dy=2(1-001y)y','y(0)=20','t') %符号型syms y(t) %数值型desolve(diff(y,t,1)==2(1-001y)y,y(0)==20) %diff(y,t,1)--->y关于t的一阶导数2欧拉法与修正(不能求解解析解的情况下,数值解)dy/dx = f(x,y) x>x0区间取定离散点(步长一定)取定步长: h,记 xn = x0 + nh, ( n = 1,2, ···, N ) 欧拉法是考察流体流动的一种方法。通常考察流体流动的方法有两种,即拉格朗日法和欧拉法。欧拉法(euler method)是以流体质点流经流场中各空间点的运动即以流场作为描述对象研究流动的方法——流场法。
以上就是关于欧拉离散化原理全部的内容,包括:欧拉离散化原理、请问matlab中有没有内置MyEuler函数、MyEulerPro函数还是需要自己写入这些、练习:用c语言编制欧拉法、梯形法和四阶R—K法算法程序,求解下面方程并将计算结果与解析解比较之。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)