|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
13.11.2010, 11:55 | #1 (permalink) |
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); 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. |
13.11.2010, 11:55 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посмотрите похожие топики, может что то проясниться Решить систему уравнений методом Ньютона, Pascal Половинное деление, метод ньютона, Pascal Программа нахождения площади кольца Определить функцию нахождения площади треугольника по координатам его вершин Разработать прикладное дополнение для решения нелинейных уравнений методом Ньютона Метод Ньютона и Хука-Дживса |
13.11.2010, 13:10 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
1. Уберите в теле функции Newton повторное введение файловой переменной t - она должна остаться ТОЛЬКО в списке глобальных переменных. 2. В той же функции знак неравенства в условии выхода из цикла должен быть обратным тому, что у Вас, т.е. цикл прерывается, когда разность становится МЕНЬШЕ е. 3. Из тела того же цикла в той же процедуре уберите экранный вывод - только мешает и путает. 4. Исходное значение следует брать близким к искомому корню, например 0.1, ну можно 0.2. Если взять сильно отличающееся, то программа найдет другой корень или вовсе пойдет в разнос. Вроде всё. Удачи! |
|
13.11.2010, 16:59 | #3 (permalink) |
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. |
13.11.2010, 19:07 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Естественно, не пишет! У меня она в таком виде даже не запускается. А всё потому, что Вы проигнорировали пункт 1 в предыдущем посте. Еще раз: уберите строку t:text из функции Newton. Поймите: как только программа обращается к функции, она, видя "t:text" в списке переменных функции, тут же "забывает" о том, что в основном теле Вы уже ввели файл и открыли его, и ждет, что Вы это сделаете повторно.
Начните с этого, дальше будем разбираться. Кстати, список ГЛОБАЛЬНЫХ переменных принято размещать не после, а до описания процедур и функций. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.11.2010, 19:40 | #6 (permalink) |
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. |
16.04.2011, 18:51 | #10 (permalink) |
Новичок
Регистрация: 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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|