Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Брб_лаб_1+2.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
270.4 Кб
Скачать

Void main()

{ clrscr();

printf("\n Metod Fibonachi");

ko=0; eps=pow(10,-2); m=0; k=0;

printf("\n Interval searching"); // 1. Interval searching

a=0; c=eps; b=a+2*c;

fa=Func(a); fb=Func(b); fc=Func(c);

printf("\n k a c b fa fc fb");

printf("\n %i %.4f %.4f %.4f %.4f %.4f %.4f", m, a, c, b, fa, fc, fb);

do

{ a=c; c=b; fa=fc; fc=fb; //moving of point

b=a+c; fb=Func(b); m++;

printf("\n%i %.4f %.4f %.4f %.4f %.4f %.4f", m, a, c, b, fa, fc, fb);

} while (fb<fc);

printf("\n Interval shorting"); // 2. Interval shorting

printf("\n k a c d b fc fd");

d=a+b-c; fd=Func(d);

printf("\n%2d %.4f %.4f %.4f %.4f %.4f %.4f",k, a, c, d, b, fc, fd);

for (k=1; eps<(b-a)/2; k++)

{ if (fc<fd)

{ b=d; d=c; fd=fc; c=a+b-d; fc=Func(c);} else

{ a=c; c=d; fc=fd; d=a+b-c; fd=Func(d);}

printf("\n%2d %.4f %.4f %.4f %.4f %.4f %.4f", k, a, c, d, b, fc, fd);

}

printf("\nko=%i fm(%f+-%f)=%12.9f\n" , ko, c,(b-a)/2, fc);

q=-log10(fabs(fc-f1));

printf("\nko=%i q=%2.9f\n",ko,q);

getch();

}

Результат виконання:

Рис.1

Рис. 2

Алгоритм програми:

Початок

k=k+1

a=c

c=b

k=0 a=0

b=a+c

f(b)>f(c)

d=a+b-c

f(c)<f(d)

Кінець

Так

Ні

c=ε

m=1

b=d

d=c

c=a+b-d

a=c

c=d

d=a+b-c

(b-a)/2>ε

am=(a+b)/2±(b-a)/2

Так

Ні

Так

Ні

Міністерство освіти і науки України Національний технічний університет України «Київський політехнічний інститут» Радіотехнічний факультет Кафедра радіоконструювання та виробництва радіо апаратури

Лабораторна робота №3

Пошук екстремуму функції за методом «золотого» перетину

Роботу прийняла: Роботу виконали: Роботу прийняла: Студенти гр.. РВ-91,

Тимофеєва Ю.Ф. IV курс, РТФ Іщенко Костянтин

Кальнюк Василь

Київ 2013р

Налагоджена програма:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

#include <vcl.h>

int k=0, ko=0;

double a, c, d, b, fa, fc, fd, fb, t1, t2, eps=0.01;

double Func(double x) { ko++; return (x-10)*(x-10);}

Void main()

{ printf("\nMetod zolotogo peretynu");

t2= (sqrt(5)-1)/2; //0.61803

t1= 1-t2; //0.38197

printf("\n Interval searching");

a=0; fa=Func(a);

c=1; fc=Func(c);

while (fc>fa)

{ if (c<1e-10)

{ printf(" Wrong direction"); getch(); exit;

}

c=c*0.1; fc=Func(c);

}

b=c+(c-a)*(t2+1); fb=Func(b);

printf("\nk a c b fa fc fb");

printf("\n%i %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f",

k, a, c, b, fa, fc, fb);

while (fb<fc)

{ k++;

a=c; fa=fc; c=b; fc=fb; b=c+(c-a)*(t2+1); fb=Func(b);

printf("\n%i %7.3f %7.3f %7.3f %7.3f %7.3f %7.3f",

k, a, c, b, fa, fc, fb);

}

printf("\nko=%i Interval shoting", ko);

c= a+t1*(b-a); fc=Func(c);

d= a+t2*(b-a); fd=Func(d);

printf("\n k a c d b fc fd");

do

{ printf("\n%2i %9.5f %9.5f %9.5f %9.5f %9.5f %9.5f",

k, a, c, d, b, fc, fd);

if(fd<fc)

{ a=c; c=d; fc=fd; d=a+t2*(b-a); fd=Func(d);

} else

{ b=d; d=c; fd=fc; c=a+t1*(b-a); fc=Func(c);

}

k++;

} while (b-a>eps);

c=(a+b)/2;

printf("\nko=%i fm( %f)= %12.15f", ko, c, Func(c));

getch();

}

Результати виконання:

Рис.1

Рис.2

Рис.3

Рис.3

Алгоритм програми

Початок

f(b)>f(c)

Вивести результат

k=k+1; a=c; c=b;

b=c+(c-a)*

K=0; a=0; c=h;

Так

Ні

Інтервал [a, d]

f(d)>f(c)

c=a+(b-a)*0.382; d=a+(b-a)*0.618;

Мітка

Ні

Так

Інтервал [с, b]

Мітка

Ні

Так

Вивести результат

e=(b-a)/2<e заданого

a=c; c=d;

b=d;

Кінець

Міністерство освіти і науки України Національний технічний університет України «Київський політехнічний інститут» Радіотехнічний факультет Кафедра радіоконструювання та виробництва радіо апаратури

Лабораторна робота №4

МЕТОД «НАЙСКОРІШОГО СПУСКУ»

Роботу прийняла: Роботу виконали: Роботу прийняла: Студенти гр.. РВ-91,

Тимофеєва Ю.Ф. IV курс, РТФ Іщенко Костянтин

Кальнюк Василь

Київ 2013р

Налагоджена програма:

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <vcl.h>

int i, it=0, n=2, stop, ko=0;

double eps=0.0001, epsOP=0.0001, dalfa0=0.1, alfa, f0, f,

x0[2]={10, 5}, x[2], ksi[2];

double Fq() { ko++; return x[0]*x[0] + 4*x[1]*x[1];}

void UnGrad() { ksi[0]= -2*x[0]; ksi[1]= -8*x[1];}

double O_Poshuk()

{ double dalfa, y, yp; int stopOP=0;

alfa= 0; dalfa= dalfa0;

y= f0;

do

{ yp=y;

alfa=alfa+dalfa;

for(i=0;i<n;i++) x[i]=x0[i]+alfa*ksi[i];

y=Fq();

if(y>yp)

{ if (fabs(dalfa)>epsOP) dalfa= -dalfa/10;

else stopOP=1;

}

}

while (stopOP==0);

return yp;

}