воскресенье, 21 сентября 2008 г.

Основы информатики. Методы поиска корней уравнений. Метод деления отрезка пополам. Delphi.

  В данном разделе речь идет о численных методах решения уравнения f(x)=0 в области действительных чисел. В общем, виде задача может быть сформулирована следующим образом. Необходимо найти такое значение x1, которое приближенно совпадает со значением x0, обращающим уравнение в тождество. Требуется, однако, существенно дополнить постановку задачи. Во-первых, поскольку уравнение может и не иметь решения, следует быть уверенным в том, что поставленная задача имеет смысл - нельзя поймать черную кошку в темной комнате, если ее там нет. Во-вторых, поскольку уравнение может иметь несколько корней, необходимо ограничить интервал поиска отрезком [a,b], для которого известно, что на нем имеется только один корень. Признаком этого является то, что f(a) и f(b) имеют разные знаки. Термин "приближенно совпадает" также требует пояснения. Все приближенные методы нахождения корня строятся на основе итераций, когда очередное значение так или иначе получается из предыдущего и все ближе подходит к точному значению корня. Теперь можно сформулировать условие прекращения этого итерационного процесса. Процесс поиска корня следует прекратить тогда, когда относительная разность двух последовательных приближений станет по абсолютной величине меньше заданной точности. Если максимальная допустимая ошибка задана величиной , а два последовательных приближения являются значениями xn-1 и xn, то условие прекращения итераций примет вид:

  Неприятность может произойти, если корнем уравнения является 0, однако это уже совсем особый случай, который рассматриваться не будет.
 
Рис. 1.5. Графическая иллюстрация метода половинного деления

  Наиболее наглядным, простым в реализации, однако, увы, не самым лучшим численным методом поиска корней, является МЕТОД ДЕЛЕНИЯ ОТРЕЗКА ПОПОЛАМ. Суть метода проще всего проиллюстрировать графически, с помощью рисунка 1.5.
  Прежде всего, находится точка , делящая отрезок [a,b], на котором ищется корень, пополам. Еще раз напомним, что корень на этом отрезке обязан быть. Далее, из этих двух половин выбирается та, на концах которой функция имеет разные знаки, то есть та, на которой имеется корень. Если эта половина является отрезком [c,b], как на нашем рисунке, то новым левым концом отрезка становится точка с. В противном случае точка с становится новым правым концом отрезка. Таким образом, после каждого такого выбора мы имеем новый отрезок [a,b], к которому снова применяем половинное деление. В этом методе наиболее наглядно выглядит условие выхода из цикла  А почему мы здесь обошлись без знака абсолютного значения? Автор надеется, что читатель сможет дать ответ на этот вопрос самостоятельно.

Решить уравнение sin(x)=0,5 на промежутке [0,1].

Программный код:

procedure TForm1.Button1Click(Sender: TObject);
var
 e,a,b,c,s:real;
begin
 a:=0;
 b:=1;
 s:=0;
 e:=strtofloat(edit1.Text);
 while abs((b-a)/b)>e do
  begin
  c:=(a+b)/2;
  if (sin(a)-1/2)*(sin(c)-1/2)>0 then
  a:=c
  else
  b:=c;
  s:=s+1;
  end;
 edit2.Text:=floattostr(c);
 edit3.Text:=floattostr(s*2);
e
nd;

Скачать проект


Комментариев нет: