水惟善下能成海,山不争高自极天。

matlab的ode45函数是要在c++实现的目标

#include "stdafx.h"
#include "CalculateTools.h"CCalculateTools::CCalculateTools()
{
}CCalculateTools::~CCalculateTools()
{
}double CCalculateTools::function1(double x, double y)
{return x * y;
}double CCalculateTools::function2(double x, double y)
{return x * y;
}double  CCalculateTools::caculate_integration_2D(double ax, double bx, double ay, double by,double(*f)(double x, double y), int precision,double m)
{double lenx = bx - ax, leny = by - ay;double interval = 1.0 / precision;unsigned long Nx = lenx / interval, Ny = leny / interval;double result = 0;for (unsigned long i = 0; i < Nx; ++i){for (unsigned long j = 0; j < Ny; ++j) {result += f(ax + i * interval, ay + j * interval)*(interval*interval) / m;}}return result;
}#if WIP
void CCalculateTools::RK4(double(*f)(double t, double x, double y), double(*g)(double t, double x, double y), double initial[3], double h)
{double resu[2];double f1, f2, f3, f4, g1, g2, g3, g4, t0, x0, y0, x1, y1;t0 = initial[0]; x0 = initial[1]; y0 = initial[2];f1 = f(t0, x0, y0);                      g1 = g(t0, x0, y0);f2 = f(t0 + h / 2, x0 + h * f1 / 2, y0 + h * g1 / 2);   g2 = g(t0 + h / 2, x0 + h * f1 / 2, y0 + h * g1 / 2);f3 = f(t0 + h / 2, x0 + h * f2 / 2, y0 + h * g2 / 2);   g3 = g(t0 + h / 2, x0 + h * f2 / 2, y0 + h * g2 / 2);f4 = f(t0 + h, x0 + h * f3, y0 + h * g3);         g4 = g(t0 + h, x0 + h * f3, y0 + h * g3);x1 = x0 + h * (f1 + 2 * f2 + 2 * f3 + f4) / 6;         y1 = y0 + h * (g1 + 2 * g2 + 2 * g3 + g4) / 6;resu[0] = t0 + h; resu[1] = x1; resu[2] = y1;
}
#endifvoid CCalculateTools::RK4(double(*f)(double t, double x, double y, double W1, double S2, double T2),double(*g)(double t, double x, double y, double W2, double S3, double T3),double W1, double S2, double T2, double W2, double S3, double T3, double resu[3], double initial[3])
{double h = ((1.0 - 0) / 10.0); // 微分区间/个数step//double resu[2];double f1, f2, f3, f4, g1, g2, g3, g4, t0, x0, y0, x1, y1;t0 = initial[0]; x0 = initial[1]; y0 = initial[2];f1 = f(t0, x0, y0, W1, S2, T2);g1 = g(t0, x0, y0, W2, S3, T3);f2 = f(t0 + h / 2, x0 + h * f1 / 2, y0 + h * g1 / 2, W1, S2, T2);g2 = g(t0 + h / 2, x0 + h * f1 / 2, y0 + h * g1 / 2, W2, S3, T3);f3 = f(t0 + h / 2, x0 + h * f2 / 2, y0 + h * g2 / 2, W1, S2, T2);g3 = g(t0 + h / 2, x0 + h * f2 / 2, y0 + h * g2 / 2, W2, S3, T3);f4 = f(t0 + h, x0 + h * f3, y0 + h * g3, W1, S2, T2);g4 = g(t0 + h, x0 + h * f3, y0 + h * g3, W2, S3, T3);x1 = x0 + h * (f1 + 2 * f2 + 2 * f3 + f4) / 6;         y1 = y0 + h * (g1 + 2 * g2 + 2 * g3 + g4) / 6;resu[0] = t0 + h; resu[1] = x1; resu[2] = y1;
}static double f(double t, double x, double y, double W1, double S2, double T2)
{double dx;dx = x * (1 - x) * (W1 - (W1 + S2 - T2) * y);return(dx);
}static double g(double t, double x, double y, double W2, double S3, double T3)
{double dy;dy = y * (1 - y) * (W2 - (W2 + S3 - T3) * x);return(dy);
}void CCalculateTools::Calculation(double W1, double S2, double T2, double W2, double S3, double T3)
{double initial[3], resu[3];initial[0] = 0.0;initial[1] = 0.5;initial[2] = 0.5;W1 = 1.0;S2 = 1.0;T2 = 1.0; W2 = 1.0;S3 = 1.0;T3 = 1.0;double t, x, y;//double f(double t, double x, double y, double W1, double S2, double T2);  //行人通过的复制动态方程  x为行人通过概率,y为机动车通过概率//double g(double t, double x, double y, double W2, double S3, double T3);  //机动车通过的复制动态方程for (int i = 0; i < 10; i++){RK4(f, g, W1, S2, T2, W2, S3, T3, resu, initial);initial[0] = resu[0]; initial[1] = resu[1]; initial[2] = resu[2];}
}void CCalculateTools::Calculation(std::vector<double>& oust, double W1, double S2, double T2, double W2, double S3, double T3)
{double initial[3], resu[3];initial[0] = 1.0;initial[1] = 1.0;initial[2] = 0.0;W1 = 1.0;S2 = 1.0;T2 = 1.0;W2 = 1.0;S3 = 1.0;T3 = 1.0;double t, x, y;//double f(double t, double x, double y, double W1, double S2, double T2);  //行人通过的复制动态方程  x为行人通过概率,y为机动车通过概率//double g(double t, double x, double y, double W2, double S3, double T3);  //机动车通过的复制动态方程for (int i = 0; i < 100; i++){RK4(f, g, W1, S2, T2, W2, S3, T3, resu, initial);initial[0] = resu[0]; initial[1] = resu[1]; initial[2] = resu[2];}oust.push_back(resu[1]);oust.push_back(resu[2]);
}#if WIP
//定义微分方程组
/*----------------------------------------------------------------------+
* @method                    Kend                             12/25/2020
+----------------------------------------------------------------------*/
double CCalculateTools::f(double t, double x, double y)
{double dx;dx = x + 2 * y;return(dx);
}/*----------------------------------------------------------------------+
* @method                    Kend                             12/25/2020
+----------------------------------------------------------------------*/
double CCalculateTools::g(double t, double x, double y)
{double dy;dy = 3 * x + 2 * y;return(dy);
}
#endif/*----------------------------------------------------------------------+
* @method                    Kend                             12/25/2020
+----------------------------------------------------------------------*/
double CCalculateTools::fx(double x, double y, double W1, double S2, double T2)
{double dx;dx = x * (1 - x) * (W1 - (W1 + S2 - T2) * y);return(dx);
}/*----------------------------------------------------------------------+
* @method                    Kend                             12/25/2020
+----------------------------------------------------------------------*/
double CCalculateTools::CalOde(int nx, double W1, double S2, double T2)
{double p;double a = 0.0;double b = 1.0;double y0 = 1.0;double x[1000];double y[1000];double h = (b - a) / nx;x[0] = a;y[0] = y0;for (int i = 1; i < nx; i++){x[i] = x[i - 1] + h;double k1 = fx(x[i - 1], y[i - 1], W1, S2, T2);double k2 = fx(x[i - 1] + h / 2, y[i - 1] + h * k1 / 2.0, W1, S2, T2);double k3 = fx(x[i - 1] + h / 2, y[i - 1] + h * k2 / 2.0, W1, S2, T2);double k4 = fx(x[i - 1] + h, y[i - 1] + h * k3, W1, S2, T2);//y[i] = y[i - 1] + h * (k1 + 2 * k2 + 2 * k3 + k4) / 6.0;y[i] = h * (k1 + 2 * k2 + 2 * k3 + k4) / 6.0;p = y[i];}return p;
}

C++实现积分函数(第一章)相关推荐

  1. 《HeadFirst Python》第一章学习笔记

    对于Python初学者来说,舍得强烈推荐从<HeadFirst Python>开始读起,这本书当真做到了深入浅出,HeadFirst系列,本身亦是品质的保证.这本书舍得已在<Pyth ...

  2. python基础读后感_《python基础教程 》第一章 读书笔记

    python是一个简单强大的直译语言,它同样提供交互式编译环境,学起来还算有趣,在学习的过程中,同样体会了动态语言的直接与强大. 第一章 基础知识 一 运行python 在ubuntu终端输入 pyt ...

  3. c语言加速度积分得到速度_自编微积分教材-第一章 微积分漫谈(1)

    前言:儿子的学习,包括数学和科学.英语,一直是由学外语出身的老婆在辅导,今年初一暑假,7月初,儿子考上了深国交,看到A Level数学的课程,明年的数学课本就有微积分的内容了.我觉得很多微积分的课本, ...

  4. javascript进阶课程--第一章--函数

    javascript进阶课程--第一章--函数 学习要点 了解内存管理 掌握全局函数的使用 知识点 基本类型和引用类型 基本类型值有:undefined,NUll,Boolean,Number和Str ...

  5. r语言集合补集_【高中数学必修1研读】之一“第一章 集合与函数概念”

    第一章:集合与函数概念 [导入例子] "神舟"五号载人航天飞船离地面的距离随时间的变化而变化:上网费用随着上网时间的变化而变化:出国旅游人数日益增多:城市绿化面积不断扩大..... ...

  6. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  7. 数二第一章函数、极限、连续做题总结

    文章目录 前言 一.基础公式 1.常用麦克劳林公式(必记) 2.arctanx,x,tanx,sinx,arcsinx的爱恨情仇 3混杂错题警醒 二.不太会的题目类型 1.证明极限存在 1.夹逼定理 ...

  8. 第一章 Caché 函数大全 $ASCII 函数

    文章目录 第一章 Caché 函数大全 $ASCII 函数 大纲 参数 描述 参数 expression position 示例 注意 支持Unicode 代理对 相关函数 第一章 Caché 函数大 ...

  9. 专升本高数第一章试题_专升本高数——第一章 函数极限与连续性

    专升本高数--第一章 函数极限与连续性 专升本高数--第一章 函数,极限与连续性 参考相关公式请进入:专升本高数--常用公式总结大全[补充扩展] https://blog.csdn.net/liu17 ...

  10. 高等数学精讲01 第一章第一节 函数

    第一章 函数,极限,连续 概要: 函数:高等数学研究的主要对象 极限(重点难点):用来研究函数的工具,重要概念都是极限用来定义的,连续,导数,定积分 连续性:研究的第一个基本形态 第一节 函数 主要内 ...

最新文章

  1. 关于poll机制应用及驱动
  2. android 镜像 制作工具,手机rom只制作-镜像工厂app下载2.8安卓最新版-西西软件下载...
  3. MSB6006: “cmd.exe”已退出,代码为 3.
  4. 【STM32】待机唤醒程序示例
  5. Linux内核实现多路镜像流量聚合和复制
  6. 【OS学习笔记】五 VirtualBox的下载、安装和配置
  7. android 切换字体崩溃,androidx - 在Android 10 / Android Q上使用捆绑的ttf字体时崩溃 - 堆栈内存溢出...
  8. 极客猿网址导航源码V3.0开源版
  9. IEEE 1588 校时
  10. 计算机中的字体文件夹在哪,字体文件夹,教您怎么找字体文件夹
  11. Google Earth Engine(GEE)——使用在线的世界矢量边界作为研究区(国家和洲际),如何调用?
  12. 新书出版 |《数据库程序员面试笔试真题库》
  13. python flask http 接口开发
  14. 【渝粤题库】陕西师范大学200091 东方文学专题研究 作业
  15. java定义一个描述三角形的类_用java语言定义一个三角形类 Triangle ,
  16. LeetCode第9题 回文数(Palindrome Number)
  17. (三)AsyncTask
  18. 解一元三次方程方程问题细节探讨
  19. python 地址簿
  20. 英文网站针对google优化用阿里云dns好吗?

热门文章

  1. Dell神州网信版 Win10 忘记登陆密码
  2. 作业1:从产品经理人的角度规划项目
  3. java安全 加密解密!
  4. 软件测试面试题避雷(HR面试题)最常见的面试问题和技巧性答复
  5. SQL中round()函数、Ucase()、Lcase()、as的用法
  6. 关于网络性能的一些指标
  7. 2022企业电子邮件在哪里找,企业电子邮件系统哪个安全?
  8. 如何编写python函数_编写高质量的Python代码系列(二)之函数
  9. java自动红包_Java一个简单的红包生成算法
  10. java 弹幕 原理_Flutter 实现虎牙/斗鱼 弹幕效果