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

Python017

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

欧拉法求解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("\nEnter x0,y0,h,xn: ") scanf("%f%f%f%f",&x0,&y0,&h,&t)*/

x=x0

y=y0

printf("\n x\t y\n")

while(x<=t){

k=h*fun(x,y)

y=y+k

x=x+h

printf("%0.3f\t%0.3f\n",x,y)

}return 0

}

代码截图

运行结果

代码截图+运行结果

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

int eular(int n)

{

int ret=1,i //定义变量

for(i=2i*i<=ni++) //从i=2开始循环,判定条件为i*i小于等于n,循环一次i增加1

if(n%i==0) //判定条件为n除以i的余数等于0

{

n/=i,ret*=i-1 //n=n/i,ret = ret*(i-1)

while(n%i==0) //当n除以i的余数等于0时执行下面的语句,否则跳过

n/=i,ret*=i

}

if(n>1) //如果n>1执行下面语句,否则跳过

ret*=n-1 //ret = ret*(n-1)

return ret

}

直接复制的百度百科的,没具体看是什么功能

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=y0fori=2:n Euler(i)=...