Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 05.10.2019, 16:22   #1 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Найти решение краевой задачи для обыкновенного дифференциального уравнения 2 порядка

Найти решение U(x) краевой задачи для обыкновенного дифференциального уравнения второго порядка
(K(x)*U'(x))'-q(x)*U(x)=-f(x),
0<=x<=1,
K(0)*U'(0)=b1*U(0)-t1,
-K1(1)*U'(1)=b2*U'(1)=b2*U(1)-t2,
Точность решения задачи e=0.001. Значение шага h для разностой схемы выбирать из требований точности решения. Задание выполнить методом Стрельбы
Миниатюры
uunnrtjkwnw.jpg  
Изображения
 
t13ka вне форума   Ответить с цитированием

Старый 05.10.2019, 16:22
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я думаю, что решение проблемы можно поискать в аналогичных топиках

Найти решение задачи Коши для ОДУ методом Рунге-Кутта 4-го порядка
Решение дифференциального уравнения второго порядка
Решение уравнения методом Рунге-Кутты 4-го порядка

Старый 08.10.2019, 20:20   #2 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Попытался сделать, но не получается. Помогите
Код:
uses CRT;
label Start, Quit;

Const
 t0 = 0.0;
 y0 = 0.0;
 z0 = 0.0;
 h = 0.01;
 t_max = 1.0;

Var
 T,Y,Z,Y1,Z1:real;
 i,N:integer;

Function f(t,y,z:real):real;
begin
 f := (t + 2) * y - z - cos(t);
end;

Function g(t,y,z:real):real;
begin
 g := z;
end;

Procedure RK(t,y,z:real; var Uy:real; var Uz:real);
var k1,k2,k3,k4,q1,q2,q3,q4:real;
begin
 k1:=h*f(t,y,z);
 q1:=h*g(t,y,z);
 
 k2:=h*f(t+h/2,y+q1/2,z+k1/2);
 q2:=h*g(t+h/2,y+q1/2,z+k1/2);
 
 k3:=h*f(t+h/2,y+q2/2,z+k2/2);
 q3:=h*g(t+h/2,y+q2/2,z+k2/2);
 
 k4:=h*f(t+h,y+q3,z+k3);
 q4:=h*g(t+h,y+q3,z+q3);
 
 Uz:=z+(k1+2*k2+2*k3+k4)/6;
 Uy:=y+(q1+2*q2+2*q3+q4)/6;
end;

Begin
 N:=Round((t_max-t0)/h);
 Start:
 T:=t0;
 Y:=y0;
 Z:=z0;
 //Writeln('t= ',T:4:2,'    y= ',Y:8:5);
 For i:=1 to N do
  begin
   RK(T,Y,Z,Y1,Z1);
   T:=T+h;
   Y:=Y1;
   Z:=Z1;
   //Writeln('t= ',T:4:2,'    y= ',Y:8:5);
  end;
  
   if ((z0 - e) < Y) and (Y < (z0 + e)) then goto Quit else t := t_max;
  
  For i:=1 downto N do
    begin
      RK(T,Y,Z,Y1,Z1);
      T:=T-h;
      Y:=Y1;
      Z:=Z1;
      Writeln('t= ',T:4:2,'    y= ',Y:8:5);
    end;
    
   if ((t0 - e) < Y) and (Y < (t0 + e)) then goto Quit else goto Start;
   
   Quit:
   for i := 1 to n do
   Writeln('t= ',T:4:2,'    y= ',Y:8:5);
End.
t13ka вне форума   Ответить с цитированием
Старый 08.10.2019, 22:26   #3 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А можете помочь с модификацией метода Рунге-Кутта для нахождения решения краевой задачи для ОДУ 2 порядка?
t13ka вне форума   Ответить с цитированием
Старый 09.10.2019, 09:53   #4 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от t13ka Посмотреть сообщение
А можете помочь с модификацией метода Рунге-Кутта для нахождения решения краевой задачи для ОДУ 2 порядка?
Да как Вам сказать... Видите ли, сам я с методом стрельбы никогда дела не имел, да и, откровенно говоря, даже до сих пор и не слыхал о таком. Посмотрел, понял, что разобраться, в принципе, можно. Так может быть, Вы всё-таки сами? Тем более, что Вы явно помоложе меня будете (я, извините, пенсионер), стало быть, мозги светлые, незакомпостированные. А?
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 10.10.2019, 17:30   #5 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я попытался. Снова залез в литературу Турчака и Мудрова. Как мне кажется необходимо взять за основу программу метода Рунге-Кутта для ОДУ 2 порядка, только при этом добавить условии на выполнение на одном из концов. Допустим в моем случае если я беру слева 0, то на правом тоже должно быть 0. Так как условие не выполняется, необходимо добавить метод дихотомии для разбиения вводимого условия. Как то так у меня сложилась картинка в голове, но не могу записать это в виде кода. Можете хотя бы сказать правильно ли я рассуждаю? Буду очень признателен
Миниатюры
4dhpdah2vf8.jpg  
t13ka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.10.2019, 14:30   #6 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от t13ka Посмотреть сообщение
Можете хотя бы сказать правильно ли я рассуждаю? Буду очень признателен
Пока правильно. За исключением того, что Вы допустили ошибку при дифференцировании функции K(x). Её производная есть 2х, а не 2х².
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 11.10.2019, 15:09   #7 (permalink)
t13ka
Новичок
 
Регистрация: 02.10.2019
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Пока правильно. За исключением того, что Вы допустили ошибку при дифференцировании функции K(x). Её производная есть 2х, а не 2х².
Но у меня все равно не получается записать в виде программы это. Не могли бы вы все таки сжалиться надо мной и помочь с кодом, а то я не справляюсь. Вы моя последняя надежда
t13ka вне форума   Ответить с цитированием
Старый 11.10.2019, 15:21   #8 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от t13ka Посмотреть сообщение
Но у меня все равно не получается записать в виде программы это. Не могли бы вы все таки сжалиться надо мной и помочь с кодом, а то я не справляюсь. Вы моя последняя надежда
То есть Вы хотите, чтобы я засел за изучение метода стрельбы а потом корпел над программой, довольно непростой? Знаете... всё-таки, думаю, Вам это проще (и нужнее, кстати).
И вообще... странно как-то. Видите ли, подобные задачи ставят обычно не просто перед студентами-технарями, а перед теми, кого обучают сложным математическим методам, где-то на уровне мехмата и пр. И если Вы сразу устремляетесь на форумы, то, может быть, это не Ваше вообще? Извините.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.