

Delphi 7. Ряд Тейлора для ln(x+1). В чем ошибка?
Застряла с простым вопросом. Нужно разложить ln(1+x) с заданной точностью используя ряд Тейлора.
Все нужно сделать в borland delphi 7.
Значит, само разложение выглядит так:
ln(1+x)= x - x^2/2 + x^3/3 - .+( (-1)^n*x^(n-1) )/ (n+1), где n - заданная точность
Чтобы выразить a^b используем такую штуку: exp(ln(a^b))=exp(b*log(a))
Пишу програму. Там задали точность, ввели икс..Вроде все считает. Но вот выводит бред.
Например,
ln 1.5 = 0,4058035 с заданной точностью 7, у меня же он равен 1,003
Вот кусок кода:
procedure TForm1.Button1Click(Sender: TObject);
var f: integer;
begin
result:= 0;
x1:= x; // икс один - введенный Х
for i:=0 to e do // е - точность
begin
f:=i mod 2; // определяем, четная или нечетная степень
if f<>0 then // если нечетная
result:=result + (((-1)*exp(i*log10(1)))*(exp((i-1)*log10(x1))))/(i+1)
else
result:=result + (exp((i-1)*log10(x1)))/(i+1);
end;
В чем здесь ошибка?
Почему результат в итоге не верный?
Подскажите, пожалуйста)
В степень неправильно возводишь.. . Логарифм должен быть натуральный, а не десятитичный.
Вообще-то использовать функцию натурального логарифма при вычислении натурального логарифма Тейлором - это извращение, не находишь? Я бы просто при каждом цикле домножал на множитель и все. А то у тебя Тейлор через Тейлора получается, потому как логарифмические функции так и вычисляются, если внутрь заглянуть.
> Чтобы выразить a^b используем такую штуку
Функция для вычисления вещ. степени вещ. числа в Delphi называется Power()
Отвыкай от дурных привычек времен ТурбоПаскаля и учи дельфийскую мат. часть.
Иначе ждет тебя лес граблей непроходимый)
Пришла пора узнать, что такое "отладка". Поставьте на начало расчетов breakpoint и выполняйте дальше построчно, наблюдая за значениями переменных.
Хм.. . Проблема может быть только в выражении : \.
Подозреваю, что log - десятичный логарифм, да и вообще, тут возведение в ЦЕЛУЮ степень.
А в целую степень можно сравнительно быстро (за логарифмическое :)) время) возвести так.
Допустим, нужно a^11. Степень (т. е. число 11) представим в двоичном виде: 1011. Т. е. 0-й, 1-й и 3-й биты - единичные.
Начнём строить последовательные степени:
a0 = a
a1 = a0^2 (=a^2)
a2 = a1^2 (=a^4)
a3 = a2^2 (=a^8)
Нам нужны нулевой, первый и третий: result = a0*a1*a3. Таким образом использовали 5 умножений вместо 10. Хотя e^(b*ln a) скорее всего быстрее сработает. Но для небольших степеней вполне.