求解常微分方程初值问题之多变量Runge_Kutta_Gill法

2024-06-06 15:38

本文主要是介绍求解常微分方程初值问题之多变量Runge_Kutta_Gill法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//用RKG法求解常微分方程组
#include <iostream>
#include <math.h>
#include <iomanip>
#include <fstream>

using namespace std;

class s_ode
{
private:
 int i, j, l, n;
 double a, b, c, d, h, x, x1, xi, xf;
 double *b1, *b2, *b3, *g, *y, *y1;

public:
 s_ode()
 {
  a = (sqrt(2.0) - 1) / 2;
  b = (2 - sqrt(2.0)) / 2;
  c = -sqrt(2.0) / 2;
  d = 1 + sqrt(2.0) / 2;
 }
 void func(double p, double *q, double *r)
 {
  r[0] = -0.08 * pow(q[0], 0.5) - 2 * pow(q[0], 0.2) * q[1];
  r[1] = -3.5e-6 * pow(q[0], 0.2) * q[1] + 1.6e-6 * pow(q[2], 0.3);
  r[2] = 2 * pow(q[0], 0.2) * q[1] - 0.16 * pow(q[2], 0.3);
 }
 void solution();
 ~s_ode()
 {
  delete[] b1, b2, b3, g, y, y1;
 }
};

void main()
{
 s_ode multivar;
 multivar.solution();
}

void s_ode::solution()
{
 n = 3;
 b1 = new double[n];
 b2 = new double[n];
 b3 = new double[n];
 g = new double[n];
 y = new double[n];
 y1 = new double[n];
 l = 1000;
 xi = 0.0;
 xf = 7.0;
 y[0] = 0.95;
 y[1] = 0.05;
 y[2] = 0.0;
 h = (xf - xi)/ l;
 x = xi;
 ofstream fout("simul_ode.txt");
 fout.precision(4);
 cout.precision(4);
 for (i = 0; i < l; i++)
 {
  for (j = 0; j < n; j++)
  {
   y1[j] = y[j];
  }
  x1 = x;
  func(x, y, g);
  for (j = 0; j < n; j++)
  {
   b1[j] = g[j];
   y[j] = y1[j] + h * g[j] / 2;
  }
  x = x1 + h / 2;
  func (x, y, g);
  for (j = 0; j < n; j++)
  {
   b2[j] = g[j];
   y[j] = y1[j] + h * (a * b1[j] + b * g[j]);
  }
  func(x, y, g);
  for (j = 0; j < n; j++)
  {
   b3[j] = g[j];
   y[j] = y1[j] + h * (c * b2[j] + d * g[j]);
  }
  x = x1 + h;
  func(x, y, g);
  for (j = 0; j < n; j++)
  {
   y[j] = y1[j] + h * (b1[j] + g[j] + 2 * (b * b2[j] + d * b3[j])) / 6;
  }
  fout << x << setw(10) << y[0] << setw(15) << y[1] << setw(15) << y[2] << endl;
  cout << x << setw(10) << y[0] << setw(15) << y[1] << setw(15) << y[2] << endl;
 }
 fout.close();
}

这篇关于求解常微分方程初值问题之多变量Runge_Kutta_Gill法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036527

相关文章

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

JS_变量

二、JS的变量 JS中的变量具有如下特征 1 弱类型变量,可以统一声明成var 2 var声明的变量可以再次声明 3 变量可以使用不同的数据类型多次赋值 4 JS的语句可以以; 结尾,也可以不用;结尾 5 变量标识符严格区分大小写 6 标识符的命名规则参照JAVA 7 如果使用了 一个没有声明的变量,那么运行时会报uncaught ReferenceError: *** is not de

使用条件变量实现线程同步:C++实战指南

使用条件变量实现线程同步:C++实战指南 在多线程编程中,线程同步是确保程序正确性和稳定性的关键。条件变量(condition variable)是一种强大的同步原语,用于在线程之间进行协调,避免数据竞争和死锁。本文将详细介绍如何在C++中使用条件变量实现线程同步,并提供完整的代码示例和详细的解释。 什么是条件变量? 条件变量是一种同步机制,允许线程在某个条件满足之前进入等待状态,并在条件满

axure之变量

一、设置我们的第一个变量 1、点击axure上方设置一个全局变量a = 3 2、加入按钮、文本框元件点击按钮文档框展示变量值。 交互选择【单击时】【设置文本】再点击函数。 点击插入变量和函数直接选择刚刚定义的全局变量,也可以直接手动写入函数(注意写入格式。) 这样点击按钮时就直接展示刚刚设置的全局变量3了。 2、更改变量值 在新建交互里点击设置变量值。 将a变量设置成等于10. 将新

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

shell脚本中变量中字符串替换的测试 /和//的区别

test_char=abbbcbbbf echo "bf:test_char = " $test_char test_char=${test_char/bbb/ddd} echo "af:test_char = " $test_char 输出: bf:test_char =  abbbcbbbf af:test_char =  adddcbbbf 只匹配第一个

eclipse中相同变量显示变色设置

java文件的设置"Window"-"preferences"-"Java"-"Editor"-"Mark Occurrences"复选框勾选 js文件的设  置"Window"-"preferences"-"web"-"javascript"-"Mark Occurrences"复选框勾选 。

Python学习1--变量和简单数据

经过这一段时间的学习,将Python相关的知识点记录下来,好记性不如烂笔头嘛。 本文主要参考了《Python编程从入门到实践》以及唐宇迪老师的教程《Python快速入门视频课程》,然后在博主http://www.cnblogs.com/liubinsh/p/6937409.html的基础上总结而成,特此感谢! 第二章 变量和简单数据类型 什么是变量 这里的message就是变量,

配置JAVA环境的时候,环境变量中administrator的用户变量和系统变量的区别?

迁移项目到新的服务器上: 需要Java运行环境时,经常要配置环境变量,如图所示 这里有administrator的用户变量(U),和系统变量(S), 那么,它们之间有什么区别呢? 简单的说,一个是当前用户使用,你用其它用户登陆,这个环境变量就不起作用了。 系统变量,是对所有用户都可使用的。 简单的说: 系统变量:不管以哪个用户名登陆到计算机都能使

不设临时变量交换a,b的值

常规的做法: int tmp = a; a = b; b = tmp; 不设中间变量的方法: a = a + b; b = a - b; a = a - b;