Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Закрытая тема
 
Опции темы Опции просмотра
Старый 13.11.2010, 11:55   #1 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Метод Ньютона нахождения корня на Паскале

Здравствуйте. Помогите, пожалуйста разобраться с программой. Дано уравнение f(x)=1+sin(x)-1.14*exp(-x). Найти наименьший корень уравнения с точностью е=0.00005, используя метод Ньютона. И вывести х0, х1, х2,...,хn. То есть вывести эти приближенные корни, которая прога считает в процессе и мне выдает окончательный результат. Прога считает неправильно. Не пойму в чем дело. Ответ должен быть примерно 0.0666.
Код:
uses crt;
function F(x:real):real;
begin
F:=1+sin(x)-1.14*exp(-x);
end;
function F1(x:real):real;
begin
F1:=cos(x)+1.14*exp(-x);
end;
function Newton(x1,e:real):real;
var x2,b:real;
    t:text;
begin
x2:=x1;
repeat
b:=x2;
x2:=b-F(b)/F1(b);
writeln(x2);
writeln(t,'iteraziia ');
writeln(t,x2);
until abs(x2-b)>e;
Newton:=x2;
end;
var x0,eps:real;
    t:text;
begin
clrscr;
assign(t,'C:\z2.txt');
rewrite(t);
write('vvedite nachalnoe priblizenie x0=');
readln(x0);
write('vvedite tochnost eps=');
readln(eps);
write('X=',Newton(x0,eps):6:7);
readln;
close(t);
end.
Veina вне форума  

Старый 13.11.2010, 11:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите похожие топики, может что то проясниться

Решить систему уравнений методом Ньютона, Pascal
Половинное деление, метод ньютона, Pascal
Программа нахождения площади кольца
Определить функцию нахождения площади треугольника по координатам его вершин
Разработать прикладное дополнение для решения нелинейных уравнений методом Ньютона
Метод Ньютона и Хука-Дживса

Старый 13.11.2010, 13:10   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,843
Сказал(а) спасибо: 317
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Veina Посмотреть сообщение
Здравствуйте. Помогите, пожалуйста разобраться с программой. Дано уравнение f(x)=1+sin(x)-1.14*exp(-x). Найти наименьший корень уравнения с точностью е=0.00005, используя метод Ньютона. И вывести х0, х1, х2,...,хn. То есть вывести эти приближенные корни, которая прога считает в процессе и мне выдает окончательный результат. Прога считает неправильно. Не пойму в чем дело. Ответ должен быть примерно 0.0666.
Да нет, правильно, это и выдает. Если, конечно, исправить несколько ошибок:
1. Уберите в теле функции Newton повторное введение файловой переменной t - она должна остаться ТОЛЬКО в списке глобальных переменных.
2. В той же функции знак неравенства в условии выхода из цикла должен быть обратным тому, что у Вас, т.е. цикл прерывается, когда разность становится МЕНЬШЕ е.
3. Из тела того же цикла в той же процедуре уберите экранный вывод - только мешает и путает.
4. Исходное значение следует брать близким к искомому корню, например 0.1, ну можно 0.2. Если взять сильно отличающееся, то программа найдет другой корень или вовсе пойдет в разнос.
Вроде всё.
Удачи!
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума  
Старый 13.11.2010, 16:59   #3 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Код:
uses crt;
function F(x:real):real;
begin
F:=1+sin(x)-1.14*exp(-x);
end;
function F1(x:real):real;
begin
F1:=cos(x)+1.14*exp(-x);
end;
function Newton(x1,e:real):real;
var x2,b:real;
    t:text;
begin
x2:=x1;
repeat
b:=x2;
x2:=b-F(b)/F1(b);
writeln(x2);
assign (t,'C:\z2.txt');
rewrite(t);
writeln(t,'iteraziia ');
writeln(t,x2);
until abs(x2-b)<e;
Newton:=x2;
end;
var x0,eps:real;
    t:text;
begin
clrscr;
assign(t,'C:\z2.txt');
rewrite(t);
write('vvedite nachalnoe priblizenie x0=');
readln(x0);
write('vvedite tochnost eps=');
readln(eps);
write('X=',Newton(x0,eps):9:4);
readln;
close(t);
end.
да, все работает. спасибо. последний вопрос. ответ выдается с числом Е в конце. как от него избавится? оставить только 7 знаков после запятой?
Veina вне форума  
Старый 13.11.2010, 17:10   #4 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

и в файл все таки не пишет...(((
Veina вне форума  
Старый 13.11.2010, 19:07   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,843
Сказал(а) спасибо: 317
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Veina Посмотреть сообщение
и в файл все таки не пишет...(((
Естественно, не пишет! У меня она в таком виде даже не запускается. А всё потому, что Вы проигнорировали пункт 1 в предыдущем посте. Еще раз: уберите строку t:text из функции Newton. Поймите: как только программа обращается к функции, она, видя "t:text" в списке переменных функции, тут же "забывает" о том, что в основном теле Вы уже ввели файл и открыли его, и ждет, что Вы это сделаете повторно.
Начните с этого, дальше будем разбираться.
Кстати, список ГЛОБАЛЬНЫХ переменных принято размещать не после, а до описания процедур и функций.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 13.11.2010, 19:40   #6 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Код:
uses crt;
var t:text;
    x0,eps:real;
function F(x:real):real;
begin
F:=1+sin(x)-1.14*exp(-x);
end;
function F1(x:real):real;
begin
F1:=cos(x)+1.14*exp(-x);
end;
function Newton(x1,e:real):real;
var x2,b:real;
begin
x2:=x1;
repeat
b:=x2;
x2:=b-F(b)/F1(b);
writeln(x2);
assign (t,'C:\z2.txt');
rewrite(t);
writeln(t,'iteraziia ');
writeln(t,x2);
until abs(x2-b)<e;
Newton:=x2;
end;

begin
clrscr;
assign(t,'C:\z2.txt');
rewrite(t);
write('vvedite nachalnoe priblizenie x0=');
readln(x0);
write('vvedite tochnost eps=');
readln(eps);
write('X=',Newton(x0,eps):9:4);
readln;
close(t);
end.
так?
Veina вне форума  
Старый 13.11.2010, 19:43   #7 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,843
Сказал(а) спасибо: 317
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Veina Посмотреть сообщение
так?
Так! Только вот формат вывода :9:4 представляется не очень удачным в данном случае. Лучше :9:7.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума  
Старый 13.11.2010, 19:50   #8 (permalink)
Veina
Member
 
Регистрация: 10.11.2010
Сообщений: 12
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

все. спасибо большушчее за помощь )
Veina вне форума  
Старый 13.11.2010, 19:51   #9 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,843
Сказал(а) спасибо: 317
Поблагодарили 542 раз(а) в 183 сообщениях
Репутация: 101510
По умолчанию

Цитата:
Сообщение от Veina Посмотреть сообщение
все. спасибо большушчее за помощь )
Не за что. Чем можем, как говорится.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума  
Старый 16.04.2011, 18:51   #10 (permalink)
nicni
Новичок
 
Регистрация: 16.04.2011
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Всем привет! помогите пожалуйста, я с подобным вопросом:

найти корень урав-я (уточнив при необхо-ти диапазон [A-B]). 10.31*ln(x+10.42)+40.01=0 на отрезке от A=-9.35943 до B=-10.42000 методом касательных. точность решения EPS:0.000097.
nicni вне форума  
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Закрытая тема

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.