日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++实现经典四阶龙格库塔法解一阶微分方程

發(fā)布時(shí)間:2023/12/31 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++实现经典四阶龙格库塔法解一阶微分方程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法原理
用在幾個(gè)不同點(diǎn)的數(shù)值加權(quán)平均來(lái)代替的值,而使截?cái)嗾`差的階數(shù)盡可能高。我們用四個(gè)不同點(diǎn)上的函數(shù)值的線性組合,將精度提高到四階就可以得到四階龍格-庫(kù)塔公式。四階龍格-庫(kù)塔方法(RK4)可模擬N=4的泰勒方法的精度。這種算法可以描述為,自初始點(diǎn)開始進(jìn)行計(jì)算。

求解微分方程組

//#include <iostream> //#include <iomanip> using namespace std; void RK4(double(*f)(double t, double x, double y), double(*g)(double t, double x, double y), double initial[3], double resu[3], double h) //定義函數(shù) {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; } int main() {double f(double t, double x, double y); //函數(shù)申明double g(double t, double x, double y); //函數(shù)申明double initial[3], resu[3];double a, b, H;double step;int i;cout << "輸入所求微分方程組的初值t0,x0,y0:";cin >> initial[0] >> initial[1] >> initial[2];cout << "輸入所求微分方程組的微分區(qū)間[a,b]:";cin >> a >> b;cout << "輸入所求微分方程組所分解子區(qū)間的個(gè)數(shù)step:";cin >> step;cout << setiosflags(ios::right) << setiosflags(ios::fixed) << setprecision(10);H = (b - a) / step;cout << initial[0] << setw(18) << initial[1] << setw(18) << initial[2] << endl;for (i = 0; i < step; i++){RK4(f, g, initial, resu, H);cout << resu[0] << setw(20) << resu[1] << setw(20) << resu[2] << endl;initial[0] = resu[0]; initial[1] = resu[1]; initial[2] = resu[2];}system("pause");return(0); } //定義微分方程組 double f(double t, double x, double y) {double dx;dx = x + 2 * y;return(dx); } double g(double t, double x, double y) {double dy;dy = 3 * x + 2 * y;return(dy); }

總結(jié)

以上是生活随笔為你收集整理的C++实现经典四阶龙格库塔法解一阶微分方程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。