IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Метод Ньютона
Merhaba
сообщение 13.12.2011 20:56
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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

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

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

Сообщение отредактировано: Merhaba - 13.12.2011 21:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
IUnknown
сообщение 13.12.2011 23:20
Сообщение #2


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


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

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 - 13.12.2011 23:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Merhaba
сообщение 14.12.2011 5:13
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


Цитата(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

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


нужно взять подлогарифное выражение по модулю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 14.12.2011 11:32
Сообщение #4


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Нет, просто нельзя брать логарифмы от отрицательных чисел. Начальное приближение должно быть таким, чтобы при вычислении функции не надо было делать запрещенных вещей. От 2.8 до 3.4 программа прекрасно отрабатывает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Merhaba
сообщение 14.12.2011 13:34
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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

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

У меня почему-то компилятор работает только при x0=3.. при других значениях, он выдаёт exited with exitcode = 207
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 14.12.2011 13:46
Сообщение #6


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Значит, проверяй, правильно ли вычисляется производная в твоей программе. Похоже, что нет...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Merhaba
сообщение 14.12.2011 14:05
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 57
Пол: Мужской

Репутация: -  0  +


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

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

производную я на листочке считал.. а что тут неправильно, подскажите Пожалуйста smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 14.12.2011 14:26
Сообщение #8


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Ну, и чему производная "на листочке" равна? Вот этому:
Прикрепленное изображение
?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 14.12.2011 15:20
Сообщение #9


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 13:04
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"