Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ метод половинного деления

Автор: Гость 9.11.2011 14:48

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

Автор: TarasBer 9.11.2011 14:53

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

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

Автор: Гость 9.11.2011 15:38

Цитата(TarasBer @ 9.11.2011 10:53) *

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

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

не могли бы помочь?)

Автор: TarasBer 9.11.2011 15:57

http://markx.narod.ru/div/

Автор: Гость 9.11.2011 16:37

Спасибо,но я уже был на этой ссылке...но увы она мне мало что дала. я могу решить ээто уравнение обычным способом..но ввиде программы для меня это темный лес ((

Автор: TarasBer 9.11.2011 17:04

Тогда я больше ничем не могу помочь. Купите самоучитель по Паскалю, может, станет понятнее.

Автор: мисс_граффити 9.11.2011 23:35

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

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

Автор: Гость 11.11.2011 21:33

Цитата(мисс_граффити @ 9.11.2011 19:35) *

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

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

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

Автор: Shmaniche 17.12.2012 23:20

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


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 17.12.2012 23:39

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

Автор: Shmaniche 18.12.2012 9:00

Цитата(@nto$ka @ 17.12.2012 23:39) *

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


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

Автор: @nto$ka 18.12.2012 16:20

Цитата(Shmaniche @ 18.12.2012 9:00) *

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


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

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

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

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

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


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Shmaniche 18.12.2012 16:36

Цитата(@nto$ka @ 18.12.2012 16:20) *


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


Я знаю как найти экстремумы, но как это описать в Паскале и приделать к своей программе пока не могу сообразить.

Автор: @nto$ka 18.12.2012 20:35

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

Автор: Shmaniche 19.12.2012 21:28

Цитата(@nto$ka @ 18.12.2012 20:35) *

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


Квадратное уравнение я знаю как решать, но как это все к своему коду приделать пока не пойму. 10.gif

Автор: Гость 4.01.2015 19:33

Нужно решить нелинейное уравнение методом половинного деления
sin(ln x)-cos(ln x)+2 ln x=0

Автор: Гость 4.01.2015 19:35

не могли бы помочь

Автор: Гость 4.01.2015 19:38

Не получается написать программу в Паскале..Нужна ваша помощь

Автор: Федосеев Павел 4.01.2015 22:53

А что там помогать-то?
1. Зайди на страничку FAQ (ссылка выделена красным цветом на верху этой страницы)
2. На 2-й странице "Численные методы решения уравнений"
3. Метод половинного деления
4. Скопировать и заменить формулу уравнения.

Автор: Гость 5.01.2015 1:06

Спасибо попробуем)составлять программу на паскале не получается,там же еще нужно график строить.

Автор: Гость 5.01.2015 1:09

именно этот график не получается построить(не подскажите

Автор: Федосеев Павел 5.01.2015 1:37

Давай, регайся.

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

Показывай, на чём остановился.

Автор: Гость 5.01.2015 3:24

на 1 странице самый последний текст,почему то не получается построить

Автор: Гость 5.01.2015 4:10

помогите пожалуйста)очеень нужно.

Автор: Федосеев Павел 5.01.2015 14:37

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

"Я понятно объяснил?" (© Добрыня Никитич).

Автор: is it illegal to buy lasix onlin 8.11.2021 18:48

using levitra everyday

Автор: buy hydroxychloroquine sulfate o 4.12.2021 18:07

Vaginal Irritation And Amoxicillin 500