常微分方程算法之编程示例四(龙格-库塔法)

news2024/11/15 23:48:16

目录

一、算例一

1.1 研究问题        

1.2 C++代码

 1.3 计算结果

二、算例二

2.1 研究问题

2.2 C++代码

 2.3 计算结果


一、算例一

        本节我们采用龙格-库塔法(Runge-Kutta法)求解算例。

        龙格-库塔法的原理及推导请参考:

常微分方程算法之龙格-库塔法(Runge-Kutta法)_龙格库塔法-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/L_peanut/article/details/137336203?spm=1001.2014.3001.5501

1.1 研究问题        

        研究问题依然为

\left\{\begin{matrix} \frac{dy}{dx}=y-\frac{2x}{y},0<x\leqslant 1,\\ y(0)=1 \end{matrix}\right.

取步长为0.1。已知精确解为y=\sqrt{1+2x}

1.2 C++代码


#include <cmath>
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char *argv[])
{
        int i,N;
        double a,b,x0,x1,y0,y1,yexact,h,err,k1,k2,k3,k4;
        double f(double x, double y);
        double exact(double x);

        a=0.0;
        b=1.0;
        N=10;
        h=(b-a)/N;

        x0=a;
        y0=1.0;
        i=1;
        do
        {
                x1=x0+h;
                k1=h*f(x0,y0);
                k2=h*f(x0+0.5*h,y0+0.5*k1);
                k3=h*f(x0+0.5*h,y0+0.5*k2);
                k4=h*f(x1,y0+k3);
                y1=y0+(k1+2*k2+2*k3+k4)/6.0;

                yexact=exact(x1);
                err=fabs(yexact-y1);
                printf("x=%.2f, y=%f, exact=%f, error=%f.\n",x1,y1,yexact,err);
                
                i++;
                x0=x1;
                y0=y1;
        }while(i<=N);

        return 0;
}



double f(double x, double y)
{
        return y-2*x/y;
}
double exact(double x)
{
        return sqrt(1+2.0*x);
}

 1.3 计算结果

x=0.10, y=1.095446, exact=1.095445, error=0.000000.
x=0.20, y=1.183217, exact=1.183216, error=0.000001.
x=0.30, y=1.264912, exact=1.264911, error=0.000001.
x=0.40, y=1.341642, exact=1.341641, error=0.000002.
x=0.50, y=1.414216, exact=1.414214, error=0.000002.
x=0.60, y=1.483242, exact=1.483240, error=0.000003.
x=0.70, y=1.549196, exact=1.549193, error=0.000003.
x=0.80, y=1.612455, exact=1.612452, error=0.000004.
x=0.90, y=1.673325, exact=1.673320, error=0.000005.
x=1.00, y=1.732056, exact=1.732051, error=0.000006.

        与相同条件下的欧拉法、梯形法、预估-校正法计算结果相比:

++++++++++++++++++++++++++欧拉法+++++++++++++++++++++++++
x[1]=0.1000, y[1]=1.100000, exact=1.095445, err=0.004555.
x[2]=0.2000, y[2]=1.191818, exact=1.183216, err=0.008602.
x[3]=0.3000, y[3]=1.277438, exact=1.264911, err=0.012527.
x[4]=0.4000, y[4]=1.358213, exact=1.341641, err=0.016572.
x[5]=0.5000, y[5]=1.435133, exact=1.414214, err=0.020919.
x[6]=0.6000, y[6]=1.508966, exact=1.483240, err=0.025727.
x[7]=0.7000, y[7]=1.580338, exact=1.549193, err=0.031145.
x[8]=0.8000, y[8]=1.649783, exact=1.612452, err=0.037332.
x[9]=0.9000, y[9]=1.717779, exact=1.673320, err=0.044459.
x[10]=1.0000, y[10]=1.784771, exact=1.732051, err=0.052720.

+++++++++++++++++++++++++梯形法++++++++++++++++++++++++++
x[1]=0.1000, y[1]=1.095657, exact=1.095445, err=0.000212.
x[2]=0.2000, y[2]=1.183596, exact=1.183216, err=0.000380.
x[3]=0.3000, y[3]=1.265444, exact=1.264911, err=0.000532.
x[4]=0.4000, y[4]=1.342327, exact=1.341641, err=0.000686.
x[5]=0.5000, y[5]=1.415064, exact=1.414214, err=0.000850.
x[6]=0.6000, y[6]=1.484274, exact=1.483240, err=0.001034.
x[7]=0.7000, y[7]=1.550437, exact=1.549193, err=0.001244.
x[8]=0.8000, y[8]=1.613948, exact=1.612452, err=0.001496.
x[9]=0.9000, y[9]=1.675112, exact=1.673320, err=0.001792.
x[10]=1.0000, y[10]=1.734192, exact=1.732051, err=0.002141.

+++++++++++++++++++++++预估-校正法+++++++++++++++++++++++
x[1]=0.1000, y[1]=1.095909, exact=1.095445, err=0.000464.
x[2]=0.2000, y[2]=1.184097, exact=1.183216, err=0.000881.
x[3]=0.3000, y[3]=1.266201, exact=1.264911, err=0.001290.
x[4]=0.4000, y[4]=1.343360, exact=1.341641, err=0.001719.
x[5]=0.5000, y[5]=1.416402, exact=1.414214, err=0.002188.
x[6]=0.6000, y[6]=1.485956, exact=1.483240, err=0.002716.
x[7]=0.7000, y[7]=1.552514, exact=1.549193, err=0.003321.
x[8]=0.8000, y[8]=1.616475, exact=1.612452, err=0.004023.
x[9]=0.9000, y[9]=1.678166, exact=1.673320, err=0.004846.
x[10]=1.0000, y[10]=1.737867, exact=1.732051, err=0.005817.

        相比之下,四阶龙格-库塔法计算结果精度最高,但是计算量较大。

二、算例二

2.1 研究问题

        研究问题为

\left\{\begin{matrix} y^{'}=x^{2}-y,0<x\leqslant 1,\\ y(0)=1 \end{matrix}\right.

取步长为0.25。已知精确解为y=x^{2}-2x+2-e^{-x}

2.2 C++代码


#include <cmath>
#include <stdlib.h>
#include <stdio.h>


int main(int argc, char *argv[])
{
        int i,N;
        double a,b,x0,x1,y0,y1,yexact,h,err,k1,k2,k3,k4;
        double f(double x, double y);
        double exact(double x);

        a=0.0;
        b=1.0;
        N=4;
        h=(b-a)/N;

        x0=a;
        y0=1.0;
        i=1;
        do
        {
                x1=x0+h;
                k1=h*f(x0,y0);
                k2=h*f(x0+0.5*h,y0+0.5*k1);
                k3=h*f(x0+0.5*h,y0+0.5*k2);
                k4=h*f(x1,y0+k3);
                y1=y0+(k1+2*k2+2*k3+k4)/6.0;

                yexact=exact(x1);
                err=fabs(yexact-y1);
                printf("x=%.2f, y=%.8f, exact=%f, error=%.4e.\n",x1,y1,yexact,err);
                
                i++;
                x0=x1;
                y0=y1;
        }while(i<=N);

        return 0;
}



double f(double x, double y)
{
        return x*x-y;
}
double exact(double x)
{
        return x*x-2*x+2-exp(-x);
}

 2.3 计算结果

x=0.25, y=0.78371175, exact=0.783699, error=1.2534e-05.
x=0.50, y=0.64349336, exact=0.643469, error=2.4024e-05.
x=0.75, y=0.59016776, exact=0.590133, error=3.4318e-05.
x=1.00, y=0.63216394, exact=0.632121, error=4.3382e-05.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

钡铼BL101网关6串口Modbus转MQTT优化智慧园区设备互联

BL101网关&#xff1a;优化智慧园区设备互联的关键利器 在当今快速发展的智能化时代&#xff0c;智慧园区管理对于设备之间的高效互联至关重要。钡铼&#xff08;BL101&#xff09;网关作为一款功能强大的Modbus转MQTT设备&#xff0c;不仅支持多种通信协议和硬件接口&#xf…

安帝康生物完成超2亿元A轮融资,持续深耕呼吸感染和疼痛领域创新药研发

日前&#xff0c;嘉兴安帝康生物科技有限公司&#xff08;下称“安帝康生物”&#xff09;正式宣布完成超2亿元A轮融资&#xff0c;由先声药业&#xff08;02096.HK&#xff09;、华金投资与华金大道联合领投&#xff0c;老股东同创伟业、嘉兴新创创投持续加投&#xff0c;嘉睿…

【CVPR2024】Bootstrapping Autonomous Radars with Self-Supervised Learning

原文链接&#xff1a;https://arxiv.org/abs/2312.04519 简介&#xff1a;自动驾驶中的雷达可以在极端天气下进行感知&#xff0c;但相关模型的训练受到标注困难的阻碍。本文提出自监督框架&#xff0c;利用大量无标注雷达数据预训练雷达表达。方法包括雷达到雷达的、以及雷达到…

适用于不同场合的高频俄语祝福语,柯桥零基础俄语培训

Приятного аппетита. Кушайте на здоровье. (говорят те, кто подает еду на стол, обычно это хозяйка дома, квартиры, или официант в кафе, ресторане…

论文辅导 | 基于贝叶斯优化LSTM的锂电池健康状态评估方法

辅导文章 模型描述 在传统的 LSTM 神经网络中,超参数的取值对模型性能有很大影响,但人工调参很难得到最优解。 因此,本文加入了 BO 来迭代出最优超参数。 在利用LSTM 神经网络评估锂电池 SoH 的基础上,通过 BO来提高评估的精确度。 预测效果

`THREE.PointsMaterial` 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性,比如颜色、大小和透明度。

demo案例 THREE.PointsMaterial 是 Three.js 中用于创建粒子系统材质的类。它允许你设置粒子系统的外观属性&#xff0c;比如颜色、大小和透明度。下面是对其构造函数的参数、属性和方法的详细讲解。 构造函数 const material new THREE.PointsMaterial(parameters);参数&am…

sourceTree 和Tortoise git软件的对比,以及使用sourceTree管理公司托管的 gitlab 项目或github项目

文章目录 Tortoisegit 和sourcetree的比较如何添加 gitlab 的社区版账号总结参考资料 Tortoisegit 和sourcetree的比较 我在 window都是用 Git 小乌龟&#xff08;Tortoise git&#xff09;来可视化管理 Git 项目。这时是不区分 Git 平台的&#xff0c;也就是不管你用的是 Git…

第4讲:pixi.js绘制舞台、随窗口大小而改变画布大小和舞台位置

基于前面写的代码&#xff0c;在gamelets的工程目录下新建一个CanvasAndStage.ts 代码如下 import {Application, Graphics} from pixi.js; // 不要忘了&#xff0c;一定要引用这个css样式&#xff0c;否则就会以默认样式显示 import ./style.css // app.view就是画布&#xf…

宝塔面板部署前端项目

部署前端项目 1 打包自己的项目2 登录宝塔面板3 添加站点4 设置域名5 进入当前站点对应的文件目录中6 上传打包后的文件7 访问网站 1 打包自己的项目 2 登录宝塔面板 点击左侧“网站”菜单进入对应页面 点击“添加站点” 3 添加站点 填写域名&#xff0c;如果没有域名的&am…

公交行业系统特点及面临的挑战

在当前城市发展中&#xff0c;公交行业作为公共交通的重要组成部分&#xff0c;承担着重要的社会责任。随着科技的进步和城市化进程的加快&#xff0c;公交行业系统也在不断地发展和完善。然而&#xff0c;从目前的发展情况来看&#xff0c;公交行业系统也呈现出一些显著的特点…

jmeter乱码汇总

一、Web页面乱码 如果想让他显示中文可以按以下操作: 1、打开jmter配置文件 bin/jmeter.properties 2、修改配置文件&#xff0c;查找“sampleresult.default.encoding”将其改为utf8&#xff0c;注意要去掉“#”号 sampleresult.default.encodingutf-8 3、重启 jmeter 4、再次…

让TSN DDS运转起来——面向智能汽车的以太网测试解决方案

概述 作为OPEN联盟和AUTOSAR联盟的核心成员&#xff0c;经纬恒润多年来持续为国内外各大OEM和供应商提供车载以太网相关的咨询服务&#xff0c;涵盖TCP/IP、SOME/IP、DDS、诊断、TSN等前沿技术领域的设计和测试。同时&#xff0c;经纬恒润与行业内的合作伙伴紧密合作&#xff0…

Linux删除文件磁盘空间未释放解决办法

工作中经常遇到Linux系统磁盘空间不足&#xff0c;但是删除后较大的日志文件后&#xff0c;发现磁盘空间仍没有被释放。 解决思路 1、工作发现磁盘空间不足&#xff1b; 2、找到占用磁盘空间较大的文件进行删除&#xff1b; 3、删除文件后&#xff0c;查看磁盘空间使用情况…

Web Serial串口通信实现WEB浏览器读写M1卡

本示例使用的设备&#xff1a;RS232串口RFID NFC IC卡读写器可二次开发编程发卡器USB转COM-淘宝网 (taobao.com) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> &l…

第10章 启动过程组 (启动过程组的重点工作)

第10章 启动过程组 10.3启动过程组的重点工作&#xff0c;在第三版教材第362~364页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;项目启动会议 1、作用 标志着对项目经理责权的定义结果的正式公布&#xff0c;通常由项目经理负责组织和召开。2、目的 使项目各…

AI网络爬虫:下载m3u8视频文件

要下载m3u8视频文件&#xff0c;首先得找到m3u8地址&#xff0c;按下F12键&#xff0c;看网络-fetch/xhr,然后找网址中包括m3u8的地址&#xff0c;再预览或者看下相应 https://1304688195.vod2.myqcloud.com/9d058fb7vodtranscq1304688195/1194c6da1253642699220090018/video_1…

【阅读论文】-- IDmvis:面向1型糖尿病治疗决策支持的时序事件序列可视化

IDMVis: Temporal Event Sequence Visualization for Type 1 Diabetes Treatment Decision Support 摘要1 引言2 1 型糖尿病的背景3 相关工作3.1 时间事件序列可视化3.2 电子健康记录可视化3.3 1 型糖尿病可视化3.4 任务分析与抽象 4 数据抽象5 层次化任务抽象5.1 临床医生工作…

【IM 服务】新用户为什么刚注册就能收到通知?为什么能接收注册前的通知?

功能说明&#xff1a; 默认新注册的用户可以接收到注册前 7 天内的广播消息。您可以从控制台免费基础功能页面关闭该服务。 开通方式&#xff1a; 访问开发者后台 免费基础功能 1页面&#xff0c;确认应用名称与环境&#xff08;开发 /生产 &#xff09;正确无误后&#xff0c…

统一视频接入平台LntonCVS视频共享交换平台智慧景区运用方案

随着夏季的到来&#xff0c;各地景区迎来了大量游客&#xff0c;而景区管理面临的挑战也愈加严峻&#xff0c;尤其是安全问题显得格外突出。 视频监控在预防各类安全事故方面发挥着重要作用&#xff0c;不论是自然景区还是人文景区&#xff0c;都潜藏着诸多安全隐患&#xff0…

eslint 与 prettier 的一些常见的配置项(很详细)

目录 1、eslint 常见配置项&#xff08;语法规范&#xff09; 2、 prettier 常见的配置项&#xff08;格式规范&#xff09; 代码规范相关内容看小编的该文章&#xff0c;获取对你有更好的帮助 vsCode代码格式化&#xff08;理解eslint、vetur、prettier&#xff0c;实现格式…