Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 - Методичка ОАИП - Часть.doc
Скачиваний:
19
Добавлен:
30.04.2019
Размер:
1.46 Mб
Скачать

6.2. Пример выполнения задания

Написать программу поиска простых корней функции f(x) = 4x – 7sinx на отрезке [a, b] c шагом h и точностью  методом деления отрезка пополам.

Вид формы и полученные результаты представлены на рис. 6.2.

Текст программы Unit1.cpp может иметь следующий вид:

typedef double (*type_f)(double);

double fun(double);

double Metod_Del_2(type_f,double,double,double);

//--------------------- Текст функции-обработчика кнопки Расчет ----------------------

double a, b, x, eps, h, y, r;

int nom=0, iter;

a = StrToFloat(Edit1->Text); b = StrToFloat(Edit2->Text);

eps = StrToFloat(Edit3->Text);

h = StrToFloat(Edit4->Text);

Memo1->Lines->Add(" Функция 4*x - 7*sin(x)");

Chart1->Series[0]->Clear();

for(x = a-h; x< b+h; x+=h)

Chart1->Series[0]->AddXY(x,fun(x));

Memo1->Lines->Add("------ Корни ------");

for(x = a; x<=b; x+=h){

if(fun(x)*fun(x+h)<0){

nom++;

y = Metod_Del_2(fun,x,x+h,eps);

Memo1->Lines->Add(IntToStr(nom)+"-й = "+FloatToStrF(y,ffFixed,8,6));

}

}

if(nom==0) Memo1->Lines->Add("На отрезке корней НЕТ!");

//------------------------- Метод деления отрезка пополам ---------------------------------

double Metod_Del_2(type_f f,double x0,double x1,double eps) {

double x2,y0,y2;

y0=f(x0);

do {

x2=(x0+x1)/2; y2=f(x2);

if(y0*y2 > 0) {

x0 = x2; y0 = y2;

}

else x1 = x2;

} while (fabs(x1-x0)>eps);

return (x0+x1)/2;

}

//------------------------------- Заданная функция f(x) ----------------------------------------

double fun(double x) {

return 4*x - 7*sin(x);

}

Рис. 6.1

Рис. 6.2

6.3. Индивидуальные задания

Написать и отладить программу поиска всех корней функции f(x) на отрезке [a, b] в соответствии с вариантом (табл. 6.1). Метод нахождения корня оформить в виде отдельной функции, алгоритм которой описать блок-схемой.

Таблица 6.1

Вид функции f(x)

а

b

Заданный метод

1.

–2

2

Метод простой итерации

2.

–1

3

Метод Ньютона

3.

1

8

Метод секущих

4.

4

7

Метод Вегстейна

5.

4

8

Метод секущих

6.

2

6

Метод простой итерации

7.

3

9

Метод секущих

8.

–4

0

Метод секущих

9.

–12

5

Метод Вегстейна

10.

–2

5

Метод Ньютона

11.

–6

2

Метод Ньютона

12.

–4

2

Метод Ньютона

13.

–7

3

Метод секущих

14.

–4

3

Метод Вегстейна

15.

–1

3

Метод секущих

16.

–4

4

Метод Ньютона

Примечание. Все функции на указанном интервале имеют три корня.