最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

数值分析C++实现用四阶龙格

IT圈 admin 4浏览 0评论

数值分析C++实现用四阶龙格

问题:用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。
算法描述
算法的程序框图:
具体算法:
(1)读取a,b,n,f
(2)计算步长h = (b-a)/n,x0=a,y0=f
(3)从i = 1开始每次i++,重复以下操作,直到i=n退出循环
3.1 计算x1=x0+h, k1 =f(x0,y0);k2=f(x0+h/2,y0+hk1 /2);
k3 =f(x0+h/2,y0+h
k2 /2);
K4=f(x0,y0+hk3);
y1=y0+ h
(k1+2k2+2k3+k4)/6
3.2打印x1,y3
3.3 x0=x1;y0 = y1;
源程序代码及运行结果截图

#include<iostream>
using namespace std;
/*
@param x :获取自变量x,y对应的函数值
*/
float getRugeKuttaFunction(float x, float y)
{return 0.0f - y;
}void  getRugeKuttaResult(float x0, float y0, float h, int n)
{for (int i = 0; i < n; i++){//计算k1的值float k1 = getRugeKuttaFunction(x0,y0);//计算k2的值float k2 =getRugeKuttaFunction(x0+0.5*h, y0+0.5*h*k1);//计算k3的值float k3 = getRugeKuttaFunction(x0 + 0.5*h, y0 + 0.5*h*k2);//计算k4的值float k4 = getRugeKuttaFunction(x0 + h, y0 + h*k3);float y = y0 + h / 6 * (k1+2*k2+2*k3+k4);//重新赋值进行迭代x0 = x0+h;y0 = y;cout << "x:" << x0 << "-----> y:" << y << endl;}
}
int main()
{//初始值x0float x0;//初始值y0float y0;//循环次数int n;//步长float h;/*测试数据*/getRugeKuttaResult(0, 1, 0.1f, 10);system("pause");return 0;
}

数值分析C++实现用四阶龙格

问题:用四阶龙格-库塔(Runge-Kutta)方法求解常微分方程初值问题。
算法描述
算法的程序框图:
具体算法:
(1)读取a,b,n,f
(2)计算步长h = (b-a)/n,x0=a,y0=f
(3)从i = 1开始每次i++,重复以下操作,直到i=n退出循环
3.1 计算x1=x0+h, k1 =f(x0,y0);k2=f(x0+h/2,y0+hk1 /2);
k3 =f(x0+h/2,y0+h
k2 /2);
K4=f(x0,y0+hk3);
y1=y0+ h
(k1+2k2+2k3+k4)/6
3.2打印x1,y3
3.3 x0=x1;y0 = y1;
源程序代码及运行结果截图

#include<iostream>
using namespace std;
/*
@param x :获取自变量x,y对应的函数值
*/
float getRugeKuttaFunction(float x, float y)
{return 0.0f - y;
}void  getRugeKuttaResult(float x0, float y0, float h, int n)
{for (int i = 0; i < n; i++){//计算k1的值float k1 = getRugeKuttaFunction(x0,y0);//计算k2的值float k2 =getRugeKuttaFunction(x0+0.5*h, y0+0.5*h*k1);//计算k3的值float k3 = getRugeKuttaFunction(x0 + 0.5*h, y0 + 0.5*h*k2);//计算k4的值float k4 = getRugeKuttaFunction(x0 + h, y0 + h*k3);float y = y0 + h / 6 * (k1+2*k2+2*k3+k4);//重新赋值进行迭代x0 = x0+h;y0 = y;cout << "x:" << x0 << "-----> y:" << y << endl;}
}
int main()
{//初始值x0float x0;//初始值y0float y0;//循环次数int n;//步长float h;/*测试数据*/getRugeKuttaResult(0, 1, 0.1f, 10);system("pause");return 0;
}

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论