Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
3 / 3 / 2
Регистрация: 26.01.2013
Сообщений: 69
1

вычисление экспоненты через ряд тейлора

26.01.2013, 16:40. Показов 2787. Ответов 6
Метки нет (Все метки)

Пробую вычислять exp(x) с помощью ряда тейлора. Вроде написал код, ошибок не вижу,но не работает что-то(( runtime error 106((( почему??
eps это точность, эпсилон ε

Delphi
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
 program teylor;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 
var
 eps,a,y:real;
 i,n:integer;
function Power(x,u:integer):integer; {рекурсивное вычисление степени}
 begin
   if u=0
    then Power:=1
    else Power:=x*Power(x,u-1);
 end;
 function Factorial(p:integer):integer; {рекурсивное вычисление факториала}
  begin
    if p=0
     then Factorial:=1
     else Factorial:=p*Factorial(p-1);
  end;
 
begin
  write('n=');
  readln(n);
  write('eps=');
  readln(eps);
  i:=1;y:=0;a:=1;
  while abs(a)>=eps do                
   begin
     a:=a+(Power(n,i)/Factorial(i));
     y:=y+a;
     inc(i);
   end;
   write('teylor exp=',y);
   write('computer exp=',exp(n));
   readln
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2013, 16:40
Ответы с готовыми решениями:

Вычисление значения функции через разложение в ряд тейлора.
Парни,помогите пожалуйста решить в Delphi 7 пример: ln(1+x)=x-x^2/2+x^3/3-... Заранее спасибо!)

Вычисление ln(x+1) разложением в ряд Тейлора
Написать программу в Delphi для ряда Тэйлора: ln(x+1), при |х|<1

Вычисление arcsin разложением в ряд Тейлора
Здравствуйте! Прошу помочь з задачкой, в ней надо расписать y = arcsin (x) в ряд Тейлора, который...

Калькулятор. Вычисление экспоненты
Здравствуйте, ребят, помогите сделать так, чтобы функция экспоненты выводилась не в отдельном окне,...

6
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
26.01.2013, 20:32 2
У тебя получается вечный цикл и в конце-концов происходит переполнение. Ведь a всё всегда больше eps, да ещё и увеличивается. Кроме того тут есть один подводный камень. При n=10 и i=11 уже происходит переполнение типа Integer. Нужно, как минимум, типы функций возведения в степень и факториала делать Extended. Нужно писать вот так:
Кликните здесь для просмотра всего текста
Delphi
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
program teylor;
{$APPTYPE CONSOLE}
uses
  SysUtils;
 
var
 eps,a,b,y:Extended;
 i,n:integer;
function Power(x,u:integer):Extended; {рекурсивное вычисление степени}
 begin
   if u=0
    then Power:=1
    else Power:=x*Power(x,u-1);
 end;
 function Factorial(p:integer):Extended; {рекурсивное вычисление факториала}
  begin
    if p=0
     then Factorial:=1
     else Factorial:=p*Factorial(p-1);
  end;
 
begin
  write('n=');
  readln(n);
  write('eps=');
  readln(eps);
  i:=1;y:=1;a:=1;
  while a>=eps do
   begin
     a:=(Power(n,i)/Factorial(i));
     y:=y+a;
     inc(i);
   end;
   writeln('teylor exp=',y);
   writeln('computer exp=',exp(n));
   readln;
end.

Да и это при некоторых значениях аргумента приведёт к переполнению переменных. Лучше цикл вычисления вообще писать так:
Delphi
1
2
3
4
5
6
  while a>=eps do
   begin
     a:=a*n/i;
     y:=y+a;
     inc(i);
   end;
1
3 / 3 / 2
Регистрация: 26.01.2013
Сообщений: 69
26.01.2013, 21:00  [ТС] 3
А почему вычисления ведутся по
Delphi
1
a*x/i
? Факториала нет,степени нет??
0
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
26.01.2013, 21:04 4
В скрытом тексте смотри - там твои факториал и степень. Но я же написал - будет переполнение данных.Поскольку каждый следующий член ряда можно получить умножив на ai-1*x/i - это в последнем коде и делается.
1
3 / 3 / 2
Регистрация: 26.01.2013
Сообщений: 69
26.01.2013, 21:15  [ТС] 5
ААА, теперь понятно. Но runtime error 106 появляется в консоли. Заметил, что когда eps меньше 1, ошибка высвечивается, а когда больше 1-нет.
0
3941 / 1866 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
26.01.2013, 21:17 6
Да это, наверное, вводишь запятую, а нужно точку. Или наоборот.
1
3 / 3 / 2
Регистрация: 26.01.2013
Сообщений: 69
26.01.2013, 21:20  [ТС] 7
спасибо большое, при многом обязан)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.01.2013, 21:20

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

вычисление значение функции через разложение в ряд тейлоров
Ребят, помогите решить задачку по информатике в делфи 7, в программирование немного туповат....

вычисление значение функции через разложение в ряд тейлоров
Парни,помогите пожалуйста решить в Delphi 7 пример: ln(1+x)=x-x^2/2+x^3/3-... Заранее спасибо!)

Вычисление экспоненты через ряд Тейлора
Сама формула имеет вид : {e}^{x}=1+\frac{x}{1!}+\frac{{x}^{2}}{2!}+\frac{{x}^{3}}{3!}+... Сколько...

Вычисление приближенного значения tan(x) через ряд Тейлора/ряд Маклорена
Привет, CF. Задача: Вычисление приближенного значения tan(x) через ряд Тейлора/ряд Маклорена...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.