用龙格库塔法计算
#include <iostream>
#include<iomanip>
#include <cmath>
using namespace std;
int main()
{
double a = 1, b = 3; //a,b表示[a,b]求解区间
double x0 = 1, y0 = 2; //x0表示初始时刻x的值,y0表示初始时刻y的值
double x, y; //x,y分别表示变化的时候x,y的值
double F1, F2, F3, F4; //F1,F2,F3,F4分别表示斜率值
double h = 1.0f / 128; //h表示步长
cout << setiosflags(ios::left)
<< setw(25) << "x的值"
<< setw(25) << "龙格库塔计算得到的值"
<< setw(25) << "解析解得到的值"
<< setw(25) << "误差" << endl;
x = x0;
y = y0;
cout << setw(25) << x
<< setw(25) << y
<< setw(25) << y0
<< setw(25) << abs(y0-y)<< endl;
do
{
F1 = h*pow(x, -2)*(x*y - y*y);
F2 = h*pow(x + h / 2, -2)*((x + h / 2 )* (y + F1 / 2) - (y + F1 / 2)*(y + F1 / 2));
F3 = h*pow(x + h / 2, -2)*((x + h / 2)* (y + F2 / 2) - (y + F2 / 2)*(y + F2 / 2));
F4 = h*pow(x + h, -2)*((x + h)* (y + F3) - (y + F3)*(y + F3));
y += (F1 + 2 * F2 + 2 * F3 + F4) / 6;
x = x + h;
cout<< setw(25) << x
<< setw(25) << y
<< setw(25) << x / (1.0f / 2 + log(x))
<< abs(x / (1.0f / 2 + log(x)) - y) << endl;
} while (x<=b);
return 0;
}