Метод удвоения шага. Метод хорд

0

 

Отчет по лабораторной работе 

«Метод удвоения шага. Метод хорд»

 

содержание

1 Постановка задачи………………………………………………………………..3

2 Краткие теоретические сведения………………………………………………..4

         2.1 Метод удвоения шага……………………………………………………4

         2.2 Метод биекции (половинного деления)

         2.3 Метод хорд……………………………………………………………….4

3 Практическая часть………………………………………………………………5

         3.1 Алгоритм…………………………………………………………………5

         3.2 Блок схема………………………………………………………………..7

         3.3 Текст программы………………………………………………………...9

         3.4 Тестовые примеры……………………………………………………...12

         3.5 Проверка в MathCad……………………………………………………14

4 Список использованной литературы…………………………………………..16

 

 

1 Постановка задачи

Графически (в MathCad) отделить корни заданных функций с длиной отрезка неопределенности 0,5 – 1.

Реализовать программу методом удвоения шага и отделить корни для заданных функций с длиной отрезка неопределенности 0,5 – 1.

Уточнить отрезок неопределенности до длины 0,01 методом хорд.

Функции:

  • xlgx-1,2=0
  • x3-0,1x2+0,4x-1,5=0

 

 

 

2 Краткие теоретические сведения

Пусть f(x)  - заданная нелинейная функция. Необходимо найти корни уравнения f(x)=0. Корни уравнения – х*, такие что f(х*)=0.

Задачи:

  • Отделение корней;
  • Локализация отрезка, на котором находится корень;
  • Уточнение корня ( нахождение приближения с заданной степенью точности).

 

2.1 Метод удвоения шага

Цель: локализовать отрезок, содержащий корень заданной длины h.

Алгоритм

Выбираем точку х0, шаг длиной h, i=0.

Шаг 1: хi+1= хi + h.

Шаг 2: Проверяем знак произведения f(хi+1)f(хi) :

- если  f(хi+1)f(хi)>0, то i=i+1, удваиваем шаг хi+1= хi +2i h; выполняем Шаг 2;

- если  f(хi+1)f(хi) < 0, то проверяем критерий остановки | хi+1 – хi| > h.

Шаг 3:

     - если | хi+1 – хi| > h, то обновляем алгоритм, x0:=xi ; i:=0, выполняем Шаг 1.

- если|| хi+1 – хi|- h|< ε ,то конец алгоритма.

Корень уравнения х*  находится на отрезке [хi ;  хi+1].

 

2.2 Метод биекции (половинного деления)

Дана функция f(x) - непрерывная на интервале [a, b].

Алгоритм

Шаг 1: Разделим отрезок [a, b] пополам точкой с=(a+b)/2.

Шаг 2: Если f(a)*f(c)<0, то b:=c,  иначе a:=c.

Шаг 3: Если |b-a|<Е, то х*=(b-a)/2, иначе  –  Шаг 1.

 

2.3 Метод хорд

Дана функция f(x) - непрерывная на интервале [a, b].

Алгоритм

Шаг 1: Если f(a)*f(b)<0, то c=

Шаг 2: |ck+1 – ck|<  :

  • если условие не выполняется, то

f(a)*f(с)<0, то b:=c;

f(с)*f(b)<0, то a:=c.

  • если условие выполняется, то конец алгоритма.

Получение точки с:

Уравнение прямой, проходящей через точки a и b

y=0 (уравнение оси OX)

x=c

Следовательно,c=

 

 

 

3 Практическая часть

3.1 Алгоритм

Метод удвоения шага

Выбираем точку х0, шаг длиной h, i=0.

Шаг 1: хi+1= хi + h.

Шаг 2: если  f(хi+1)f(хi)>0, то i=i+1, удваиваем шаг хi+1= хi +2i h; выполняем Шаг 2; если  f(хi+1)f(хi) < 0, то проверяем критерий остановки | хi+1 – хi| > h.

Шаг 3: если | хi+1 – хi| > h, то обновляем алгоритм, x0:=xi ; i:=0; переходим к Шагу 1; если|| хi+1 – хi|- h|< ε ,то конец алгоритма.

Корень уравнения х*  находится на отрезке [хi ;  хi+1].

 

Метод хорд

Шаг 1: Если f(a)*f(b)<0, то c=

Шаг 2: |ck+1 – ck|<  :

  • если условие не выполняется, то

f(a)*f(с)<0, то b:=c;

f(с)*f(b)<0, то a:=c.

  • если условие выполняется, то конец алгоритма.

 

 

 

 

3.2 Блок схема

 


3.3 Текст программы

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Button1: TButton;

    Button2: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Edit3: TEdit;

    Label3: TLabel;

    Edit4: TEdit;

    Label4: TLabel;

    procedure Button2Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

close;

end;

Function f(x:real):real;

Begin

  f:=x*(ln(x)/ln(10)) - 1.2;

  //f:=exp(3*ln(abs(x)))-0.1*exp(2*ln(abs(x)))-1.5;

end;

procedure TForm1.Button1Click(Sender: TObject);

Var

 x0,x1,x,h,a,b,c:real;

  k, t,m:boolean;

   i: integer;

begin

h:=StrToFloat(Edit3.Text);

x0:=StrToFloat(Edit1.Text);

t:=false;

k:=false;

while k=false do

begin

while  t=false  do

begin

i:=0;

x1:=x0+ exp(i*ln(2))*h;

if f(x0)*f(x1)<0 then t:=true

else

Begin

i:=i+1;

x0:=x1;

end;

end;

t:=false;

while  t=false  do

begin

if((x0-x1)>h) and( (x0-x1)>-h) then

begin

x0:=x1;  end

else

 begin

t:=true;

k:=true;

end;

end;

end;

 edit2.Text:='['+floattostr(x0)+ ';' +floattostr(x1)+']';

 a:=x0;

 b:=x1;

 h:=0.01;

 m:=false;

 while (abs(c-a)<h) or (abs(b-c)<h) do

 begin

 c:= a - ((f(a)*(b-a)) / (f(b) - f(a)));

 if f(a)*f(c)<0 then b:=c

 else a:=c;

 end;

 x:=(a+b)/2;

edit4.Text:=floattostr(x);

end;

end.

 

 

 

3.4 Тестовые примеры

  • Функция: xlgx-1,2=0

            Рис 3.3.1 – Тестовый пример 1

               Рис 3.3.2 – Тестовый пример 2

 

 

  • Функция: x3-0,1x2+0,4x-1,5=0

 

 

               Рис 3.3.2 – Тестовый пример 3

               Рис 3.3.2 – Тестовый пример 4

 

 

 

 

3.5 Проверка в MathCad

  • Функция: xlgx-1,2=0

Рис 3.4.1 – Проверка 1

Рис 3.4.2 – Проверка 2

  • Функция: x3-0,1x2+0,4x-1,5=0

Рис 3.4.3 – Проверка 3

 

 

Cписок использованной литературы

  1. Вержбицкий В.М. Численные методы (линейная алгебра и нелинейные уравнения): Учеб. пособие для вузов.- М.: Высш. шк., 2000.- 266с.:ил. ISBN 5-06-003654-5

 Скачать: otchet.docx

 

Категория: Лабораторные работы / Лабораторные работы по математике

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.