首页 > 编程语言 >常微分方程算法之编程示例一(欧拉法)

常微分方程算法之编程示例一(欧拉法)

时间:2024-06-22 18:32:10浏览次数:32  
标签:return err 示例 double 编程 include exact 欧拉

目录

一、研究问题

二、C++代码

三、计算结果


一、研究问题

        前面几节内容介绍了常微分方程有限差分格式的推导。为加强对本专栏知识的理解,从本节开始,我们补充一些具体算例及相应的编程。

        欧拉法的原理及推导请参考:

常微分方程算法之欧拉法(Euler)_欧拉公式求解微分方程-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/L_peanut/article/details/137268437?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,N;
        double a,b,h,y0,err,maxerr;
        double *x,*y;
        double f(double x, double y);
        double exact(double x);

        a=0.0;  //求解区域的左端点
        b=1.0;  //求解区域的右端点
        N=10;  //总的剖分数
        h=(b-a)/N;  //步长

        //动态分配长度为(N+1)的数组,存放节点坐标
        x=(double *)malloc(sizeof(double)*(N+1));
        for(i=0;i<=N;i++)
                x[i]=a+i*h;

        //动态分配长度为(N+1)的数组,存放对应节点的数值解
        y=(double*)malloc(sizeof(double)*(N+1));
        y0=1.0;  //初值
        y[0]=y0;  //初值

        maxerr=0.0;
        for(i=0;i<N;i++)
        {
                y[i+1]=y[i]+h*f(x[i],y[i]);  //欧拉法
                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.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.
The max error is 0.052720.

        从计算结果中可看出,欧拉法的计算误差还是比较大的。

标签:return,err,示例,double,编程,include,exact,欧拉
From: https://blog.csdn.net/L_peanut/article/details/139859785

相关文章

  • 编程书籍的枯燥真相:你也有同样的感受吗?
    讲动人的故事,写懂人的代码我得实话实说,你可能已经发现市面上的大部分编程入门书籍有些枯燥。这个问题的根源在于许多作者把本应该充满乐趣和吸引力的入门指南,写得就像一本沉闷的参考手册。这就好比把一本充满冒险和乐趣的旅行日记,写成了一本单调乏味的字典。我完全理解参......
  • JetBrains PhpStorm 2024 mac/win版:探索PHP之美,智慧编程新境界
    JetBrainsPhpStorm2024是一款卓越的PHP集成开发环境(IDE),专为满足现代PHP开发者的需求而精心打造。它凭借强大的功能和出色的性能,赢得了全球开发者的广泛赞誉。PhpStorm2024mac/win版获取PhpStorm2024提供了智能的代码编辑功能,包括自动补全、语法高亮、代码重构等,使得编写......
  • JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇
    JetBrainsPyCharm2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。JetBrainsPyCharm2024版获取PyCharm2024提供了丰富的代码编......
  • 哪些工作需要在Linux系统下进行编程
    在Linux环境下进行编程的工作涵盖了广泛的领域,从系统底层到应用层,从单一的脚本编写到复杂的应用和服务开发。以下是一些主要的职位,这些职位常常需要在Linux环境下进行编程:linux1.**系统管理员**:  -编写自动化脚本来管理服务器和网络设备。  -开发监控脚本和工具。......
  • Python网络爬虫的实现,要想学编程,首先的把爬虫学好!
    爬虫实现1.爬虫初步实现(1)我们爬取中国化工市场机械网,以下为相关代码演示importrequestsfrombs4importBeautifulSoupres=requests.get(addresses[i])res.encoding='GB18030'#通过修改编码方式为GB18030,兼容网站编码(gb2312)#这里的'html.parser......
  • java网络编程 , 网络编程 , Junit单元测试概念及使用方法详细介绍
    网络编程主要内容网络编程TCP通信Junit单元测试1网络编程1.1软件架构C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等两种架构各有优势,但......
  • java多线程编程问题以及解决办法
    java多线程编程问题以及解决办法  多线程编程虽然可以提高程序的性能和响应速度,但也带来了许多复杂的问题,如竞态条件、死锁、线程安全问题、内存一致性错误等。常用的解决方法包括使用同步机制(如synchronized和ReentrantLock)、线程池、volatile关键字、以及合适的线程间......
  • 01 Shell编程规范与变量
    1、Shell脚本概述在一些复杂的Linux维护工作中,大量的重复性的输入和交互操作不仅费力费时,而且容易出错,而编写一个恰到好处的Shell脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。Shell脚本是什么?简单的说,只要将平时使用的各种Linux命令按顺序保存......
  • 02 Shell编程之条件语句
    1、条件测试操作要使Shell脚本程序具备一定的智能,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等。注:Shell环境根据命令执行后的返回状态值......
  • Shell 编程之条件语句
    2.1条件测试操作Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。使用test测试命令时,包......