
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;
}