c语言 用欧拉方法与改进的欧拉方法求初值问题
用欧拉方法与改进的欧拉方法求初值问题dy/dx=(2x)/(3y^2)(dx比dy等于2x除以3倍的y的平方)y(0)=1在区间[0,1]上取步长h=0.1的数值解。要求...
用欧拉方法与改进的欧拉方法求初值问题dy/dx=(2x)/(3y^2)(dx比dy等于2x除以3倍的y的平方) y(0)=1
在区间[0,1]上取步长h=0.1的数值解。要求:显示各x值下(0、0.1、0.2… 0.9、1)两种方法计算的y值。
十万火急 求救啊!!!!!!!!! 展开
在区间[0,1]上取步长h=0.1的数值解。要求:显示各x值下(0、0.1、0.2… 0.9、1)两种方法计算的y值。
十万火急 求救啊!!!!!!!!! 展开
1个回答
展开全部
/*******************************************************
*Author :Wacs5
*Date :20090106(YYYY-MM-DD)
*Function :欧拉方法与改进的欧拉方法求常微分方程
*Describe
*用欧拉方法与改进的欧拉方法求初值问题dy/dx=(2x)/(3y^2)
* y(0)=1 ,在区间[0,1]上取步长h=0.1的数值解。
*要求:显示各x值下(0、0.1、0.2… 0.9、1)两种方法计算的y值。
*********************************************************/
#include <stdio.h>
#include <conio.h>
#include <math.h>
double f(double x,double y)
{
return 2*x/3/y/y;
}
int main()
{
int i;
double x,y,y0=1,dx=0.1;
double xx[11];
double euler[11],euler_2[11];
double temp;
double f(double x,double y);
for (i=0;i<11;i++)
xx[i]=i*dx;
euler[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
euler[i]=euler[i-1]+dx*f(x,euler[i-1]);
euler_2[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
{
temp=euler_2[i-1]+dx*f(x,euler_2[i-1]);
euler_2[i]=euler_2[i-1]+dx*(f(x,euler_2[i-1])+f(x+dx,temp))/2;
}
for (i=0,x=0;i<11;i++,x+=dx)
printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3));
getch();
}
最后一列是理论的解析解的值.
*Author :Wacs5
*Date :20090106(YYYY-MM-DD)
*Function :欧拉方法与改进的欧拉方法求常微分方程
*Describe
*用欧拉方法与改进的欧拉方法求初值问题dy/dx=(2x)/(3y^2)
* y(0)=1 ,在区间[0,1]上取步长h=0.1的数值解。
*要求:显示各x值下(0、0.1、0.2… 0.9、1)两种方法计算的y值。
*********************************************************/
#include <stdio.h>
#include <conio.h>
#include <math.h>
double f(double x,double y)
{
return 2*x/3/y/y;
}
int main()
{
int i;
double x,y,y0=1,dx=0.1;
double xx[11];
double euler[11],euler_2[11];
double temp;
double f(double x,double y);
for (i=0;i<11;i++)
xx[i]=i*dx;
euler[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
euler[i]=euler[i-1]+dx*f(x,euler[i-1]);
euler_2[0]=y0;
for (i=1,x=0;i<11;i++,x+=dx)
{
temp=euler_2[i-1]+dx*f(x,euler_2[i-1]);
euler_2[i]=euler_2[i-1]+dx*(f(x,euler_2[i-1])+f(x+dx,temp))/2;
}
for (i=0,x=0;i<11;i++,x+=dx)
printf("x=%lf\teluer=%lf\teuler_2=%lf\taccu=%lf\n",x,euler[i],euler_2[i],pow(1+x*x,1.0/3));
getch();
}
最后一列是理论的解析解的值.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
厦门鲎试剂生物科技股份有限公司
2023-08-01 广告
2023-08-01 广告
BG试验又称为G试验,是一种基于真菌细胞壁成分的血清学试验。BG试验检测的是真菌细胞壁中的葡聚糖成分。操作步骤如下:1. 左键单击【View】2. 左键单击【Residual Diagnostics】3. 左键单击【Series Corre...
点击进入详情页
本回答由厦门鲎试剂生物科技股份有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询