Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Метод Ньютона

Автор: Merhaba 14.12.2011 0:56

Добрый Вечер!!! Помогите Пожалуйста устранить ошибку!

program MetodNuytona;
const eps = 1e-6;
var x,x0: real;
Function f(x: real): real;
begin
f:=ln(exp(ln(2)*x)-5)/ln(3)+ln(exp(ln(2)*x)-7)/ln(3)-1;
end;
Function f1(x: real): real;
begin
f1:=exp(ln(2)*x)*ln(2)/((exp(ln(2)*x)-5)*ln(3)+exp(ln(2)*x)*ln(2))/((exp(ln(2)*x)-5)*ln(3));
end;
Begin
writeln;
writeln('Решение нелинейного уравнения f(x)=0');
writeln;
write('x0 = ');
read(x0);
writeln;
x:=x0;
repeat
x:=x-f(x)/f1(x);
until abs(f(x)/f1(x))<eps;
writeln('Метод Ньютона**:');
writeln;
writeln('x=',x:8:5);
End.



Free Pascal почему-то работает только с x0=3 (исключительно с ним)..
Выражение:

log_3(2^x-5)+log_3(2^x-7)=1

Где может быть ошибка?

Автор: IUnknown 14.12.2011 3:20

Цитата
Где может быть ошибка?
Наверное, в основах математики, запрещающих брать логарифм от отрицательного числа?

program MetodNuytona;
uses math;
const
eps = 1e-6;


function f(x: real): real;
begin
writeln('x = ', x:10:5,
'| 2^x - 5 = ', (power(2, x) - 5):10 :5,
'| 2^x - 7 = ', (power(2, x) - 7):10 :5);
f := logn(3, power(2, x) - 5) +
logn(3, power(2, x) - 7) - 1;
end;
function f1(x: real): real;
begin
f1 := ( power(2, x + 1) * (power(2, x) - 6) * ln(2) ) /
( (power(2, x) - 7) * (power(2, x) - 5) * ln(3) );
end;

var
x, x0 : real;
begin
writeln;
writeln('Решение нелинейного уравнения f(x)=0');
writeln;
write('x0 = '); readln(x0);
writeln;
x:=x0;
repeat
x:=x-f(x)/f1(x);
until abs(f(x)/f1(x))<eps;
writeln('Метод Ньютона**:');
writeln;
writeln('x=',x:8:5);
end.

, и
Решение нелинейного уравнения f(x)=0

x0 = 5

x = 5.00000| 2^x - 5 = 27.00000| 2^x - 7 = 25.00000
x = 1.83035| 2^x - 5 = -1.44377| 2^x - 7 = -3.44377
An unhandled exception occurred at $0040FD20 :
EInvalidOp : Invalid floating point operation

ни на какие мысли не наводит?

Автор: Merhaba 14.12.2011 9:13

Цитата(IUnknown @ 13.12.2011 23:20) *

Наверное, в основах математики, запрещающих брать логарифм от отрицательного числа?

program MetodNuytona;
uses math;
const
eps = 1e-6;
function f(x: real): real;
begin
writeln('x = ', x:10:5,
'| 2^x - 5 = ', (power(2, x) - 5):10 :5,
'| 2^x - 7 = ', (power(2, x) - 7):10 :5);
f := logn(3, power(2, x) - 5) +
logn(3, power(2, x) - 7) - 1;
end;
function f1(x: real): real;
begin
f1 := ( power(2, x + 1) * (power(2, x) - 6) * ln(2) ) /
( (power(2, x) - 7) * (power(2, x) - 5) * ln(3) );
end;

var
x, x0 : real;
begin
writeln;
writeln('Решение нелинейного уравнения f(x)=0');
writeln;
write('x0 = '); readln(x0);
writeln;
x:=x0;
repeat
x:=x-f(x)/f1(x);
until abs(f(x)/f1(x))<eps;
writeln('Метод Ньютона**:');
writeln;
writeln('x=',x:8:5);
end.

, и
Решение нелинейного уравнения f(x)=0

x0 = 5

x = 5.00000| 2^x - 5 = 27.00000| 2^x - 7 = 25.00000
x = 1.83035| 2^x - 5 = -1.44377| 2^x - 7 = -3.44377
An unhandled exception occurred at $0040FD20 :
EInvalidOp : Invalid floating point operation

ни на какие мысли не наводит?


нужно взять подлогарифное выражение по модулю?

Автор: IUnknown 14.12.2011 15:32

Нет, просто нельзя брать логарифмы от отрицательных чисел. Начальное приближение должно быть таким, чтобы при вычислении функции не надо было делать запрещенных вещей. От 2.8 до 3.4 программа прекрасно отрабатывает.

Автор: Merhaba 14.12.2011 17:34

Цитата(IUnknown @ 14.12.2011 11:32) *

Нет, просто нельзя брать логарифмы от отрицательных чисел. Начальное приближение должно быть таким, чтобы при вычислении функции не надо было делать запрещенных вещей. От 2.8 до 3.4 программа прекрасно отрабатывает.

У меня почему-то компилятор работает только при x0=3.. при других значениях, он выдаёт exited with exitcode = 207

Автор: IUnknown 14.12.2011 17:46

Значит, проверяй, правильно ли вычисляется производная в твоей программе. Похоже, что нет...

Автор: Merhaba 14.12.2011 18:05

Цитата(IUnknown @ 14.12.2011 13:46) *

Значит, проверяй, правильно ли вычисляется производная в твоей программе. Похоже, что нет...

производную я на листочке считал.. а что тут неправильно, подскажите Пожалуйста smile.gif

Автор: IUnknown 14.12.2011 18:26

Ну, и чему производная "на листочке" равна? Вот этому:
Прикрепленное изображение
?

Автор: TarasBer 14.12.2011 19:20

Так это вроде то же самое, только к общему знакменателю приведено.

Автор: buy stromectol online no prescri 3.11.2021 10:11

Buy Brand Valtrex

Автор: prednisone over the counter walg 11.11.2021 6:13

Buy Cheap Viagra Online

Автор: hydroxychloroquine and azithromy 20.12.2021 8:20

Viagra Naturale Femminile