![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Пользователь
Регистрация: 18.11.2007
Сообщений: 67
|
![]()
Пожалуйста помогите решить задачу
необходимо решить с функцией, а потом с процедурой Вычисление корня уравнения методом деления отрезка пополам Напишите программу, которая находит корень уравнения вида f(x) = 0 методом деления отрезка пополам с заданной точностью E. Нас интересует интервал [a, b], на котором функция непрерывна и монотонна и на концах интервала принимает значения разных знаков. Тогда на этом интервале функция имеет ровно один корень и его можно приблизительно определить следующим образом. Разделить интервал [а, b] на две части точкой x = (а + b) / 2 и вычислить значение f(x). После этого из двух получавшихся интервалов [а, x] и [x, b] рассматривать тот, на концах которого функция принимает значения разных знаков, именно он содержит корень. Продолжить процесс поиска корня для вновь образованного интервала. Процесс будет закончен, когда длина очередного интервала станет меньше значения E. Следовательно, любая точка интервала будет представлять значение корня с точностью eps. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
![]()
У тебя ведь все написано
Код:
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 18.11.2007
Сообщений: 67
|
![]()
Требуется написать с процедурой и функцией
я вот написал но что-то компу не нравится program rabot; {$APPTYPE CONSOLE} uses SysUtils; Var a,b,e,x:real; function Y(x:real): real; begin y:=-cos(exp(0.49*ln(x))+sqrt(30/7))+exp(1/5*ln(x))/x-x;; end; procedure KOR (A,b,e : real); begin if a<b then if y(a)*y(b)>0 then write ('HET KOPHEU') else begin while abs(a-b)>=2*E do begin x:=(a+b)/2; if y(a)*y(b)>0 then b:=x else a:=x; BEGIN x:=(a+b)/2; writeln('x=', x) ; BEGIN end else writeln('vod nevepen'); readln; END; end; END ; end; Begin writeln('a='); readln(a); writeln('b='); readln(b); writeln('E='); readln(E); KOR(A,b,e); readln; end. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
![]()
Немного поправил
Код:
Последний раз редактировалось _Dmitry; 24.11.2007 в 17:34. |
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 18.11.2007
Сообщений: 67
|
![]()
В задаче говорят подставьте значения a=0 b=2 e=0.0004
При вводе этих данных программа пролистывается и вылетает. Вроде readln'ы везде есть. *********************************** ***** Программа вылетает только если а=0 , при подставлении других значений она работает. Странно.. Может в программе имеено этот случай не предусмотрен? |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
Возможно у Вас неправильно записана функция или интервал. При a=0 неопределен lnx. И вообще эта функция не имеет корня в интервале [0,2].
Вот расчеты в Excel : |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 18.11.2007
Сообщений: 67
|
![]()
Как я теперь понял при а=0, X в степени 0.49 , записанный в виде
exp(0.49*ln(x)) не высчитывается т.к lnx не определен. Как же тогда записать X в степени 0.49 без натурального логарифма? |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
Здесь ведь еще и деление на х=0.
Обычно вводят условие if x=0 then f(x):=0 else ... В данном случае можно ввести дополнительные переменные, например: Код:
Последний раз редактировалось puporev; 24.11.2007 в 21:03. |
![]() |
![]() |
![]() |
#9 | |
Участник клуба
Регистрация: 02.09.2007
Сообщений: 1,193
|
![]()
Цитирую условие вашей задачи:
Цитата:
В Excel задача решена не правильно (см. столбец "D"), там вычисляется значение exp(0.49)*lnx, а в вашей функции exp(0.49*ln(x)). |
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 13.10.2007
Сообщений: 2,740
|
![]()
Извиняюсь, ошибся. Однако корень этой функции лежит в интервале [2.5,3.0]. (проверял с шагом 0.5)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Решение нелинейного уравнения методом Ньютона | Tina | Общие вопросы C/C++ | 2 | 04.06.2008 21:48 |
текст программы для решения нелинейного уравнения методом простых итераций | Dyst | Помощь студентам | 2 | 14.05.2008 22:00 |
Движение окружности и отрезка. | Ev@ngel | Компоненты Delphi | 0 | 18.04.2008 22:16 |
Определить длину отрезка во 2-м квадранте системы координат | kolduev | Помощь студентам | 9 | 13.02.2008 17:45 |
Проверка деления на ноль (Как проверить?) | Moonka | Помощь студентам | 10 | 23.04.2007 19:41 |