83 / 3 / 4
Регистрация: 09.03.2010
Сообщений: 195
1

Решение уравнения методом хорд и половинного деления

24.12.2010, 10:31. Показов 4404. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу для решения уравнения методом хорд и половинного деления
exp(x)-10*x=0 yf [0;1]
Очень надо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2010, 10:31
Ответы с готовыми решениями:

Решение уравнения методом половинного деления
Всем привет! Прошу Вашей помощи написать в паскале решения уравнения методом половинного деления с...

Решение уравнения методом половинного деления
1.3 синус(х+п/4)+2.3х-20=0 надо составить программу методом половинного деления точностью...

Решение методом половинного деления уравнения
Составить функцию, которая представлена в виде функционального ряда ...

Решение нелинейного уравнения методом половинного деления
Решение нелинейного уравнения методом половинного денения 3*sin*sqrt(x+0.35*x-3.8)=0 d в интервале ...

2
29 / 29 / 24
Регистрация: 22.12.2010
Сообщений: 54
24.12.2010, 14:13 2
Лучший ответ Сообщение было отмечено как решение

Решение

Вот метод хорд и половинного деления:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
program zadanie;
 
function F(x: real): real;
begin
  F := exp(x) - 10 * x;
end;
 
function Dichotomy(a, b, e: real; var i: integer): real;
{ Метод дихотомии (деления отрезка пополам) }
var
  c: real;
begin
  i := 0;
  repeat
    c := (a + b) / 2;
    if (F(a) * F(c)) < 0 then
      b := c
    else
      a := c;
    i := i + 1;
  until (b - a) <= e;
  Result := (a + b) / 2;
end;
 
function Chord(a, b, e: real; var i: integer): real; { Метод хорд }
var
  x, x1: real;
begin
  i := 0;
  repeat
    x := (F(b) * a - F(a) * b) / (F(b) - F(a));
    if F(a) * F(x) > 0 then
      a := x
    else
      b := x;
    i := i + 1;
    x1 := (F(b) * a - F(a) * b) / (F(b) - F(a));
  until abs(x1 - x) < e;
  Chord := x;
end;
 
var
  a, b, eps, x: real;
  i: integer;
 
begin
  a := 0;
  b := 1;
  eps := 0.0001;
  x := Dichotomy(a, b, eps, i);
  writeln('X dichotomy=', x:0:5, ' chislo iter=', i);
  x := Chord(a, b, eps, i);
  writeln('X chord=', x:0:5, ' chislo iter=', i);
  readln;
 
end.
3
6 / 6 / 6
Регистрация: 30.04.2012
Сообщений: 216
16.11.2012, 11:19 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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;
  {Ввод исходных данных}
  write ('Введите a:'); read(a);
  write ('Введите b:'); read(b);
  write ('Введите eps:'); read(eps); 
  writeln;
  writeln ('a=', a:3:7);
  writeln ('b=', b:3:7);
  writeln ('eps=', eps:3:9); 
  writeln;
 
  a1:=a; b1:=b; {Запоминать исходные данные}
  k:=0; 
 
  writeln('Решение уравнения "2x^3-3x^2-12x=0" методом дихотомии.');
  writeln;
  {Проверка введеных значений}
  if (a1=b1) then
  writeln('Ошибка! Левая часть интервала не должна равняться правой.');
  if (a1>b1) then
  writeln('Ошибка! Левая часть интервала не должна быть больше правой.');
 
 {Цикл}
 while(b-a)/2 >= eps {Пока условие больше или равно точности...}
  do {...выполять}
  begin
   k:=k+1; 
   c:=(a+b)/2; 
    if f(c)=0 then 
    begin    
     writeln ('Уравнение на интервале (',a1:4:3, '; ',b1:4:3,') имеет точный корень x=', c:4:5);
     break; {Прервать вывод, чтобы ответ не повторялся бесконечно}
    end;
    if f(a)*f(c)<0 then b:=c;
    if f(a)*f(c)>0 then a:=c;
  end;
 
 {Проверка и вывод значений}
 begin
  if f(c)<>0 then {Если функция не равно 0, то вывести примерный ответ, иначе корень точный (x=0)}
   begin
    writeln ('Уравнение на интервале (',a1:4:7, '; ',b1:4:7,') имеет корень x=', c:4:5);
    writeln;
    writeln ('Точность ',eps:4:9, ' достигнута за ' ,k, ' цикла(ов)', '.');
   end
 end;
 
readkey;
 
end.
Итак, если я введу диапазон от -10 до -1 и точность, например, 0,001, то примерный корень будет = -1,81189, что верно!
Если от 1 до 10, то корень будет равен 3,31262, что тоже верно!
Если от -1 до 1, то корень будет равен 0, что тоже верно!
Но если я задам диапазон от -10 до 10, то выведится только один корень = 0, что недостаточно для полного ответа, т.к. уравнение 2x^3-3x^2-12x=0 имеет 3 корня! Как сделать так, чтобы программа хотя бы сообщала, что «в данном интервале найдено более одного корня, рекомендуется сузить границы интервала», или выводила все три??? Помогите, пожалуйста .
0
16.11.2012, 11:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.11.2012, 11:19
Помогаю со студенческими работами здесь

Решение заданного уравнения методом простых итераций и половинного деления
Здравствуйте, уважаемые форумчане. Не могли бы Вы составить программу для решения уравнения x -...

Решение уравнений методами половинного деления, хорд и касательных
1. В программе предусмотреть формирование меню из четырех пунктов: три пункта - для вызова...

Процедура нахождения корня уравнения методом половинного деления и методом Ньютона
написать программу процедуру для нахождения корня каждого уравнения методом половинного деления и...

Корень уравнения методом половинного деления
Нужно составить программу, которая решает уравнение 5*x^2 - 6*x - 3 (F(x)=0) методом половинного...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru