Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №3 / 3
.c#include <stdio.h>
#include <math.h>
double x[10] = {0.4,0.5,0.9,1,1.4,1.8,2.1,2.3,2.6,3};
double A[10] = {0.08,0.1,0.19,0.22,0.51,1.69,1.87,1.06,0.44,0.19};
double An[10];
// vi4islenie funkcii
double F (double x, double x0)
{
double A;
A = 1.95/(1+10*((x-x0)*(x-x0)));
return A;
}
//vi4islenie celevoi funcii
double CF (double x0)
{
double W = 0;
int i;
for (i = 0; i <= 9; i++)
{
An[i] = F(x[i], x0);
W = W + ((An[i] - A[i])*(An[i] - A[i]));
}
return W;
}
void main (void)
{
double d = 0.0001;
double X1= 1;
double Xmin, Wxx, xx, A1, A2, Wmin, W1, W2, W3, X3, X2;
do
{
X2=X1+d;
W1=CF(X1);
W2=CF(X2);
if (W1 > W2) X3=X1+2*d;
if ((W1<W2) || (W1=W2)) X3=X1-d;
W3=CF(X3);
//nahodim minimalnoe W
Wmin=W1;
Xmin=X1;
if (W2<W1) Wmin=W2, Xmin=X2;
if (Wmin>W3) Wmin=W3, Xmin=X3;
//ispolzovanie kvadrati4noi aproksimacii
A1= (W2-W1)/(X2-X1);
A2= ((W3-W1)/(X3-X1)-(W2-W1)/(X2-X1))/(X3-X2);
xx=0.5*(X1+X2-A1/A2);
Wxx=CF(xx);
X1=xx;
}
//proverka okon4aniya
while (fabs(Wmin-Wxx)>d || fabs(Xmin-xx)>d);
printf("L0 = %f\n", xx);//osnovnaya peremennaya
printf("W = %f\n", CF(xx));//celevaya funkciya
}