Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C]Метод Рунге-Кутты 4го порядка


Автор: Lenk 18.6.2008, 00:27
нужно разработать программу численного интегрирования  уравнения :
d^2x/dt^2=-dU/dx,
где U(x)=e^(-x)  +x-1.
при   t=0    x=0, v=dx/dt=v0    

не понимаю, как найти зависимость x(t) и поэтому не получается.
Код

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
main()
{double v1,v2,v3,x1,x2,h,t,k11,k12,k13,k14,k21,k22,k23,k24,a;
int i;
FILE *inp,*out, *out1;
inp=fopen("input.txt","r");
out=fopen("output.txt","w");
out1=fopen("output1.txt","w");
fscanf(inp,"%lf %lf",&x1,&v1);
h=0.01; 
for(i = 0;i <= 5000;i++)
{
  k11=exp(-x1)-1;
  k12=exp(-x1-h/2*k11)-1;
  k13=exp(-x1-h/2*k12)-1;
  k14=exp(-x1-h*k13)-1;
  v2=v1+h/6*(k11+2*k12+2*k13+k14);
  k21=v2;
  k22=v2+h*k21/2;
  k23=v2+h*k22/2;
  k24=v2+h*k23;
  x2=x1+h/6*(k21+2*k22+2*k23+k24);
  x1=x2;
  v1=v2;
  fprintf(out,"%lf %lf\n",x1,v1);
  fprintf(out1,"%lf %lf\n",t,x1);
}

fclose(inp);
fclose(out);
}


помогите, пожалуйста!

Автор: GIK 18.6.2008, 15:16
Чет я смысла немогу понять smile а когда то соображал в интегрировании...
Может тебе цикл надо создать, в котором изменяеться t?  или я туплю smile А вообще интегрирование несет в себе прикладной характер, это интересно и занимательно smile

Автор: kBepTu 18.6.2008, 19:30
Цитата

не понимаю, как найти зависимость x(t) и поэтому не получается

Задачу надо переформулировать следующим образом: обознач  dx/dt через y, численно решаешь уравнение dy/dt = -dU/dx. В цикле находишь y (методом Рунге Кута - численно решаешь дифур). Потом просто у тебя есть производная - численно ее интыгрируешь sum(y*delta(t)).
Алгоритм почти готов  smile пользуйся 

Автор: Lenk 18.6.2008, 20:44
спасибо большое, щас буду пробовать!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)