常微分方程算法之编程示例三(预估-校正法)

目录

一、研究问题

二、C++代码

三、计算结果


一、研究问题

        本节我们采用预估校正法(改进欧拉法)求解算例。

        预估-校正法的原理及推导请参考:

常微分方程算法之预估-校正法(改进Euler法)_、改进欧拉法-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/L_peanut/article/details/137326300?spm=1001.2014.3001.5501

        研究问题依然为

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

取步长为0.1。

二、C++代码


#include <cmath>
#include <stdlib.h>
#include <stdio.h>int main(int argc, char *argv[])
{int i,k,N;double a,b,h,y0,ypredict,err,maxerr;double *x,*y;double f(double x, double t);double exact(double x);a=0.0;  //求解区域左端点b=1.0;  //求解区域右端点N=10;   //总的剖分数h=(b-a)/N;  //步长x=(double *)malloc(sizeof(double)*(N+1));y=(double *)malloc(sizeof(double)*(N+1));for(i=0;i<=N;i++)x[i]=a+i*h;   //节点坐标y0=1.0;y[0]=y0;  //初值for(i=0;i<N;i++){ypredict=y[i]+h*f(x[i],y[i]);y[i+1]=y[i]+h*(f(x[i],y[i])+f(x[i+1],ypredict))/2.0;err=fabs(y[i+1]-exact(x[i+1]));  //计算节点处的误差printf("x[%d]=%.4f, y[%d]=%f, exact=%f, err=%f.\n",i+1,x[i+1],i+1,y[i+1],exact(x[i+1]),err);if(err>maxerr)maxerr=err;}printf("The max error is %f.\n",maxerr);return 0;
}//右端项函数
double f(double x, double y)
{return y-2*x/y;
}
//精确解
double exact(double x)
{return sqrt(1.0+2*x);
}

 三、计算结果

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.

        同样的算例,采用梯形法和欧拉法的计算结果误差为:

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

        可见虽然与梯形法相比,误差较大,但是可以在不增加计算量的前提条件下获得比欧拉法更小的误差。如果取步长为0.05,计算结果为:

x[1]=0.0500, y[1]=1.048869, exact=1.048809, err=0.000060.
x[2]=0.1000, y[2]=1.095561, exact=1.095445, err=0.000116.
x[3]=0.1500, y[3]=1.140345, exact=1.140175, err=0.000169.
x[4]=0.2000, y[4]=1.183437, exact=1.183216, err=0.000221.
x[5]=0.2500, y[5]=1.225017, exact=1.224745, err=0.000273.
x[6]=0.3000, y[6]=1.265236, exact=1.264911, err=0.000325.
x[7]=0.3500, y[7]=1.304219, exact=1.303840, err=0.000378.
x[8]=0.4000, y[8]=1.342075, exact=1.341641, err=0.000434.
x[9]=0.4500, y[9]=1.378897, exact=1.378405, err=0.000492.
x[10]=0.5000, y[10]=1.414767, exact=1.414214, err=0.000553.
x[11]=0.5500, y[11]=1.449756, exact=1.449138, err=0.000618.
x[12]=0.6000, y[12]=1.483927, exact=1.483240, err=0.000687.
x[13]=0.6500, y[13]=1.517337, exact=1.516575, err=0.000762.
x[14]=0.7000, y[14]=1.550035, exact=1.549193, err=0.000842.
x[15]=0.7500, y[15]=1.582067, exact=1.581139, err=0.000928.
x[16]=0.8000, y[16]=1.613472, exact=1.612452, err=0.001021.
x[17]=0.8500, y[17]=1.644289, exact=1.643168, err=0.001122.
x[18]=0.9000, y[18]=1.674551, exact=1.673320, err=0.001231.
x[19]=0.9500, y[19]=1.704288, exact=1.702939, err=0.001350.
x[20]=1.0000, y[20]=1.733530, exact=1.732051, err=0.001479.
The max error is 0.001479.

        可见缩小步长,可以取得较理想的计算结果。

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

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

相关文章

规则引擎-Aviator 表达式校验是否成立

目录 介绍特性使用更多文献支持 介绍 Aviator是一个轻量级、高性能的Java表达式执行引擎&#xff0c;它动态地将表达式编译成字节码并运行。 特性 支持绝大多数运算操作符&#xff0c;包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(~)、三元表达式(?:…

IDEA services模块无法启动springboot服务(添加了springboot但是为空白)

https://blog.csdn.net/m0_54042402/article/details/117918995 https://blog.csdn.net/qq_46550964/article/details/122235235 Alt8 显示services模块 发现有springboot启动模块&#xff0c;点一下springboot之后&#xff0c;这个模块就消失了 会自动在.idea文件夹下的work…

python一个key可以对应多个值, 字典

import collectionsmy_dict collections.defaultdict(list)my_dict[key1].append(value1) my_dict[key1].append(value2) my_dict[key2].append(value3) my_dict[key2].append(value4)

五十八、openlayers官网示例Map Graticule解析——给地图添加经纬度网格线

这篇没啥好说的&#xff0c;写出来完全是嘲笑一下自己蠢&#xff0c;以及&#xff0c;&#xff0c;&#xff0c;帮大家避个坑。。。。 之前一个项目需要展示这种经纬线&#xff0c;但是我不知道openlayers有这种图层&#xff0c;于是拿canvas画上去的。。。。 很好&#xff0c…

【嵌入式Linux】<总览> 多进程

文章目录 前言 一、进程的概念与结构 1. 相关概念 2. 内核区中的进程结构 3. 进程的状态 4. 获取进程ID函数 5. 进程组 6. 会话 二、进程创建 1. fork和vfork函数 2. 额外注意点 3. 构建进程链 4. 构建进程扇 三、进程终止 1. C程序的启动过程 2. 进程终止方式…

2024年无线领夹麦克风选购指南,领夹麦克风哪个品牌好

"领夹麦克风"这个名词对于大多数人可能还比较陌生&#xff0c;但在互联网专业人士和短视频制作者的世界里&#xff0c;它却是一个不可或缺的工具。如果你有志于成为短视频领域的创作者&#xff0c;或者想要参与视频拍摄、直播等多媒体内容的制作&#xff0c;那么了解…

计算机工具软件安装攻略:Chrome浏览器下载安装及使用

1 Chrome简介 Chrome是谷歌公司开发的一款免费网页浏览器它快速、稳定、安全拥有简洁流畅的界面和丰富的应用程序内置了强大的谷歌搜索引擎。Chrome使用Blink浏览器引擎和V8 JavaScript引擎支持多种插件和扩展程序让浏览网页更便捷。它可以与Android手机良好同步支持跨设备浏览…

写给弟弟高考报考碎碎念话痨的话

1.学校>专业&#xff0c;无论是学校的资源还是后面的升学与就业&#xff0c;保研升学什么的等等各方面工资水平就业补贴各个方面都是按档次来的&#xff0c;985>211>普本 2.城市略大于学校&#xff0c;优先考虑大城市&#xff0c;机会多的意思是&#xff0c;人才…

经典SM2密文转 ASN1/DER编码格式

最近在国四协议转发国家平台的事宜。新协议要求国四报文要以加密形式转发给国家平台。可以是国密4&#xff0c;国密2.如果使用国密2的时候&#xff0c;注意密文要使用ASN1/DER编码格式。于是我参考了以下几个链接的内容&#xff1a; 基于OpenSSL&#xff0c;实现SM2密文数据的…

Vue Router 导航守卫,多次执行的解决方案

Vue Router 是 Vue.js 官方提供的路由器,它用于处理单页应用(SPA)中的路由导航。在 Vue Router 中,导航守卫是非常重要的功能,它可以在路由跳转之前或之后执行一些特定的操作。但是,如果你不小心,导航守卫可能会多次执行,这可能会导致一些问题。本文将介绍如何避免导航…

cpu scheduling cpu调度

soft real-time Vs hard real-time scheduling Real-Time CPU Scheduling Can present obvious challengesSoft real-time systems – Critical real-time tasks have the highest priority, but no guarantee as to when tasks will be scheduledHard real-time systems – …

“Allegro评论管理:高效处理评价,提升顾客满意度”

波兰Allegro平台以其庞大的用户基础和丰富的商品种类&#xff0c;成为波兰乃至欧洲电商市场中的一颗璀璨明珠。如何高效管理和优化顾客评价&#xff0c;成为每个商家亟待解决的核心问题。正是基于这一背景&#xff0c;“无忧易售”——一款专注于Allegro评价管理的功能上线了&a…

【报错】在终端中输入repo命令后系统未能识别这个命令

1 报错 已经使用curl命令来下载repo工具,但是在终端中输入repo命令后系统未能识别这个命令。 2 分析 通常是因为repo

使用 Mac 数据恢复从 iPhoto 图库中恢复照片

我们每个人都会遇到这种情况&#xff1a;在意识到我们不想丢失照片之前&#xff0c;我们会永久删除 iPhoto 图库中的一些照片。永久删除这些照片后&#xff0c;是否可以从 iPhoto 图库中恢复照片&#xff1f;本文将指导您使用免费的 Mac 数据恢复软件从 iPhoto 中恢复照片。 i…

2024软件设计师笔记之考点版(一考就过):1-10

软件设计师之一考就过:成绩版 考点1:CPU、指令 真题1:CPU 执行算术运算或逻辑运算时,常将源操作数和结果暂存在(累加器(AC))中。 真题2:在程序的执行过程中,Cache与主存的地址映射是由(硬件自动)完成的。 真题3:计算机执行程序时,内存分为静态数据区、代码区、…

SQL Server 数据库分页技术详解:选择最佳方法优化查询性能”。

当今数据驱动的应用程序中&#xff0c;数据库分页技术在优化查询性能和提升用户体验中扮演着重要角色。在 SQL Server 环境下&#xff0c;开发者面对大数据集时&#xff0c;常常需要选择合适的分页方法以平衡功能需求和性能优化。本文将详细介绍 SQL Server 中几种主要的分页技…

【漏洞复现】华测监测预警系统——SQL注入漏洞

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 华测监测预警系统2.2版本存在sql注入&#xff0c;UserEdit接口S…

文华6声音预警公式-macd+kdj共振信号买卖点提示主图指标公式源码

文华6声音预警公式-macdkdj共振信号买卖点提示主图指标公式源码 指标公式逻辑&#xff1a; KDJC和MACDJC同时金叉时在K线的下面标记买字&#xff0c; KDSC和MACDSC同时死叉时候在K线上面标记卖字。 同时添加一下声音 指标公式源码&#xff1a; RSV:(CLOSE-LLV(LOW,9))/(H…

【华为OD机试B卷】解压报文、压缩报文还原(C++/Java/Python)

题目 题目描述 为了提升数据传输的效率,会对传输的报文进行压缩处理。输入一个压缩后的报文,请返回它解压后的原始报文。压缩规则:n[str],表示方括号内部的 str 正好重复 n 次。注意 n 为正整数(0 < n <= 100),str只包含小写英文字母,不考虑异常情况。输入描述 输…

零刻SER8 8845HS设置RAID磁盘阵列教程

SER8内置两个NVme硬盘位&#xff0c;支持硬盘RAID功能&#xff0c;目前支持以下几种RAID模式。 Volume&#xff08;卷&#xff09;&#xff1a;将多块硬盘拼接成一个大硬盘&#xff0c;也称为JBOD&#xff08;Just a Bunch Of Disks&#xff09;。它不要求硬盘容量相同&#xf…