Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 118

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Требуется вычислить числовой ряд для exp(x) от х начального до х конечного с точночтью эпсилон. Шаг вычисляется. То что получается видно на рисунке.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Приложение:
  1. var
  2. eps, xn, xk: real;
  3. x, h, e, d: real;
  4. n, i, j: integer;
  5.  
  6. function Fact(n: integer): integer;
  7. begin
  8. if n <= 1 then
  9. fact := 1
  10. else
  11. fact := n * fact(n - 1);
  12. end;
  13.  
  14. begin
  15.  
  16. readln(xn);
  17.  
  18. readln(xk);
  19.  
  20. readln(n);
  21.  
  22. readln(eps);
  23.  
  24. h := (xk - xn)/(n - 1);
  25. x := xn;
  26. j := 1;
  27. while j <= n do
  28. begin
  29. e := 1+x;
  30. i := 1;
  31. repeat
  32. d := exp((i+1)*ln(x)) / Fact(i+1);
  33. e := e + d;
  34. inc(i);
  35. until (d < eps);
  36. writeln('x=',x:5:3,' e=',e);
  37. x := x+h;
  38. inc(j);
  39. end;
  40. readln;
  41. end.


Евгений Eklmn Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Евгений Eklmn (статус: Посетитель)
Вопрос отправлен: 22 марта 2011, 23:07
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Толяныч

Здравствуйте, Евгений Eklmn!
Очевидно, данная задача требует от студента знания, как вычисляется экспонента разложением в ряд Тейлора, а не тупого использования библиотечной функции exp , которая, конечно же, вычисляет экспонетну с заданной точностью, в чем миллионы пользователей убедились.
Функция выглядит приблизительно так ( см. приложение ). Что такое ряд Тейлора - см. свой конспект ( смех в зале ), в крайнем случае - Википедию.

Результат работы :
1 2.7182818283
2 7.3890560985
3 20.0855369215
4 54.5981500326
5 148.4131591017
6 403.4287934917

Ввод-вывод и цикл допишешь сам.
Если это не так - извини, не понял вопроса.

Приложение:
  1. function TForm1.MyExp ( var arg,dd : extended ): extended ;
  2.  
  3. var b,cc : extended ;
  4. begin
  5. b := 1.0 ; cc := arg ; Result := cc + 1.0;
  6. while ( cc > dd) do
  7. begin
  8. b := b + 1.0 ;
  9. cc := cc * arg / b ; Result := Result + cc
  10. end ;
  11. end ;
  12.  


Ответ отправил: Толяныч (статус: 4-ый класс)
Время отправки: 23 марта 2011, 00:09
Оценка за ответ: 5

Комментарий к оценке: "Что такое ряд Тейлора - см. свой конспект" - я как раз и пытался вычислить через ряд Тейлора, вроде все по формуле, а результат плохой. Спасибо за помощь

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 23 марта 2011, 11:20; участников в обсуждении: 1.
Толяныч

Толяныч (статус: 4-ый класс), 23 марта 2011, 11:20 [#1]:

Не "вроде как по формуле", а совсем даже не по формуле. Если рассчитываем функцию по ее разложению в ряд или другим способом, предполагается, что библиотечный вариант этой функции как бы недоступен. Смешно делать "свою" функцию по такой схеме :
function MySin ( a : real ) : real ;
begin
Result := Sin(a)
end ;
А для exp рекурентная формула
y[i+1] = y[i] * ( 1 + x/(i+1)), что мы и реализовали. Когда приращение функции ( у нас это cc ) становится меньше некоторой величины eps, считаем, что сумма остальных членов ряда не превысит этой величины, и вычисление прекращаем.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:49
Выполнено за 0.02 сек.