Kiedy dzięki programowaniu możesz sprawdzić faktycznie, że całka to dodawanie tak jak to wykładowcy mawiali... Na bardzo fizycznym przykładzie przyciągania małej planety w "kształcie" punktu i dużej w kształcie pręta (patrz pręta z planet, planety w kształcie pręta a dużych "atomach").
#include <iostream>
#include <math.h>
#include <vector>
const double M_PI = 3.14;
using namespace std;
double k = 1000;
vector <double> x, y, z, fx, fy, fz, f, m;
double pit(double a=0, double b=0, double c=0){return sqrt(a*a+b*b+c*c);}
void add_point(double xx=0, double yy=0, double zz=0, double mm=1);
int main()
{
double gestosc_liniowa = 100;
double dlugosc_preta = 5;
double odleglosc = 5; // odleglosc punktu odniesienia od preta
double masa_preta = dlugosc_preta*gestosc_liniowa;
int ile_mas = gestosc_liniowa*dlugosc_preta;
///////////////////////////////////////////////
add_point(); // Punkt odniesienia o masie 1
for(int i=0; i<ile_mas; i++)
add_point(odleglosc+i/gestosc_liniowa, 0);
///////////////////////////////////////////////
// Test 1: Pret i punkt
for(int i=0; i<x.size(); i++)
{
for(int j=0; j<x.size(); j++)
{
if(j!=i)
{
double xp = x[i]-x[j];
double yp = y[i]-y[j];
double zp = z[i]-z[j];
double r = sqrt(xp*xp + yp*yp + zp*zp);
double r3 = pow(r,3);
fx[i] += (k*m[i]*m[j]*xp)/r3;
fy[i] += (k*m[i]*m[j]*yp)/r3;
fz[i] += (k*m[i]*m[j]*zp)/r3;
}
}
f[i] = sqrt(pow(fx[i], 2) + pow(fy[i], 2) + pow(fz[i], 2));
fx[i]=0;
fy[i]=0;
fz[i]=0;
}
cout<<"Punkt A polozony jest na osi symetrii preta: "<<endl;
cout<<f[0]<<" - rozwiazanie numeryczne, czyli lopatologiczne dodawanie"<<endl;
cout<<k*masa_preta/(odleglosc*(odleglosc+dlugosc_preta));
cout<<" - rozwiazanie analityczne z calki"<<endl;
cout<<endl;
return 0;
}
void add_point(double xx, double yy, double zz, double mm){
x.push_back(xx);
y.push_back(yy);
z.push_back(zz);
fx.push_back(false);
fy.push_back(false);
fz.push_back(false);
f.push_back(false);
m.push_back(mm);
}