|
Вопрос # 5 118/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Требуется вычислить числовой ряд для exp(x) от х начального до х конечного с точночтью эпсилон. Шаг вычисляется. То что получается видно на рисунке.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
Приложение: Переключить в обычный режим- var
- eps, xn, xk: real;
- x, h, e, d: real;
- n, i, j: integer;
-
- function Fact(n: integer): integer;
- begin
- if n <= 1 then
- fact := 1
- else
- fact := n * fact(n - 1);
- end;
-
- begin
-
- readln(xn);
-
- readln(xk);
-
- readln(n);
-
- readln(eps);
-
- h := (xk - xn)/(n - 1);
- x := xn;
- j := 1;
- while j <= n do
- begin
- e := 1+x;
- i := 1;
- repeat
- d := exp((i+1)*ln(x)) / Fact(i+1);
- e := e + d;
- inc(i);
- until (d < eps);
- writeln('x=',x:5:3,' e=',e);
- x := x+h;
- inc(j);
- end;
- readln;
- end.
 |
Вопрос задал: Евгений 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
Ввод-вывод и цикл допишешь сам.
Если это не так - извини, не понял вопроса.
Приложение: Переключить в обычный режим- function TForm1.MyExp ( var arg,dd : extended ): extended ;
-
- var b,cc : extended ;
- begin
- b := 1.0 ; cc := arg ; Result := cc + 1.0;
- while ( cc > dd) do
- begin
- b := b + 1.0 ;
- cc := cc * arg / b ; Result := Result + cc
- end ;
- end ;
-
 |
Ответ отправил: Толяныч (статус: 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, считаем, что сумма остальных членов ряда не превысит этой величины, и вычисление прекращаем.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|