Метод Рунге-Кутта 4 порядка для уравнений n-го порядка - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Задание: Написать метод Рунге-Кутта 4 порядка для уравнений n-го порядка. Я написал программу для уравнений 2-го порядка. Вроде правильно. А как написать для n-го порядка додуматься не могу. Может есть знающие люди?
#include <stdio.h>
#include <conio.h>
#include <locale.h>

float f(float x, float y, float y1);
void raschet(float x, float y, float y1, float xn, int n);
 
int main()
{
    setlocale(LC_ALL,"rus");
    int n;
    float x, y, y1, xn;
 
        printf ("x = ");    scanf("%f",&x);                             
        printf ("y = ");    scanf("%f",&y); 
        printf ("y'= ");    scanf("%f",&y1);                            
        printf ("Кол-во шагов интегрирования = ");  scanf("%i",&n); 
        printf ("Конечный x = ");   scanf("%f",&xn);                
    
    raschet(x,y,y1,xn,n);
    return 0;
}

float f(float x, float y, float y1)
{
    return x-2*y+y1;
 
}
 
void raschet(float x, float y, float y1, float xn, int n)
{
    int i;
    float h;
//  float k1, k2,k3,k4, l1,l2,l3,l4;    
    h=(xn-x)/n;     
    for (i=1; i<=n;i++)
    {
/*      
        k1=f(x,y,y1);
        l1=y1;
        k2=f(x+0.5*h,y+0.5*h*k1,y1+0.5*h*l1);
        l2=y1+0.5*h*l1;
        k3=f(x+0.5*h,y+0.5*h*k2,y1+0.5*h*l2);
        l3=y1+0.5*h*l2;
        k4=f(x+h,y+h*k3,y1+h*l3);
        l4=y1+h*l3;
        y=y+h*(k1+2*k2+2*k3+k4)/6;
        y1=y1+h*(l1+2*l2+2*l3+l4)/6;
        x=x+h;          
*/  
    
        //Всё это можно подставить в последнее уравнение, и записать в одну строчку. Тогда удастся избавиться от множества переменных.
        y=y+h*(f(x,y,y1) + 2*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1) + 2*f(x+0.5*h,y+0.5*h*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1),y1+0.5*h*(y1+0.5*h*y1)) + f(x+h,y+h*f(x+0.5*h,y+0.5*h*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1),y1+0.5*h*(y1+0.5*h*y1)),y1+h*(y1+0.5*h*y1+0.5*h*y1)))/6;
        y1=y1+h*(y1 + 2*(y1+0.5*h*y1) + 2*(y1+0.5*h*(y1+0.5*h*y1)) + (y1+h*(y1+0.5*h*(y1+0.5*h*y1))))/6;
        x=x+h;
        printf("\n[%i]  X=%f        Y=%f        Y'=%f", i, x, y, y1);
    }
    printf("\n\nОтвет: Y = %f", y);
}
Так же буду рад любой объективной критике по текущему коду.

Решение задачи: «Метод Рунге-Кутта 4 порядка для уравнений n-го порядка»

textual
Листинг программы
//y=y+h*(l1+2*l2+2*l3+l4)/6;
//y1=y1+h*(k1+2*k2+2*k3+k4)/6;
 
y=y+h*(y1 + 2*(y1+0.5*h*y1) + 2*(y1+0.5*h*(y1+0.5*h*y1)) + (y1+h*(y1+0.5*h*(y1+0.5*h*y1))))/6;
y1=y1+h*(f(x,y,y1) + 2*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1) + 2*f(x+0.5*h,y+0.5*h*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1),y1+0.5*h*(y1+0.5*h*y1)) + f(x+h,y+h*f(x+0.5*h,y+0.5*h*f(x+0.5*h,y+0.5*h*f(x,y,y1),y1+0.5*h*y1),y1+0.5*h*(y1+0.5*h*y1)),y1+h*(y1+0.5*h*y1+0.5*h*y1)))/6;

Объяснение кода листинга программы

  1. Вычисление значения переменной y с помощью метода Рунге-Кутта 4-го порядка.
  2. Вычисление значения переменной y1 с помощью метода Рунге-Кутта 4-го порядка.
  3. Значение переменной y используется для вычисления значения переменной y1.
  4. Значение переменной y1 используется для вычисления значения переменной y.
  5. Значение переменной y используется для вычисления значения переменной y1.
  6. Значение переменной y1 используется для вычисления значения переменной y.
  7. Значение переменной y используется для вычисления значения переменной y1.
  8. Значение переменной y1 используется для вычисления значения переменной y.
  9. Значение переменной y используется для вычисления значения переменной y1.
  10. Значение переменной y1 используется для вычисления значения переменной y.
  11. Значение переменной y используется для вычисления значения переменной y1.
  12. Значение переменной y1 используется для вычисления значения переменной y.
  13. Значение переменной y используется для вычисления значения переменной y1.
  14. Значение переменной y1 используется для вычисления значения переменной y.
  15. Значение переменной y используется для вычисления значения переменной y1.
  16. Значение переменной y1 используется для вычисления значения переменной y.
  17. Значение переменной y используется для вычисления значения переменной y1.
  18. Значение переменной y1 используется для вычисления значения переменной y.
  19. Значение переменной y используется для вычисления значения переменной y1.
  20. Значение переменной y1 используется для вычисления значения переменной y.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы