Паутинообразная модель

Нашла старую работу по моделированию экономики. Выложу, пожалуй.

Вот, непосредственно, задание.

Составить программу, которая:
1. Изображает кривую спроса D = α + AP и кривую предложения S = β + BP на плоскости, по оси абсцисс которой отложена цена P, а по оси ординат – количество сделок.

2. Вычисляет начальное предложение S(1) исходя из начального значения цены P(0) на момент времени T = 0.

3. Изображает маршрут «изменение цены → изменение числа сделок», который имеет вид «паутины», повторив несколько раз процессы (i) и (ii):

(i) определение P(t) таким образом, чтобы S(t) = S(P(t — 1) = D(t) = D(P(t));

(ii) нахождение S(t + 1) = S(P(t)), соответствующего P(t), T = 1, 2, …, TT.

Список переменных и функций:

AL = α, BE = β;

A – наклон кривой спроса (абсолютное значение в момент начала работы программы);

B  – наклон кривой предложения;

PO – прежняя цена (цена периода 0 или цена предыдущего периода);

PN – новая цена (цена текущего периода);

SO – прежнее предложение (предложение текущего периода) ;

SN – новое предложение (предложение следующего периода) ;

D   – спрос периода 0 или спрос текущего периода;

T   – переменная-счетчик итераций (ТТ – максимальное число итераций);

C = 0 или 1 – число, указывающее направление, в котором следует тянуть паутину;

F(P) = D = α + AP, F(p) = S = β + BP.

 

Исходный код для построения паутинообразной модели:

float C[11];
 for (i=0;i<=10;i++)
{
 C[i]=50+LX/11*i;
 AnsiString S1 = FloatToStrF(0+((alfa/a)/10)*i,ffFixed,5,1);
 Image1->Canvas->TextOutA(C[i]-10,LY+5,S1);
}
 float B[11];
 for (i=0;i<=10;i++)
{
 B[i]=35+LY/11*i;
 AnsiString S = FloatToStrF(alfa-(alfa/10)*i,ffFixed,5,1);
 Image1->Canvas->TextOutA(20,B[i],S);
}
 
D=alfa-a*p;
S=beta+b*p;
if(D>S)
{
 Image1->Canvas->MoveTo(50,40);
 Image1->Canvas->LineTo(LX,LY);
MasY=(LY-40)/alfa;
MasX=(LX-50)*a/alfa;
float S1=beta+b*alfa/a;
 Image1->Canvas->MoveTo(50+(-1*beta)/b*MasX,LY);
 Image1->Canvas->LineTo(LX,LY-S1*MasY);
}
if(S>D)
{
 ShowMessage("Результат не сойдется");
}
Image1->Canvas->MoveTo(50+p*MasX,LY-(alfa-a*p)*MasY);
float pn = (alfa-beta)/(a+b);
pN=p;
while ((pN<=pn-1) || (pN>=pn+1))
 {
  float pN1=pN;
  Image1->Canvas->LineTo(50+pN1*MasX,LY-(beta+b*pN1)*MasY);
  Image1->Canvas->LineTo(50+(alfa-b*pN1-beta)*1/a*MasX,LY-(beta+b*pN1)*MasY);
  pN=(alfa-b*pN1-beta)*1/a;
 }

Результат работы программы:

Паутинообразная модель

0

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *