Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

МЕТОД ПОЛОВИННОГО ДЕЛЕНИЯ

Ivan Ivanov Ученик (95), закрыт 8 месяцев назад
Надо решить методом половинного деления x^3+4x-4=0
Лучший ответ
Ксения Райт Гений (82374) 9 месяцев назад
Пишем код:
 def y(x): return x**2 * (x + 4) - 4 
a, b, n = 0, 1, 0; print(51 * '=')
print(' № x y(x)=x³+4x-4')
print('=' * 51)
while b - a > 1e-16:
x = (a + b) / 2; n += 1; yx = y(x)
print('%2d)%22.16f%26.16e' % (n, x, yx))
if yx == 0: break
if yx > 0: b = x
else: a = x
print(51 * '=')
Запускаем его и получаем результат:По таблице видно как работает метод половинного деления. В начале берём отрезок [a;b]=[0;1], так как f(0)=-4, f(1)=1 и единственный действительный корень уравнения f(x)=x³+4x-4=0 находится находится именно в этом отрезке. Если значение в средней точке отрезка х=(a+b)/2 положительно, то b=x, иначе если отрицательно, то a=x. Если f(x)=0, то корень найден и дальнейший поиск прекращается.
Владимир ВтюринВысший разум (101676) 9 месяцев назад
А у меня почему-то другой корень... С точностью до 3 знаков X = 0,848 :(((
Ксения Райт Гений (82374) Владимир Втюрин, видно же, что x*x*(x+4)-4 вместо x*(x*x+4)-4. А что? Вообще до лампочки. В вопросе нет ничего серьёзного - серьёзные вопросы надо по серьёзному и задавать! Нет также у Автора ни лайков, ни даже дислайков, что говорит о чём? Правильно: вопрос ни о чём и никакие ответы (правильные, неправильные, серьёзные или дурацкие) Автора вопроса совершенно не интересуют!
Ксения РайтГений (82374) 9 месяцев назад
Вот правильно написанный код на Пайтоне3 конкретно к решению этого уравнения:
 def y(x): return x * (x * x + 4) - 4 
a, b, n = 0, 1, 0; print(51 * '=')
print(' № x y(x)=x³+4x-4')
print('=' * 50)
while True:
x = (a + b) / 2; n += 1; yx = y(x)
print('%2d)%22.15f%25.15e' % (n, x, yx))
if abs(yx) < 1e-15: break
if yx > 0: b = x
else: a = x
print(50 * '=')
Результат такой:В вопросе не указаны ни область поиска корней (ℝ или ℂ), ни требуемая точность, ни инструментальное средство для решения задачи (а может её, эту задачу, вообще надо решать в ручную и нельзя пользоваться ничем кроме простенького калькулятора - откуда нам знать?). А раз такое пренебрежение самым важным, то и любая серьёзность и ответственность в ответах совсем не обязательна.
Остальные ответы
Сладкий хлеб в тарелке�̳̦ͣ̿ͭ͘ ! Мудрец (12646) 9 месяцев назад
Царь Соломон приказал принести меч и разделить живое дитя между обеими матерями — разрубить его пополам. Услышав это, первая женщина закричала, чтобы ребенка отдали соседке, лишь бы он остался цел. Вторая не перечила царю: «Пусть же будет ни мне, ни тебе, рубите», — сказала она. Люди сразу поняли, кто из них обманщица.
#aichatbot +humcor Профи (556) 9 месяцев назад
Метод половинного деления (метод бисекции) заключается в последовательном делении отрезка, на котором гарантировано существует корень, пополам и выборе той части, на которой знаки функции на концах отрезка разные.

Изначально зададим отрезок [a, b], на котором будет искаться корень уравнения x^3+4x-4=0, например [-10, 10], так как функция принимает на этом отрезке значения разных знаков.

Далее находим середину отрезка:

c = (a + b) / 2 = ( -10 + 10 ) / 2 = 0

Вычисляем значение функции в точке c:

f(c) = 0^3 + 4*0 - 4 = -4

Знак на концах отрезка разный, поэтому корень уравнения находится на этом отрезке.

Далее проверяем знак функции в точках a и c:

f(a) = (-10)^3 + 4*(-10) - 4 = -1064
f(c) = -4

Знаки функции на концах отрезка разные, следовательно, корень уравнения находится на отрезке [a, c]. Продолжаем процесс деления отрезка пополам до тех пор, пока не найдём корень с заданной точностью.

Повторяем процедуру для отрезка [a, c]:

c1 = (a + c) / 2 = ( -10 + 0 ) / 2 = -5
f(c1) = (-5)^3 + 4*(-5) - 4 = 11

Знаки функции на концах отрезка не разные, следовательно, корень уравнения находится на отрезке [c1, c].

Повторяем процедуру для отрезка [c1, c]:

c2 = (c1 + c) / 2 = ( -5 + 0 ) / 2 = -2.5
f(c2) = (-2.5)^3 + 4*(-2.5) - 4 = -1.375

Знаки функции на концах отрезка разные, следовательно, корень уравнения находится на отрезке [c2, c].

И так далее, пока не будет достигнута заданная точность. Например, пока длина отрезка, на котором находится корень, не станет меньше заданной величины eps.
Владимир ВтюринВысший разум (101676) 9 месяцев назад
БОТ, а БОТ! Болтать ты здорово умеешь!!! Но тебя, БОТ, просили найти корни уравнения x³ + 4x - 4 = 0.
Ну и где решение, умненький БОТ? Отсутствует! Ну и зачем ты так долго и красноречиво здесь болтал, БОТ??? :))))
Владимир Втюрин Высший разум (101676) 9 месяцев назад
Действительное решение уравнения x³ + 4x - 4 = 0:
X = 0,848
Существуют и 2 мнимых корня, но это нас не касается :)))

PascalABC:
function F (x : real): real;
begin F := x*sqr(x) + 4*x - 4; end;
var a, b, c, x, e : real; k : integer;
begin
a := -1; b:= 2; e := 0.001;
Write (' Интервал a = ', a, ' ; b = ', b, '; Tочность вычислений = ', e);
WriteLn;
k := round (ln(1/e)/ln(10));
Writeln (' Решение уравнения : ');
WriteLn (' на интервале [',a:0:1,';',b:0:1,'] с погрешностью ',e:0:k);
repeat
c := (a+b)/2;
if F(a)*F(c) <= 0 then b:=c else a:=c;
until abs(b-a) < e;
x:=(a+b)/2;
Writeln(' x = ', x:0:k);
end.

Владимир ВтюринВысший разум (101676) 9 месяцев назад
Если кого интересуют и комплексные корни, то:
x2 = - 0.424 + i*2.130
x3 = - 0.424 - i*2.130
Похожие вопросы