ALgorytm Runge-Kutta

0

Mam takie równanie:
x(0) = 0;
dx/dt = x(t) + t;

rozwiązanie jawne to: x(t)=e^t-t-1;

Próbuję zaimplementować algorytm Runge-Kutty, niby coś działa, ale jak sprawdzam z wolframalpha to coś jest chyba nie tak. Nie mogę namierzyć błędu.
Mój obecny kod:


public class Main {    

    double function(double t, double x) {       
        return x+t;    
    }

    public static void main(String args[]) {
        //warunek poczatkowy x=0
        double x = 0;   
        //krok     
        int step = 0.25;
        for(double t = 0; t < 3.0 ; t+=step) {    
            //obliczenie kroku runge-kutta
            for(int i = 0; i < d; i++) {        
                //pomijam warunek poczatkowy   
                if(t==0) continue;           
                double k1 = function(t, x)*step;        
                double k2 = function(t+0.5*dt, x + 0.5*k1)*step;      
                double k3 = function(t+0.5*dt, x + 0.5*k2)*step;           
                double k4 = function(t+dt, x+k3)*step;           
                x = x + (k1+2*k2+2*k3+k4)/6;       
             }
            //obliczenie wyniku wg wzoru wyjsciowego dla sprawdzenia            
            double wynik = Math.pow(Math.E,t) - t -1;            
            System.out.println("t: "+t+" = "+String.format("%5f", (x)) + " dobry: " + String.format("%5f", wynik));        
       }
    }
}

0

Oczywiście ta pętla wewnętrzna jest niepotrzebna, znaczy linijki:
for(int i=0;i<d;i++) { oraz klamra zamykająca. Sam kod wewnątrz pętli powinien zostać. Niechcący wkleiłem kawałek jakiegoś testu.

0

Ok, problem rozwiazany, niepotrzebne było to continue przy warunku poczatkowym. (pomijajac juz bledy w kodzie ktory zamiescilem i przerabialem tutaj zamiast w edytorze:P).

0

tu masz głupi skecz:

int step = 0.25;

1 użytkowników online, w tym zalogowanych: 0, gości: 1