रंग कुट्टा विधि का प्रयोग साधारण अवकल समीकरणों (ODE) को हल करने के लिए किया जाता है। यह x और y के लिए dy/dx फ़ंक्शन का उपयोग करता है, और y के प्रारंभिक मान की भी आवश्यकता होती है, अर्थात y(0)। यह दिए गए x के लिए y का अनुमानित मान ज्ञात करता है। ODE को हल करने के लिए, हमें इन सूत्रों का पालन करना होगा:
यहां h अंतराल की ऊंचाई है।
नोट: इन फ़ार्मुलों से, हम पहले दो k1 और k2 का उपयोग कर सकते हैं, ODE के लिए रनगे-कुट्टा 2nd ऑर्डर समाधान ढूंढ सकते हैं।
इनपुट और आउटपुट
Input: The x0 and f(x0): 0 and 0 the value of x = 0.4 the value of h = 0.1 Output: Answer of differential equation: 0.0213594
एल्गोरिदम
rungeKutta(x0, y0, x, h)
इनपुट − प्रारंभिक x और y मान, लक्षित x मान और अंतराल h की ऊँचाई।
>आउटपुट - मान x के लिए y का मान।
Begin iteration := (x – x0)/h y = y0 for i := 1 to iteration, do k1 := h*f(x0, y) k2 := h*f((x0 + h/2), (y + k1/2)) k3 := h*f((x0 + h/2), (y + k2/2)) k4 := h*f((x0 + h), (y + k3)) y := y + (1/6)*(k1 + 2k2 + 2k3 + k4) x0 := x0 + h done return y End
उदाहरण
#include <iostream> using namespace std; double diffOfy(double x, double y) { return ((x*x)+(y*y)); //function x^2 + y^2 } double rk4thOrder(double x0, double y0, double x, double h) { int iteration = int((x - x0)/h); //calculate number of iterations double k1, k2, k3, k4; double y = y0; //initially y is f(x0) for(int i = 1; i<=iteration; i++) { k1 = h*diffOfy(x0, y); k2 = h*diffOfy((x0+h/2), (y+k1/2)); k3 = h*diffOfy((x0+h/2), (y+k2/2)); k4 = h*diffOfy((x0+h), (y+k3)); y += double((1.0/6.0)*(k1+2*k2+2*k3+k4)); //update y using del y x0 += h; //update x0 by h } return y; //f(x) value } int main() { double x0, y0, x, h; cout << "Enter x0 and f(x0): "; cin >> x0 >> y0; cout << "Enter x: "; cin >> x; cout << "Enter h: "; cin >> h; cout << "Answer of differential equation: " << rk4thOrder(x0, y0, x, h); }
आउटपुट
Enter x0 and f(x0): 0 0 Enter x: 0.4 Enter h: 0.1 Answer of differential equation: 0.0213594