当前位置: 首页 > news >正文

C#,数值计算,求解微分方程的预测校正法(修正欧拉法)算法与源代码

Leonhard Euler

1 微分方程

微分方程,是指含有未知函数及其导数的关系式。解微分方程就是找出未知函数。
微分方程是伴随着微积分学一起发展起来的。微积分学的奠基人Newton和Leibniz的著作中都处理过与微分方程有关的问题。微分方程的应用十分广泛,可以解决许多与导数有关的问题。物理中许多涉及变力的运动学、动力学问题,如空气的阻力为速度函数的落体运动等问题,很多可以用微分方程求解。此外,微分方程在化学、工程学、经济学和人口统计等领域都有应用。
数学领域对微分方程的研究着重在几个不同的面向,但大多数都是关心微分方程的解。只有少数简单的微分方程可以求得解析解。不过即使没有找到其解析解,仍然可以确认其解的部分性质。在无法求得解析解时,可以利用数值分析的方式,利用电脑来找到其数值解。 动力系统理论强调对于微分方程系统的量化分析,而许多数值方法可以计算微分方程的数值解,且有一定的准确度。
 

预估-校正法

对于给定的带有初始条件y(x0)=y0的微分方程dy/dx=f(x, y),用预测-校正法求近似解。
预估-校正法: 预估-校正法又称修正-欧拉法。
在欧拉方法中,在一个点绘制切线,并计算给定步长的斜率。
因此,这种方法对于线性函数效果最好,但是对于其他情况,仍然存在截断误差。
为了解决这个问题,引入了修正欧拉法。

3 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// 给定微分方程的一阶偏导方程
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public delegate double SDE_Equation(double x, double y);

    /// <summary>
    /// 求解微分方程的预测校正法或修正欧拉法
    /// </summary>
    public static partial class Algorithm_Gallery
    {
        public static SDE_Equation dydx = null;

        private static double Predict(double x, double y, double h)
        {
            double y1p = y + h * dydx(x, y);
            return y1p;
        }

        private static double Correct(double x, double y, double x1, double y1, double h)
        {
            double e = 0.00001;
            double y1c = y1;

            do
            {
                y1 = y1c;
                y1c = y + 0.5 * h * (dydx(x, y) + dydx(x1, y1));
            }
            while (Math.Abs(y1c - y1) > e);

            return y1c;
        }

        public static double DE_Modified_Euler_Solve(double x, double xn, double y, double h)
        {
            while (x < xn)
            {
                double x1 = x + h;
                double y1p = Predict(x, y, h);
                double y1c = Correct(x, y, x1, y1p, h);
                x = x1;
                y = y1c;
            }
            return y;
        }
    }
}

 POWER BY TRUFFER.CN

4 源代码

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{/// <summary>/// 给定微分方程的一阶偏导方程/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public delegate double SDE_Equation(double x, double y);/// <summary>/// 求解微分方程的预测校正法或修正欧拉法/// </summary>public static partial class Algorithm_Gallery{public static SDE_Equation dydx = null;private static double Predict(double x, double y, double h){double y1p = y + h * dydx(x, y);return y1p;}private static double Correct(double x, double y, double x1, double y1, double h){double e = 0.00001;double y1c = y1;do{y1 = y1c;y1c = y + 0.5 * h * (dydx(x, y) + dydx(x1, y1));}while (Math.Abs(y1c - y1) > e);return y1c;}public static double DE_Modified_Euler_Solve(double x, double xn, double y, double h){while (x < xn){double x1 = x + h;double y1p = Predict(x, y, h);double y1c = Correct(x, y, x1, y1p, h);x = x1;y = y1c;}return y;}}
}

相关文章:

  • 【论文翻译】结构化状态空间模型
  • 13【CPP】Hash(闭散列||开散列)
  • 软考笔记--软件架构风格
  • Matlab/Simulink验证MAB建模规范
  • Android布局优化之include、merge、ViewStub的使用,7年老Android一次坑爹的面试经历
  • 宠物的异味,用空气净化器可以解决吗?宠物空气净化器品牌推荐
  • 【C++】贪心算法
  • Redis是单线程还是多线程?
  • 代码随想录算法训练营第三十三天|LeetCode1005 K次取反后最大化的数组和 、LeetCode134 加油站、LeetCode135 分发糖果
  • 【vue/组件封装】封装一个带条件筛选的搜索框组件(多组条件思路、可多选)详细流程
  • Nginx 常用的基础配置(前端相关方面)
  • C# SwinV2 Stable Diffusion 提示词反推 Onnx Demo
  • 微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望
  • 网关kong记录接口处理请求和响应插件 tcp-log-with-body的安装
  • [python] dict类型变量写在文件中
  • CSS实用技巧
  • ES6 学习笔记(一)let,const和解构赋值
  • go append函数以及写入
  • Java到底能干嘛?
  • Making An Indicator With Pure CSS
  • Shell编程
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 搭建gitbook 和 访问权限认证
  • 分类模型——Logistics Regression
  • 经典排序算法及其 Java 实现
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 事件委托的小应用
  • 项目管理碎碎念系列之一:干系人管理
  • 一个项目push到多个远程Git仓库
  • 最简单的无缝轮播
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • scrapy中间件源码分析及常用中间件大全
  • # Java NIO(一)FileChannel
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define与typedef区别
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (接口自动化)Python3操作MySQL数据库
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET 反射的使用
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 生成二级域名
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET建议使用的大小写命名原则
  • @FeignClient注解,fallback和fallbackFactory
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • []串口通信 零星笔记
  • [20160807][系统设计的三次迭代]
  • [20161101]rman备份与数据文件变化7.txt
  • [20180224]expdp query 写法问题.txt
  • [20190113]四校联考