Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C]Метод Рунге-Кутты 4го порядка 
:(
    Опции темы
Lenk
Дата 18.6.2008, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.6.2008

Репутация: нет
Всего: нет



нужно разработать программу численного интегрирования  уравнения :
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);
}


помогите, пожалуйста!
PM MAIL   Вверх
GIK
Дата 18.6.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: 4
Всего: 14



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


--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
kBepTu
Дата 18.6.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 6.12.2007

Репутация: 2
Всего: 2



Цитата

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

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

Это сообщение отредактировал(а) kBepTu - 18.6.2008, 19:32
PM   Вверх
Lenk
Дата 18.6.2008, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.6.2008

Репутация: нет
Всего: нет



спасибо большое, щас буду пробовать!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.