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

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

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

> метод половинного деления, решение уравнения
Гость
сообщение 9.11.2011 10:48
Сообщение #1


Гость






здарвствуйте, мне нужно решить ур-е х^3 + 2x^2 - 11 = 0 методом половинного деления
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Shmaniche
сообщение 17.12.2012 19:20
Сообщение #2


Пионер
**

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

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


Мой вариант решения:

program Dihotomia;

uses crt;

var a, b, c, eps, a1, b1: real;
k: integer;
ch: char;

function f(x:real): real;
begin
f:=2*x*x*x-3*x*x-12*x; {Вводим выражение для вычисления функции}
end;

begin
clrscr;
{Вывести условие задачи}
writeln('Решение уравнения "2x^3-3x^2-12x=0" методом дихотомии.');
writeln;
{Ввод исходных данных}
write ('Введите левую границу:'); read(a); {Введите левую границу интервала}
write ('Введите правую границу:'); read(b); {Введите правую границу интервала}
write ('Введите требуемую точность:'); read(eps); {Введите требуемую точность}
writeln;
writeln ('a=', a:3:7); {Вывод значения левой границы интервала}
writeln ('b=', b:3:7); {Вывод значения правой границы интервала}
writeln ('eps=', eps:3:7); {Вывод значения требуемой точности}
writeln;

a1:=a; b1:=b; {Запоминать исходные данные}
k:=0; {Счетчик повторений}

{Проверка введеных значений}
if (a1=b1) then
writeln('Ошибка! Левая часть интервала не должна равняться правой.');
if (a1>b1) then
writeln('Ошибка! Левая часть интервала не должна быть больше правой.');

{Цикл}
while abs(b-a) > eps {Пока условие больше точности...}
do {...выполять}
begin
k:=k+1; {Увел. счетчик на 1}
c:=(a+b)/2; {Узнаем середину интервала}
if f©=0 then {Если функция равно 0, то..}
begin
{... вывести точный корень}
writeln ('Уравнение на интервале (',a1:4:3, '; ',b1:4:3,') имеет точный корень x=', c:4:5);
break; {Прервать вывод, чтобы ответ не повторялся бесконечно}
end;
if f(a)*f©<0 then b:=c; {Если функция а умноженная на функцию с меньше 0, тогда c это b}
if f(a)*f©>0 then a:=c; {Если функция а умноженная на функцию с больше 0, тогда c это a}
end;

{Проверка и вывод значений}
begin
if (f©<>0) and (a1<=b1) then {Если функция c не равна 0 и
левая часть инт-ла меньше или равно правой,
тогда вывести результат, иначе сообщить точный корень}
begin
{Вывод корня на интервале}
writeln ('Уравнение на интервале (',a1:4:7, '; ',b1:4:7,') имеет корень x=', c:4:5);
writeln;
writeln ('Точность ',eps:4:7, ' достигнута за ' ,k, ' шага(ов)', '.');
end;
end;

readkey;

end.




Итак, если я введу диапазон от -10 до -1 и точность, например, 0,001, то примерный корень будет = -1,81134, что верно!
Если от 1 до 10, то корень будет равен 3,31262, что тоже верно!
Если от -1 до 1, то корень будет равен 0, что тоже верно!
Но если я задам диапазон от -10 до 10, то выведится только один корень = 0, что недостаточно для полного ответа, т.к. уравнение 2x^3-3x^2-12x=0 имеет 3 корня! Как сделать так, чтобы программа хотя бы сообщала, что «в данном интервале найдено более одного корня, рекомендуется сузить границы интервала», или выводила все три??? Помогите, пожалуйста
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Гость   метод половинного деления   9.11.2011 10:48
TarasBer   > здарвствуйте, мне нужно решить ур-е х^3 + 2x^...   9.11.2011 10:53
Гость   > здарвствуйте, мне нужно решить ур-е х^3 + 2x...   9.11.2011 11:38
TarasBer   http://markx.narod.ru/div/   9.11.2011 11:57
Гость   Спасибо,но я уже был на этой ссылке...но увы она м...   9.11.2011 12:37
TarasBer   Тогда я больше ничем не могу помочь. Купите самоуч...   9.11.2011 13:04
мисс_граффити   сам алгоритм метода понятен? то есть вручную этим ...   9.11.2011 19:35
Гость   сам алгоритм метода понятен? то есть вручную этим...   11.11.2011 17:33
Shmaniche   Мой вариант решения: program Dihotomia; uses crt...   17.12.2012 19:20
@nto$ka   ну чтобы выводила все три... обычно, с помощью точ...   17.12.2012 19:39
Shmaniche   ну чтобы выводила все три... обычно, с помощью то...   18.12.2012 5:00
@nto$ka   А подробнее можно? Желательно с кодом. Ну с код...   18.12.2012 12:20
Shmaniche   Де-факто, точки экстремума - это нули производно...   18.12.2012 12:36
@nto$ka   Если ты найдешь производную от кубического уравнен...   18.12.2012 16:35
Shmaniche   Если ты найдешь производную от кубического уравне...   19.12.2012 17:28
Гость   Нужно решить нелинейное уравнение методом половинн...   4.01.2015 15:33
Гость   не могли бы помочь   4.01.2015 15:35
Гость   Не получается написать программу в Паскале..Нужна ...   4.01.2015 15:38
Федосеев Павел   А что там помогать-то? 1. Зайди на страничку FAQ (...   4.01.2015 18:53
Гость   Спасибо попробуем)составлять программу на паскале ...   4.01.2015 21:06
Гость   именно этот график не получается построить(не подс...   4.01.2015 21:09
Федосеев Павел   Давай, регайся. Не знаю, почему - телепаты пьяные...   4.01.2015 21:37
Гость   на 1 странице самый последний текст,почему то не п...   4.01.2015 23:24
Гость   помогите пожалуйста)очеень нужно.   5.01.2015 0:10
Федосеев Павел   Ты упорно игнорируешь всё, что я говорю. 1. Регист...   5.01.2015 10:37


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

 



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