Помощь - Поиск - Пользователи - Календарь
Полная версия: метод половинного деления
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость
здарвствуйте, мне нужно решить ур-е х^3 + 2x^2 - 11 = 0 методом половинного деления
TarasBer
> здарвствуйте, мне нужно решить ур-е х^3 + 2x^2 - 11 = 0 методом половинного деления

мы не возаржаем
Гость
Цитата(TarasBer @ 9.11.2011 10:53) *

> здарвствуйте, мне нужно решить ур-е х^3 + 2x^2 - 11 = 0 методом половинного деления

мы не возаржаем

не могли бы помочь?)
TarasBer
http://markx.narod.ru/div/
Гость
Спасибо,но я уже был на этой ссылке...но увы она мне мало что дала. я могу решить ээто уравнение обычным способом..но ввиде программы для меня это темный лес ((
TarasBer
Тогда я больше ничем не могу помочь. Купите самоучитель по Паскалю, может, станет понятнее.
мисс_граффити
сам алгоритм метода понятен? то есть вручную этим методом решить сможешь?

по ссылке же программа готовая есть, кстати...
Гость
Цитата(мисс_граффити @ 9.11.2011 19:35) *

сам алгоритм метода понятен? то есть вручную этим методом решить сможешь?

по ссылке же программа готовая есть, кстати...

Да вручную могу и корень ур-я будет 1,719666 Но как это решить в паскале. беда)
Shmanich
Мой вариант решения:

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 корня! Как сделать так, чтобы программа хотя бы сообщала, что «в данном интервале найдено более одного корня, рекомендуется сузить границы интервала», или выводила все три??? Помогите, пожалуйста
@nto$ka
ну чтобы выводила все три...
обычно, с помощью точек экстремума находят промежутки, на которых функция меняет знак. Например, одна точка экстремума 5 а вторая -5. Таким образом, где-то между ними функция была равна нулю. В этом промежутке корень и ищут.
Shmanich
Цитата(@nto$ka @ 17.12.2012 23:39) *

ну чтобы выводила все три...
обычно, с помощью точек экстремума находят промежутки, на которых функция меняет знак.


А подробнее можно? Желательно с кодом.
@nto$ka
Цитата(Shmaniche @ 18.12.2012 9:00) *

А подробнее можно? Желательно с кодом.


Ну с кодом-то мы все не против))

Точка экстремума, это точка, где функция меняет свое стремление. Между точками 1 и 2 функция стремится вниз, а между точками 2 и 3 она стремится вверх. Поэтому точка 2 является производной. Собственно все отмеченные здесь точки являются экстремумами.

Тебе нужно найти точки экстремума, и если точка 1 и 2 имеют разные знаки, значит на этом отрезке функция прошла через ноль, значит, здесь и стоит искать корень.

Добавлено через 8 мин.
А сейчас не запутайся, ибо я объясняю бестолково sad.gif

Де-факто, точки экстремума - это нули производной. Отсюда вытекает: чтобы найти экстремумы, надо найти производную от твоего уравнения и приравнять к нулю.
НО среди полученных корней может оказаться "мусор". Чтобы понять, какие точки экстремальны, необходимо посмотреть знаки промежутков. Если знаки до точки и после точки различны, то точка является экстремумом
Shmanich
Цитата(@nto$ka @ 18.12.2012 16:20) *


Де-факто, точки экстремума - это нули производной. Отсюда вытекает: чтобы найти экстремумы, надо найти производную от твоего уравнения и приравнять к нулю.
НО среди полученных корней может оказаться "мусор". Чтобы понять, какие точки экстремальны, необходимо посмотреть знаки промежутков. Если знаки до точки и после точки различны, то точка является экстремумом


Я знаю как найти экстремумы, но как это описать в Паскале и приделать к своей программе пока не могу сообразить.
@nto$ka
Если ты найдешь производную от кубического уравнения, получишь квадратное Неужели, в самом деле сложно решить квадратное уравнение? Я думаю, что производную можно найти и вручную
Shmanich
Цитата(@nto$ka @ 18.12.2012 20:35) *

Если ты найдешь производную от кубического уравнения, получишь квадратное Неужели, в самом деле сложно решить квадратное уравнение? Я думаю, что производную можно найти и вручную


Квадратное уравнение я знаю как решать, но как это все к своему коду приделать пока не пойму. 10.gif
Гость
Нужно решить нелинейное уравнение методом половинного деления
sin(ln x)-cos(ln x)+2 ln x=0
Гость
не могли бы помочь
Гость
Не получается написать программу в Паскале..Нужна ваша помощь
Федосеев Павел
А что там помогать-то?
1. Зайди на страничку FAQ (ссылка выделена красным цветом на верху этой страницы)
2. На 2-й странице "Численные методы решения уравнений"
3. Метод половинного деления
4. Скопировать и заменить формулу уравнения.
Гость
Спасибо попробуем)составлять программу на паскале не получается,там же еще нужно график строить.
Гость
именно этот график не получается построить(не подскажите
Федосеев Павел
Давай, регайся.

Не знаю, почему - телепаты пьяные под ёлкой валяются... smile.gif

Показывай, на чём остановился.
Гость
на 1 странице самый последний текст,почему то не получается построить
Гость
помогите пожалуйста)очеень нужно.
Федосеев Павел
Ты упорно игнорируешь всё, что я говорю.
1. Регистрируйся на форуме. Иначе это проявление неуважения.
2. Я не знаю, на каком коде ты остановился, что у тебя не получается, с какими ошибками. Приводи свой итоговый вариант, уточни компилятор, описывай конкретные проблемы. Для вставки кода в сообщение пользуйся тегами-кнопками CODE (лучше выбрать вариант none - у других проблемы с автозаменой), закрытие тега - кнопка # (решётка). Без кода я гадать не буду.

"Я понятно объяснил?" (© Добрыня Никитич).
is it illegal to buy lasix onlin
using levitra everyday
buy hydroxychloroquine sulfate o
Vaginal Irritation And Amoxicillin 500
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.