Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
-18 / 2 / 1
Регистрация: 06.03.2012
Сообщений: 47
1

Метод деления отрезка пополам (дихотомии) - Найти минимум функции

14.06.2015, 11:48. Показов 3107. Ответов 3
Метки нет (Все метки)

Найти минимум функции одной переменной x*x-2*x-2*cos(x) х[0.5;1] с точностью 10^(-6)
Собственно проблема вот в чем, при решении получается корень 1, но такого быть не может т.к точность очень маленькая. Помогите пожалуйста.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
  a, b, e, x, F1, F2, FM: real;
 
function F(xx: real): real;
begin
  F := x * x - 2 * x - 2 * cos(x);
end;
 
begin
  a := 0.5;
  b := 1;
  
  e := 0.00001;
  repeat
    x := (a + b) / 2;
    F1 := F(x - e);
    F2 := F(x + e);
    if (F1 < F2) then b := x 
    else a := x;
  until (abs(b - a) < e);
  x := (b + a) / 2;
  FM := F(x);
  writeln(FM);
  writeln(x);
end.
программа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2015, 11:48
Ответы с готовыми решениями:

Методом деления отрезка пополам (дихотомии) найти корни уравнения
методом деления отрезка пополам(дихотомии) решить уравнение с точностью до 0.001 x^4-18*x^2+6=0 ...

Методом деления отрезка пополам (дихотомии) найти корни уравнения
методом деления отрезка пополам(дихотомии) решить уравнение с точностью до 0.001 (x-2)^2*2^x=1

Найти корень заданной функции в интервале [а, b] методом деления отрезка пополам
Составить рекурсивную программу нахождения корня заданной функции F(x) в интервале методом деления...

Метод деления отрезка пополам
Приветствую. Помогите, пожалуйста, решить данную задачу:

3
Модератор
Эксперт по электронике
7527 / 3715 / 1457
Регистрация: 01.02.2015
Сообщений: 11,555
Записей в блоге: 2
14.06.2015, 11:57 2
Лучший ответ Сообщение было отмечено kugen как решение

Решение

Условие выбора новой границы - если F(x) и F(a) имеют разные знаки - то b:=x, иначе a:=x. Разные знаки проверяют F(x)*F(a)<0.
1
-18 / 2 / 1
Регистрация: 06.03.2012
Сообщений: 47
14.06.2015, 12:18  [ТС] 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var
  a, b, e, x, F1, F2, FM: real;
 
function F(xx: real): real;
begin
  F := x * x - 2 * x - 2 * cos(x);
end;
 
begin
  a := 0.5;
  b := 1;
  
  e := 0.00001;
  repeat
    x := (a + b) / 2;
    F1 := F(x - e);
    F2 := F(x + e);
    if ((F1 * F2)<0) then b := x 
    else a := x;
  until (abs(b - a) < e);
  x := (b + a) / 2;
  FM := F(x);
  writeln(FM);
  writeln(x);
end.
может кому пригодиться)
0
Модератор
Эксперт по электронике
7527 / 3715 / 1457
Регистрация: 01.02.2015
Сообщений: 11,555
Записей в блоге: 2
14.06.2015, 12:49 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Кроме ошибки в алгоритме, у тебя частая ошибка новичков - глобальные переменные, используемые в функциях - попробуй перенеси блок var к begin основной программы - увидишь ошибку в функции F(x).
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
program tak;
 
  function F(x: real): real;
  begin
    F := x * x - 2 * x - 2 * cos(x);
  end;
 
var
  a, b, e, x, F1, F2, FM: real;
begin
  a := 0.5;
  b := 1;
 
  e := 0.00001;
  repeat
    x  := (a + b) / 2;
    F1 := F(a);
    F2 := F(x);
    if (F1 < F2) then
      b := x
    else
      a := x;
  until (abs(b - a) < e);
  x  := (b + a) / 2;
  FM := F(x);
  writeln(FM: 0: 7);
  writeln(x: 0: 7);
end.
Добавлено через 1 минуту
В раннем моём посте ошибка - я думал искать ноль функции, а не её минимум. Прошу прощения.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2015, 12:49

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Метод деления отрезка пополам. Пожалуйста посчитайте количество интераций
У меня то 0, то 1 выходит,а такого быть не может ведь точность взята очень маленькая....

Методом деления отрезка пополам найти корень уравнения
Методом деления отрезка пополам найти корень уравнения (x-3)cosx-1=0 на отрезке Pascal ABC

Найти корни функции на заданном интервале методом дихотомии (деления отрезка пополам). функция Sin(x)/Ln(x) на интервале [-10,-9.2]
Найти корни функции на заданном интервале методом дихотомии (деления отрезка пополам). функция...

Метод деления отрезка пополам
Дано действительное положительное число e (эпсилон). Методом деления отрезка пополам найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.