Укр.
Метод рівновеликого трикутника.
Головна формула методу, яка визначає бар'єрну відстань
через випуклу площу і довжину відрізка AB.
Nf=2*Sв/lц. (1)
Де :
Nf - бар'єрна відстань,
Sв - випукла площа,
lц - довжина відрізка AB.
Довжину відрізка AB нескладно обрахувати за
теоремою Піфагора.
lц = sqrt((b-a)^2+(f(b)-f(a))^2). (2)
Як обрахувати Sв. ?
За допомогою інтеграла.
Як обрахувати межі для наступної ітерації?
b_next=(a_prev*f(b_prev)-b_prev*f(a_prev))/
(f(b_prev)-f(a_prev))
Sv=Int(f(x)-f(a_prev),a_prev,b_prev)
DX=2*Sv/(f(b_prev)-f(a_prev))
a_next=b_next-DX
a_next=max(a_prev,a_next)
Рус.
Метод равновеликого треугольника.
Основная формула метода, которая определяет барьерное расстояние
через выпуклую площадь и длину отрезка AB.
Nf=2*Sв/lц. (1)
Где:
Nf - барьерное расстояние.
Sв - випуклая площадь.
lц - длина отрезка AB.
Длину отрезка AB несложно вычислить
с помощью теоремы Пифагора.
lц = sqrt((b-a)^2+(f(b)-f(a))^2). (2)
Как найти Sв. ?
С помощью интеграла.
Как вычислить границы для следующей итеррации?
b_next=(a_prev*f(b_prev)-b_prev*f(a_prev)) /
(f(b_prev)-f(a_prev))
Sv=Int(f(x)-f(a_prev),a_prev,b_prev)
DX=2*Sv/(f(b_prev)-f(a_prev))
a_next=b_next-DX
a_next=max(a_prev,a_next)
Eng.
Equal square triangle method.
Nf=2*Sв/lц. (1)
Where:
Nf - barrier distance.
Sв - convexive square.
lц = sqrt((b-a)^2+(f(b)-f(a))^2). (2)
Next iteration.
b_next=(a_prev*f(b_prev)-b_prev*f(a_prev)) /
(f(b_prev)-f(a_prev))
Sv=Int(f(x)-f(a_prev),a_prev,b_prev)
DX=2*Sv/(f(b_prev)-f(a_prev))
a_next=b_next-DX
a_next=max(a_prev,a_next)
Перезентації цього методу у хронологічному порядку.
2003р. "Локалізація нулів функцій деякого класу"
2004р. "Локалізована область функцій певного класу, та її застосування в рівняннях та
нерівностях"
Титульна сторінка - http://www.beloshenko.ucoz.ru/ESTM/2004/2.htm
Сам текст - http://www.beloshenko.ucoz.ru/ESTM/2004/1.htm
2007р. " Using method
“equal square triangle" for calculation of nucleus temperature and energy levels density, taking into account
vibrational states
in the frame of statistical approach."
У розділі participants contribution.
Невеличка програмка на Сі, що демонструє метод.
--------------------------------------------------------------------------------------
Analiz.h
--------------------------------------------------------------------------------------
//Beloshenko + 2007
float Ext_eps; //eps
int Niter; //iteration counter
int Niter; //iteration counter
--------------------------------------------------------------------------------------
ESTM.h
--------------------------------------------------------------------------------------
//Beloshenko + 2007
float f(float x)
{
return 1-x*x;
};
{
return 1-x*x;
};
float Integral_a_b(float a, float b)
{
return (b-b*b*b/3)-(a-a*a*a/3);
};
{
return (b-b*b*b/3)-(a-a*a*a/3);
};
float ESTM_main(float Ext_eps)
{
float a_prev,b_prev;
float a_next,b_next;
float integral;
float eps=Ext_eps;
{
float a_prev,b_prev;
float a_next,b_next;
float integral;
float eps=Ext_eps;
Niter=0; //iteration counter
b_prev=0; //0.1
a_prev=-1000000; //-3
a_prev=-1000000; //-3
while((b_prev-a_prev)>eps)
{
Niter++;
{
Niter++;
b_next=(a_prev*f(b_prev)-b_prev*f(a_prev))/(f(b_prev)-f(a_prev));
integral=Integral_a_b(a_prev,b_prev)+(-f(a_prev))*(b_prev-a_prev);
a_next=(-2*b_prev*f(a_prev)+a_prev*f(a_prev)+b_prev*f(b_prev))/(f(b_prev)-f(a_prev))-2*integral/(f(b_prev)-f(a_prev));
if(a_prev>a_next)
a_next=a_prev;
a_prev=a_next;
b_prev=b_next;
integral=Integral_a_b(a_prev,b_prev)+(-f(a_prev))*(b_prev-a_prev);
a_next=(-2*b_prev*f(a_prev)+a_prev*f(a_prev)+b_prev*f(b_prev))/(f(b_prev)-f(a_prev))-2*integral/(f(b_prev)-f(a_prev));
if(a_prev>a_next)
a_next=a_prev;
a_prev=a_next;
b_prev=b_next;
};
return (b_prev+a_prev)/2;
};
};
--------------------------------------------------------------------------------------
prgloca.cpp
--------------------------------------------------------------------------------------
// prgloca.cpp : Defines the entry point for the console application.
//
//
//Beloshenko + 2007
#include "stdafx.h"
#include "Analiz.h"
#include "ESTM.h"
#include "iostream.h"
#include "Analiz.h"
#include "ESTM.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int pause;
printf("ESTM!\n");
Ext_eps=0.1;
float root=ESTM_main(Ext_eps);
cout << root << " root" << endl;
cout << Ext_eps << " eps" << endl;
cout << Niter << " Number of iterations" << endl;
cin >> pause;
return 0;
}
{
int pause;
printf("ESTM!\n");
Ext_eps=0.1;
float root=ESTM_main(Ext_eps);
cout << root << " root" << endl;
cout << Ext_eps << " eps" << endl;
cout << Niter << " Number of iterations" << endl;
cin >> pause;
return 0;
}
Бєлошнко Микита(с)
Усі права захищено.





