|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Исходный код
#include"stdafx.h" #include<conio.h> #include<stdio.h> #include<math.h> #include<iostream>
usingnamespace std;
typedeffloat coord[3]; coord xf,xb[2]; float ff, fb[2];
void prisv(coord x1,coord x2) { x1[0]=x2[0]; x1[1]=x2[1]; x1[2]=x2[2]; } float func1(float x1, float x2, float x3) { return (x1-1)*(x1-2)*(x1-3)+x3; }
float g1(float x1,float x2, float x3) { return (x1+x2+x3); }
float g2(float x1, float x2, float x3) { return (pow(x3,2)-pow(x1,2)-pow(x2,2)); } float g3(float x1, float x2, float x3) { return (5-x3); } float g4(float x1, float x2, float x3) { return (pow(x1,2)+pow(x2,2)+pow(x3,2)-4); } void issled(coord xb0, float fb, float h, float k) { float ft,ft1; coord xk;
prisv(xf,xb0); prisv(xk,xb0); xk[2]+=h; //движение на нас; ft1=func1(xk[0],xk[1],xk[2])+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if(ft1<fb) { prisv(xf,xk); ff=ft1; } else { prisv(xk,xb0); xk[2]-=h; //движение от нас; ft1=func1(xk[0],xk[1],xk[2])+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if (ft1<fb) { prisv(xf,xk); ff=ft1; } else { prisv(xk,xb0); xk[0]+=h; //dvizhenie vpravo po osi x1; ft1=func1(xk[0],xk[1],xk[2])+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if (ft1<fb) { prisv(xf,xk); ff=ft1; } else { prisv(xk,xb0); xk[0]-=h;//dvizhenie vlevo po osi x1 ft1=func1(xk[0],xk[1],xk[2])+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if (ft1<fb) { prisv(xf,xk); ff=ft1; } else { prisv(xk,xb0); xk[1]+=h; //vverh ft1=func1(xk[0],xk[1],xk[2])+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if (ft1<fb) { ff=ft1; prisv(xf,xk); } else { prisv(xk,xb0); xk[1]-=h; //vniz ft1=func1(xk[0],xk[1],xk[2]);+k*(1/(g1(xk[0],xk[1],xk[2])) +1/(g2(xk[0],xk[1],xk[2]))+1/(g3(xk[0],xk[1],xk[2]))+1/(g4(xk[0],xk[1],xk[2]))); if(g1(xk[0],xk[1],xk[2]) && g2(xk[0],xk[1],xk[2]) && g3(xk[0],xk[1],xk[2]) && g4(xk[0],xk[1],xk[2])) break; if (ft1<fb) { ff=ft1; prisv(xf,xk); } } } }
} }
}
void huk_jivs(coord x0, float k) { float h, eps, fp; coord p;
eps=0.00001; h=0.0001; xb[0][0]=x0[0]; xb[0][1]=x0[1]; xb[0][2]=x0[2]; while (h>eps) { fb[0]=func1(xb[0][0],xb[0][1],xb[0][2])+k*(1/(g1(xb[0][0],xb[0][1],xb[0][2])) +1/(g2(xb[0][0],xb[0][1],xb[0][2]))+1/(g3(xb[0][0],xb[0][1],xb[0][2]))+1/(g4(xb[0][0],xb[0][1],xb[0][2]))); issled(xb[0],fb[0],h,k); while ((h>eps) && (xb[0][0]==xf[0]) && (xb[0][1]==xf[1]) && (xb[0][2]==xf[2])) { h=h/2; issled(xb[0],fb[0],h,k); //issled poisk do teh por poka ne umenshim } if (xb[0]!=xf) //xf-new basic point; ff - znachenie v xf; { do { prisv(xb[1],xf); fb[1]=ff; p[0]=xb[1][0]+(xb[1][0]-xb[0][0]); p[1]=xb[1][1]+(xb[1][1]-xb[0][1]); p[2]=xb[1][1]+(xb[1][2]-xb[0][2]); fp=func1(p[0],p[1],p[2])+k*(1/(g1(p[0],p[1],p[2])) +1/(g2(p[0],p[1],p[2]))+1/(g3(p[0],p[1],p[2]))+1/(g4(p[0],p[1],p[2]))); issled(p,fp,h,k); if (p!=xf) prisv(xb[0],xb[1]); } while (ff<fb[1]); prisv(xb[0],xb[1]); } } }
int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL,"Russian"); coord xn,xn1, x[1000]; float eps,rk,b,y; int k; k=0; eps=0.01;
x[0][0]=0.1; x[0][1]=2; x[0][2]=2.1; rk=10; b=10; cout<<"Координаты начальной точки"<<"\n"<<" x1 = "<<x[0][0]<<"\n"<<" x2 = "<<x[0][1]<<"\n"<<" x3 = "<<x[0][2];
huk_jivs(x[0],rk); k++; x[1][0]=xb[1][0]; x[1][1]=xb[1][1]; x[1][2]=xb[1][2]; cout<<"\n"<<" Итерация 1:"<<"\n"; cout<<" x1 = "<<x[k][0]<<"\n x2 = "<<x[k][1]<<"\n"<<" x3 = "<<x[k][2]<<"\n rk = "<<rk; fb[1]=func1(x[k][0],x[k][1],x[k][2]); cout<<"\n Значение функции = "<<fb[1]; y=rk*(1/(g1(x[k][0],x[k][1],x[k][2])) +1/(g2(x[k][0],x[k][1],x[k][2]))+1/(g3(x[k][0],x[k][1],x[k][2]))+1/(g4(x[k][0],x[k][1],x[k][2]))); while (y>eps){ rk=rk/b; huk_jivs(x[k],rk); k++; x[k][0]=xb[1][0]; x[k][1]=xb[1][1]; x[k][2]=xb[1][2]; cout<<"\n"<<" Итерация №"<<k<<":"<<"\n"; cout<<" x1 = "<<x[k][0]<<"\n x2 = "<<x[k][1]<<"\n"<<" x3 = "<<x[k][2]<<"\n rk = "<<rk; fb[1]=func1(x[k][0],x[k][1],x[k][2]); cout<<"\n Значение функции = "<<fb[1]; y=rk*(1/(g1(x[k][0],x[k][1],x[k][2])) +1/(g2(x[k][0],x[k][1],x[k][2]))+1/(g3(x[k][0],x[k][1],x[k][2]))+1/(g4(x[k][0],x[k][1],x[k][2])));
}
getch(); return 0; }
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.016 сек.) |