#include <vcl.h>
#include <math.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
return 0;
}
//---------------------------------------------------------------------------
double func(double x1, double x2){
return 2.0*pow(x1-4.0,2.0)+pow(x2-7.0,2.0);
}
double func_k(double xk1, double xk2){
return 2.0*pow(xk1-4.0,2.0)+pow(xk2-7.0,2.0);
}
double XX1(double xk1, double FI_rad, double H){
return xk1+H*cos(FI_rad);
}
double XX2(double xk2, double FI_rad, double H){
return xk2+H*sin(FI_rad);
}
//---------------------------------------------------------------------------
double gen(){
double FI_grad;
double FI_rad;
randomize();
FI_grad=random(361);
FI_rad=FI_grad*0.0174;
return FI_rad;
}
//---------------------------------------------------------------------------
void method(){
double H=1.2;
double FI_rad;
double xk1=-2.0;
double xk2=6.0;
for ( ;; ){
while (fk>=f) gen();
double x1 = XX1(xk1, gen(), H);
xk1=x1;
double x2 = XX2(xk2, gen(), H);
xk2=x2;
double f = func(x1, x2);
double fk = func_k(xk1, xk2);
cout<<x1;
cout<<x2;
if(sqrt(pow(fk-f,2.0)<0.0001)) break;
}
}
//---------------------------------------------------------------------------
Численный метод поиска extr целевой функции на Builder С++ 6.0
Суть метода: см. pic. Сам метод осуществляется в двумерном пространстве x1, x2. Сама функция в этом пространстве представлена линиями уровня. Что важно, условием достижения минимума(остановка метода), является выражение |(F(xk)-F(x(k+1)|<e, где "e" число стремящееся к 0. Я выбрал 0.0001.
Мною уже был реализован данный метод в среде Builder C++ 6.0, Вот код.
Код:
Увы, программа не работает. (При этом выдаться ещё две ошибки компилятором. Он не распознает в инструкции while переменные fk и f).
Помогите, отладить программу и устранить ошибки. Если есть возможность, подскажите, как лучше реализовать метод. Возможно использую неверный подход.:confused:
Заранее благодарю, за любую помощь.