Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.12.2023
Сообщений: 17

Решение дифференциального уравнения методом Эйлера

08.02.2024, 15:18. Показов 1013. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с заданием. Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2024, 15:18
Ответы с готовыми решениями:

Решение уравнения методом Ньютона

Решение уравнения методом Ньютона
Помогите плииз написать программу на паскале для решения уравнения методом ньютона x^3+6,6*x^2-29,05*x+22,64=0, также чтобы оформление...

Решение нелинейного уравнения методом хорд
Нужно составить программу нахождения корней нелинейного уравнения на заданном отрезке методом хорд: а) x + cos(x^0.52 + 2) = 0 ...

6
Модератор
10373 / 5659 / 3398
Регистрация: 17.08.2012
Сообщений: 17,281
16.02.2024, 00:25
Перепишем уравнение в следующем виде:

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y^{''}=2\left( e^{-x}\cos (x)-y^'-y\right)<br />

Это обыкновенное дифференциальное уравнение второго порядка. По методу Эйлера получим две рекуррентных формулы для y' и y:

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
y^'_{n+1}=y^'_n+hy^{''}_n=y^'_n+2h\left( e^{-x_n}\cos (x_n)-y^'_n-y_n\right)\\\\y_{n+1}=y_n+hy^'_n<br />

Для Pascal ABC.NET:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
##
  function f(x: real): real := exp(-x) * (cos(x) + sin(x) + x * sin(x));
  var (y, dy, x0, xk, h) := (1.0, 0.0, 0.0, 1.0, 0.05);
  'x    Метод    Tочное'.Println;
  '     Эйлера   значение'.Println;
  $'{x0:N2} {y:N6} {f(x0):N6}'.Println;
  foreach var x in PartitionPoints(x0 + h, xk, round((xk - x0) / h) - 1) do
    begin
      var t := dy;
      dy += 2 * h * (exp(-x) * cos(x) - t - y);
      y += h * t;
      $'{x:N2} {y:N6} {f(x):N6}'.Println
    end
Для любого паскаля:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function f(x: real): real;
begin
  f := exp(-x) * (cos(x) + sin(x) + x * sin(x))
end;
 
const
  y0 = 1.0;
  dy0 = 0.0;
  x0 = 0.0;
  xk = 1.0;
  h = 0.05;
var
  x, y, dy, t: real;
  k: integer;
begin
  y := y0;
  dy := dy0;
  writeln('x    Метод    Tочное');
  writeln('     Эйлера   значение');
  writeln(x0:4:2, y0:9:6, f(x0):9:6);
  for k := 1 to round((xk - x0) / h) do
    begin
      x := x0 + k * h;
      t := dy;
      dy := t + 2 * h * (exp(-x) * cos(x) - t - y);
      y := y + h * t;
      writeln(x:4:2, y:9:6, f(x):9:6);
    end;
  readln
end.
1
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295
22.02.2024, 18:20
Интересная задачка.
Совсем небольшая модификация метода Эйлера повышает точность интегрирования более чем в 1000 раз (3 порядка).
А простое уменьшение шага интегрирования в два раза (0.025) дает повышение точности только в два раза!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function f(x: real): real;
begin
  f := exp(-x) * (cos(x) + sin(x) + x * sin(x))
end;
 
const
  y0 = 1.0;
  dy0 = 0.0;
  x0 = 0.0;
  xk = 1.0;
  h =  0.05;
var  x, y, dy, t, fx, x2, x4, y1, dy1 : real;
  k: integer;
begin
  y := y0;
  dy := dy0;
  writeln('x    Метод    Tочное    погрешность ');
  writeln('     Эйлера   значение       %');
  writeln(x0:4:2, y0:9:6, f(x0):9:6,x:7:2);
  for k := 1 to round((xk - x0) / h) do
    begin
      x := x0 + k * h;
      t := dy; 
      //{ Модифицированный метод
      x2 := x-h/2.0; //вводим промежуточные точки 
      x4 := x2-h/4.0;
      dy1:= t +  h * (exp(-x4) * cos(x4) - t - (y+t*h/4.0));
      y1 := y + h * (t+dy1)/4.0;
      dy := t + 2 * h * (exp(-x2) * cos(x2) - dy1 - y1);
      y := y + h * (t+dy)/2.0;
      //}
      { обычный метод
     dy := t + 2 * h * (exp(-x) * cos(x) - t - y); 
     y := y + h * t;
     }
      fx:=f(x);
      writeln(x:4:2, y:9:6, fx:9:6,   abs(200*(fx-y)/(fx+y)):11:6);
    end;
 
end.
1
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295
23.02.2024, 15:05
Cyborg Drone,
Здравствуйте. Спасибо за оценку моего небольшого исследования.
Можно вопрос немного не по теме?
Как хобби, занимаюсь проблемами высокоточного численного интегрирования дифференциальных уравнений движения тел, в частности планет солнечной системы и численного решения "задачи трех тел". Есть неплохие результаты.
Одна из проблем не дает мне покоя. Для высокой точности интегрирования при больших расстояниях
и малых приращениях желательно использовать переменные с большой разрядностью. для этой цели я применяю переменные типа "Decimal". поэтому и освоил Pascal. Но есть недостаток, переменные "Decimal" работают в среднем в 25 раз медленнее, чем "Real" имеют фиксированную запятую и весьма ограниченный диапазон слишком больших и слишком малых значений для астрономических расчетов.
Слышал, что в последних версиях Delphi существует новая переменная типа"Double Double", которая только в 10 раз медленнее чем "Real" ("Double"), может быть Вы подскажете мне что-нибудь по этой переменной?
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
24.02.2024, 19:08
Сергей Игнатьев, decimal это в первую очередь для финансовых расчётов.
Оно неэффективно и по скорости, и по памяти - а значит меньше точности в своих 128 битах.
Но взамен хранит числа в 10-ичной СС, а не 2-ичной, таким образом давая более "денежное" округление.

Нормальное 128-битное число с плавающей точкой поддерживается не всеми процессорами, и поэтому обычно его реализует компилятор, используя числа меньшей битности.
Я бы на вашем месте реализовал бы это вручную, или хотя бы использовал бы готовую библиотеку с числами произвольной точности.

P.S. Ну то есть, и не "бы", а уже вот:
https://github.com/SunSerega/t... ing.cl#L29
Тут точность вообще произвольная. И код этот для GPU (для OpenCL), потому что когда можно распараллелить - оно быстрее чем CPU. Даже в моём случае, с нереально старым GPU и более-менее нормальным CPU.
Но операции я реализовал только те, что понадобились мне. Поэтому не особо модульно - в частности point_component_mul_shl1, делающее 2 операции сразу.
2
 Аватар для Сергей Игнатьев
222 / 57 / 18
Регистрация: 13.03.2017
Сообщений: 295
25.02.2024, 06:44
Sun Serega,
Благодарю за помощь, Вы пишете про применение "decimal":
Цитата Сообщение от Sun Serega Посмотреть сообщение
Оно неэффективно и по скорости, и по памяти - а значит меньше точности
Для расчетов электрических полей часто применяю "decimal", особенно для расчетов больших систем линейных уравнений (СЛАУ) . Переменная работает довольно эффективно, но очень медленно.
Так решение 1000 уравнений с переменными "real" методом обращения матрицы коэффициентов с выбором главного элемента у меня проходит за 10 сек и максимальная невязка решения (разница между левой и правой частями) имеет порядок 4е-10, а решение тестовой задачи с переменными "Decimal" занимает уже 200 сек и дает максимальную невязку 1е-23, то есть точность вполне приемлемая, но время расчета великовато.
Более сложные системы требуют увеличение числа уравнений, например 5000 уравнений решаются с "real" за 1250 сек, максимальная невязка уже 5е-7. Компьютер тянет и 10000 уравнений, но погрешность с "real" становится неприемлемо большой, а использование "Decimal" слишком затратно по времени.
Хорошее предложение использовать
Цитата Сообщение от Sun Serega Посмотреть сообщение
готовую библиотеку с числами произвольной точности
, но нужно округление до заданного количества десятичных знаков в мантиссе например не более 30, чтобы ограничить время расчетов. И, желательно, привести пример применения такой переменной в небольшой программке. Спасибо.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
25.02.2024, 11:10
Я сам никогда такую библиотеку не использовал, но знаю что они существуют.
Считая ваш опыт с точностью - я бы сделал такую запись:
Pascal
1
2
3
4
5
6
  Float128 = record
    private a,b,c,d: integer;
    
    //TODO Все методы и операторы
    
  end;
То есть точность всё равно ограничена, но ограничена она тем - как вы её реализовали.
Готовой такой записи у меня нету, но по ссылке выше я привёл пример где уже реализованы такие операции как сложение и умножение на языке OpenCL-C.

Кроме того, вам нужна научная нотация в числах? То есть выделение части бит под экспоненту.
Возможно лучше реализовать не Float128 а Fixed128, где точка между целой и дробной частью стоит в заранее известном месте - это на много проще.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.02.2024, 11:10
Помогаю со студенческими работами здесь

Численное решение дифференциального уравнения методом Эйлера
Нужно разработать алгоритм и составить программу для численного решения дифференциального уравнения методом Эйлера: ...

Решение задачи Коши для обыкновенного дифференциального уравнения методом Эйлера
Решите задачу Коши для обыкновенного дифференциального уравнения на отрезке при условии у(0) = 0 методом Эйлера, разбивая отрезок...

Написать программу решения дифференциального уравнения методом Эйлера, модифицированным методом Эйлера, исправленным мет
Написать программу решения дифференциального уравнения методом Эйлера, модифицированным методом Эйлера, исправленным методом Эйлера,...

Решение дифференциального уравнения по методу Эйлера
Всем привет,возникла проблем с написанием диффиринциального уравнения по методу Эйлера для задачи ввида &quot;Тело брошенное под углом к...

Решить задачу Коши для обыкновенного дифференциального уравнения методом Эйлера
1. Решить задачу Коши для обыкновенного дифференциального уравнения y¹=x²+y² отрезке при условии у(0) = 0 методом Эйлера, разбивая отрезок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru