📄 xrk4.cpp
字号:
#include <iostream>
#include <iomanip>
#include "nr.h"
using namespace std;
// Driver for routine rk4
void derivs(const DP x, Vec_I_DP &y, Vec_O_DP &dydx)
{
dydx[0]= -y[1];
dydx[1]=y[0]-(1.0/x)*y[1];
dydx[2]=y[1]-(2.0/x)*y[2];
dydx[3]=y[2]-(3.0/x)*y[3];
}
int main(void)
{
const int N=4;
int i,j;
DP h,x=1.0;
Vec_DP y(N),dydx(N),yout(N);
y[0]=NR::bessj0(x);
y[1]=NR::bessj1(x);
y[2]=NR::bessj(2,x);
y[3]=NR::bessj(3,x);
derivs(x,y,dydx);
cout << endl << setw(16) << "Bessel function:";
cout << setw(6) << "j0" << setw(13) << "j1";
cout << setw(13) << "j3" << setw(13) << "j4" << endl;
cout << fixed;
for (i=0;i<5;i++) {
h=0.2*(i+1);
NR::rk4(y,dydx,x,h,yout,derivs);
cout << setprecision(2);
cout << endl << "for a step size of: " << setw(6) << h << endl;
cout << setprecision(6);
cout << setw(12) << "rk4:";
for (j=0;j<4;j++) cout << setw(13) << yout[j];
cout << endl << setw(12) << "actual:" << setw(13) << NR::bessj0(x+h);
cout << setw(13) << NR::bessj1(x+h) << setw(13) << NR::bessj(2,x+h);
cout << setw(13) << NR::bessj(3,x+h) << endl;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -