![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Merhaba |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: ![]() ![]() ![]() |
Добрый Вечер!!! Помогите Пожалуйста устранить ошибку!
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 |
![]() ![]() |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Где может быть ошибка? Наверное, в основах математики, запрещающих брать логарифм от отрицательного числа?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 ни на какие мысли не наводит? Сообщение отредактировано: IUnknown - 13.12.2011 23:21 |
Merhaba |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: ![]() ![]() ![]() |
Наверное, в основах математики, запрещающих брать логарифм от отрицательного числа? 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 ни на какие мысли не наводит? нужно взять подлогарифное выражение по модулю? |
IUnknown |
![]()
Сообщение
#4
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нет, просто нельзя брать логарифмы от отрицательных чисел. Начальное приближение должно быть таким, чтобы при вычислении функции не надо было делать запрещенных вещей. От 2.8 до 3.4 программа прекрасно отрабатывает.
|
Merhaba |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нет, просто нельзя брать логарифмы от отрицательных чисел. Начальное приближение должно быть таким, чтобы при вычислении функции не надо было делать запрещенных вещей. От 2.8 до 3.4 программа прекрасно отрабатывает. У меня почему-то компилятор работает только при x0=3.. при других значениях, он выдаёт exited with exitcode = 207 |
IUnknown |
![]()
Сообщение
#6
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Значит, проверяй, правильно ли вычисляется производная в твоей программе. Похоже, что нет...
|
Merhaba |
![]()
Сообщение
#7
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
IUnknown |
![]()
Сообщение
#8
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
|
TarasBer |
![]()
Сообщение
#9
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так это вроде то же самое, только к общему знакменателю приведено.
-------------------- |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 8:28 |