当前位置:首页 » 编程语言 » 隐式欧拉法C语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

隐式欧拉法C语言

发布时间: 2022-08-31 06:12:14

1. 用c语言编程欧拉法、梯形法、二级二阶R-K、三级三阶R-K、四级四阶R-K求解下列方程的数值解

欧拉法求解y'=-2y-4x, x0=0, y0=2, x<=1的求解如下:

#include<stdio.h>

/*solve ode: dy/dx = -2*y -4*x*/

float fun(float x,float y){

float f;

f=-2.0*y -4.0*x;

return f;

}

int main(){

float x0=0,y0=2.0,x,y,h=0.1,t=1.0,k;

/* printf(" Enter x0,y0,h,xn: "); scanf("%f%f%f%f",&x0,&y0,&h,&t);*/

x=x0;

y=y0;

printf(" x y ");

while(x<=t) {

k=h*fun(x,y);

y=y+k;

x=x+h;

printf("%0.3f %0.3f ",x,y);

}return 0;

}

代码截图+运行结果

(晚点我再来看后面的几小问)

2. c语言编程 用欧拉法和改进欧拉法(欧拉预估校正法)分别编程!急求,马上交作业!!对图片上的题解答

f=inline('x*y','x','y');%微分方程的右边项 dx=0.05;%x方向步长 xleft=0;%区域的左边界 xright=3;%区域的右边界 xx=xleft:dx:xright;%一系列离散的点 n=length(xx);%点的个数 y0=1; %%(1)欧拉法 Euler=y0; fori=2:n Euler(i)=...

3. 隐士 欧拉公式怎么写

分式里的欧拉公式
a^r/(a-b)(a-c)+b^r/(b-c)(b-a)+c^r/(c-a)(c-b)
当r=0,1时式子的值为0 当r=2时值为1
当r=3时值为a+b+c
e^ix=cosx+isinx,e是自然对数的底,i是虚数单位。它将三角函数的定义域扩大到复数,建立了三角函数和指数函数的关系,它在复变函数论里占有非常重要的地位。
e^ix=cosx+isinx的证明:
因为e^x=1+x/1!+x^2/2!+x^3/3!+x^4/4!+……
cos x=1-x^2/2!+x^4/4!-x^6/6!……
sin x=x-x^3/3!+x^5/5!-……
在e^x的展开式中把x换成±ix.(±i)^2=-1, (±i)^3=〒i, (±i)^4=1 ……(注意:其中”〒”表示”减加”)
e^±ix=1±x/1!-x^2/2!+x^3/3!〒x^4/4!……
=(1-x^2/2!+……)±i(x-x^3/3!……)
所以e^±ix=cosx±isinx
将公式里的x换成-x,得到:
e^-ix=cosx-isinx,然后采用两式相加减的方法得到:sinx=(e^ix-e^-ix)/(2i),cosx=(e^ix+e^-ix)/2.这两个也叫做欧拉公式。将e^ix=cosx+isinx中的x取作∏就得到:
e^iπ+1=0.这个恒等式也叫做欧拉公式
三角形中的欧拉公式
设R为三角形外接圆半径,r为内切圆半径,d为外心到内心的距离,则: d^2=R^2-2Rr
拓扑学里的欧拉公式
V+F-E=X(P),V是多面体P的顶点个数,F是多面体P的面数,E是多面体P的棱的条数,X(P)是多面体P的欧拉示性数。
如果P可以同胚于一个球面(可以通俗地理解为能吹胀而绷在一个球面上),那么X(P)=2,如果P同胚于一个接有h个环柄的球面,那么X(P)=2-2h。
X(P)叫做P的欧拉示性数,是拓扑不变量,就是无论再怎么经过拓扑变形也不会改变的量,是拓扑学研究的范围。
在多面体中的运用:
简单多面体的顶点数V、面数F及棱数E间有关系
V+F-E=2
这个公式叫欧拉公式
初等数论里的欧拉公式
欧拉φ函数:φ(n)是所有小于n的正整数里,和n互素的整数的个数。n是一个正整数。
欧拉证明了下面这个式子:
如果n的标准素因子分解式是p1^a1*p2^a2*……*pm^am,其中众pj(j=1,2,……,m)都是素数,而且两两不等。则有
φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)
利用容斥原理可以证明它。
此外还有很多着名定理都以欧拉的名字命名。
(6) 立体图形里的欧拉公式:
面数+顶点数—2=棱数

4. 对常微分方程初值问题,求隐式欧拉方法(图中的第四大题)

这个看起来,
是一个数学题,
实际上,
是一个脑筋急转弯,
需要脑筋急转弯的思路,
去所打。

5. 练习:用c语言编制欧拉法、梯形法和四阶R—K法算法程序,求解下面方程并将计算结果与解析解比较之。

这题量很大.

#include <math.h>
#include <stdio.h>
#include <conio.h>
/*
y'=y-2x/y(0<=x<=1)
y(0)=1问题补充:
步长0.1
*/
int main()
{
double dx=0.1;
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("%-4.2f\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-2*x/y;
}
double Explicit(double x)
{
/*令Z=y^2,原微分方程可写为:Z'-2*Z+4*x=0,为一阶非齐次常微分方程,代入公式以及初始条件,可得z=1+2*x,最后得y=sqrt(1+2*x)*/
return sqrt(1+2*x);
}

double Euler(double dx,double x,double y)
{
return dx*fun(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=dx*fun(x,y);
k2=dx*fun(x+dx_2,y+k1/2);
k3=dx*fun(x+dx_2,y+k2/2);
k4=dx*fun(x+dx,y+k3);
return (k1+2*k2+2*k3+k4)/6;
}

得到的结果:
x Euler Trapz Rk4 Explict
0.00 1.100000 1.095909 1.095446 1.095445
0.10 1.191818 1.184097 1.183217 1.183216
0.20 1.277438 1.266201 1.264912 1.264911
0.30 1.358213 1.343360 1.341642 1.341641
0.40 1.435133 1.416402 1.414216 1.414214
0.50 1.508966 1.485956 1.483242 1.483240
0.60 1.580338 1.552514 1.549196 1.549193
0.70 1.649783 1.616475 1.612455 1.612452
0.80 1.717779 1.678166 1.673325 1.673320
0.90 1.784771 1.737867 1.732056 1.732051
1.0 1.851189 1.795820 1.788861 1.788854
计算结果中,精度很明显就可以看出来.

6. 这是用matlab做的隐式欧拉法!但是程序提示倒数第二排函数没定义!怎么修改呢

lengthh(x)改成length(x), 别的没什么问题
如果feval这个函数调用的时候有问题, 把feval(dyfun,x,y)直接写成dyfun(x,y)