Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Данные.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public abstract class Данные {
public void упаковать(){
}
public void распоковать(){
}
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Результаты.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public abstract class Результаты: Данные{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Входные данные.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public abstract class Входные данные: Данные{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Данные задачи.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class Данные задачи: Данные, Входные данные{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Результаты задачи.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class Результаты задачи: Результаты, Результаты{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Задание.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class Задание: Данные{
public *Данные Данные;
public *Результаты Резуьтаты;
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Решение.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class Решение {
public *Задание задание1;
public *Алгоритм алгоритм;
public void начать(){
}
public void прервать(){
}
public void обработать исключения(){
}
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Алгоритм.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public abstract class Алгоритм {
public object Точность;
public *Задание задание1;
public void выполнить(){
}
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: Стат методы.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class Стат методы: Алгоритм{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name: корреляционно-регрессинный анализ.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class: Стат методы{
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name:.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class з{
public object Исходная матрица;
public object Вектор коэф. управления;
public object Цены;
public void Вычислить уравнения регрессии(){
}
public void Проверка значимости уравнения(){
}
public void Выбор цены(){
}
public void Сохранение результата(){
}
public void Просмотр результата(){
}
}
//
//
// Generated by StarUML(tm) C# Add-In
//
// @ Project: Проект АИС
// @ File Name:.cs
// @ Date: 04.06.2012
// @ Author:
//
//
public class {
public object Исходная матрица;
public object Нормализованная матрица;
public object Матрица парных кореляций;
public object Коэф. детерминации;
public object Коэф. корреляции;
public void Расчет матриц парных корреляций(){
}
public void Расчет коэф. детерминации(){
}
public void Расчет коэф. корреляции(){
}
public void Проверка адекватности(){
}
}
Приложение 2
Листинг программы
public abstract class Данные
{
public void упаковать()
{
}
public void распоковать()
{
}
}
public class Данные_задачи: Входные_данные
{
public Данные_задачи(int[] Д,int[] О,double[] Ц)
{
Даты = Д;
Объемы = О;
Цены = Ц;
}
public int[] Даты;
public int[] Объемы;
public double[] Цены;
}
public abstract class Входные_данные: Данные
{
}
public abstract class Алгоритм {
public double Точность;
public Задание Задание_для_вычислений;
public virtual void Выполнить()
{
}
}
public class Задание
{
public Задание(Данные Исход)
{
Исходные_данные =Исход;
}
public Данные Исходные_данные;
public Результаты Резуьтаты_решения;
}
public abstract class Корреляционно_регрессинный_анализ: Статистические_методы
{
}
using System;
public class Регрессионный_анализ: Корреляционно_регрессинный_анализ
{
public Matrix Исходная_матрица;
Matrix Матрица_реакции;
public Matrix Вектор_коэф_упрвнения;
public override void Выполнить()
{
Перейти_к_линейной_форме();
Вектор_коэф_упрвнения =
// (Исходная_матрица.GetInvertible() * Матрица_реакции);
(Исходная_матрица.Transpose() * Исходная_матрица).GetInvertible() * Исходная_матрица.Transpose() * Матрица_реакции;
Данные_задачи Д = (Данные_задачи)(Задание_для_вычислений.Исходные_данные);
double Ymedium = Mx(Д.Объемы, 1);
double Qost_ = Qost(Д.Даты, Д.Объемы);
double Qr_ = Qr(Д.Объемы, Ymedium);
double R = 1 - Qost_ / Qr_;
double[] В = new double[3];
В[0]=Вектор_коэф_упрвнения[0];
В[1]=Вектор_коэф_упрвнения[1];
В[2]=Вектор_коэф_упрвнения[2];
string Пояснения =
string.Format("Уравнение регрессии имеет вид: " + '\n' + "f(x) = {0}x^2 + {1}x + {2} " + '\n',
Вектор_коэф_упрвнения[0].ToString(),
Вектор_коэф_упрвнения[1].ToString(),
Вектор_коэф_упрвнения[2].ToString()
);
Пояснения += " Коэффициент детерминации: " + R.ToString();
Задание_для_вычислений.Резуьтаты_решения
= new Результаты_задачи(Пояснения, В);
}
double Qr(int[] Oj,double y)
{
double Sum = 0;
for (int i = 0; i < Oj.Length; i++)
{
Sum +=
Math.Pow((double)Oj[i] - y, 2);
}
return Sum;
}
double Qost(int[] Dat, int[] Oj)
{
double Sum = 0;
for (int i = 0; i < Dat.Length; i++)
{
Sum +=
Math.Pow((double)Oj[i] -
(Dat[i] * Dat[i] * Вектор_коэф_упрвнения[0]+
Dat[i] * Вектор_коэф_упрвнения[1]+
Вектор_коэф_упрвнения[2]
),2);
}
return Sum;
}
void Перейти_к_линейной_форме()
{
Исходная_матрица = new Matrix(3, 3);
Матрица_реакции = new Matrix(3);
Данные_задачи Д = (Данные_задачи)(Задание_для_вычислений.Исходные_данные);
///М x
double M_21_12 = Mx(Д.Даты, 1);
///М x^2
double M_20_02_22 = Mx(Д.Даты, 2);
///М x^3
double M_10_01 = Mx(Д.Даты, 3);
///М x^4
double M_00 = Mx(Д.Даты, 4);
///М y
double My_2 = Mx(Д.Объемы, 1);
///Мxy
double Mxy_1 = Mxy(Д.Даты, Д.Объемы, 1);
///Мx2y
double Mxy_0 = Mxy(Д.Даты, Д.Объемы, 2);
Исходная_матрица[2, 2] = 1;
Исходная_матрица[0, 0] = M_00;
Исходная_матрица[1, 0] = M_10_01;
Исходная_матрица[0, 1] = M_10_01;
Исходная_матрица[0, 2] = M_20_02_22;
Исходная_матрица[2, 0] = M_20_02_22;
Исходная_матрица[1, 1] = M_20_02_22;
Исходная_матрица[2, 1] = M_21_12;
Исходная_матрица[1, 2] = M_21_12;
Матрица_реакции[0] = Mxy_0;
Матрица_реакции[1] = Mxy_1;
Матрица_реакции[2] = My_2;
}
double Mxy(int[] Dat, int[] Oj, int Степень)
{
double Sum = 0;
for (int i=0; i < Dat.Length; i++)
{
Sum += Math.Pow(Dat[i], Степень) * Oj[i];
}
return (Sum / Dat.Length);
}
double Mx(int[] Dat,int Степень)
{
double Sum = 0;
foreach(int D in Dat)
{
Sum += Math.Pow(D, Степень);
}
return (Sum / Dat.Length);
}
public void Вычислить_уравнения_регрессии()
{
}
public void Проверка_значимости_уравнения()
{
}
public void Выбор_цены()
{
}
public void Сохранение_результата()
{
}
public void Просмотр_результата()
{
}
}
public abstract class Результаты: Данные
{
}
public class Результаты_задачи: Результаты
{
public Результаты_задачи(string Дет, double[] Коэффициенты)
{
Детали_анализа = Дет;
Коэффициенты_регрессии = Коэффициенты;
}
public string Детали_анализа;
public double[] Коэффициенты_регрессии;
}
using System;
using System.Windows.Forms;
public class Решение {
public Задание Задание_для_вычислений;
public Алгоритм Алгоритм_вычислений;
public Решение(Задание Задание_для_вычислений_, Алгоритм Алгоритм_вычислений_)
{
Задание_для_вычислений = Задание_для_вычислений_;
Алгоритм_вычислений = Алгоритм_вычислений_;
}
public void Начать()
{
try
{
Алгоритм_вычислений.Задание_для_вычислений = Задание_для_вычислений;
Алгоритм_вычислений.Выполнить();
}
catch (Exception ex)
{
Обработать_исключения(ex.Message);
}
}
public void Прервать()
{
}
public void Обработать_исключения(string Text)
{
MessageBox.Show(Text);
}
}
public abstract class Статистические_методы: Алгоритм
{
}
public abstract class Данные {
public void упаковать(){
}
public void распоковать(){
}
}
program prog;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.Title:= 'РГЗ - Метод кластерного анализа';
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, ComCtrls, Menus, Spin, Math;
type
THackGrid = class(TStringGrid);
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Save1: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
N4: TMenuItem;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button2: TButton;
Memo1: TMemo;
GroupBox4: TGroupBox;
StringGrid1: TStringGrid;
Label3: TLabel;
SG2: TStringGrid;
GroupBox5: TGroupBox;
Memo2: TMemo;
Button1: TButton;
GroupBox6: TGroupBox;
Memo3: TMemo;
Button4: TButton;
GroupBox7: TGroupBox;
Memo4: TMemo;
Button5: TButton;
Label4: TLabel;
Memo5: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure SpinEdit2Change(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mas:array[1..20,1..20] of Double;
z:array[1..20,1..20] of Double;
d:array[1..20,1..20] of Double;
sig:array[1..20] of Double;
mas_i:array[1..20] of Double;
n:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
Label3.Caption:='Матрица значений нормированных переменных:';
SG2.Visible:=false;
// производим нормировку в массиве
for i:= 1 to StringGrid1.ColCount-1 do
for j:=1 to StringGrid1.RowCount-1 do
begin
z[i,j]:=(mas[i,j]-mas_i[i])/sig[i];
StringGrid1.Cells[i,j]:= FloatToStr(roundTo(z[i,j],-6));
end;
GroupBox6.Enabled:=true;
end;
procedure refre();
begin
Form1.Button1.Enabled:=false;
Form1.button4.Enabled:=false;
Form1.button5.Enabled:=false;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,k:integer;
sum:double;
begin
SG2.Visible:=true;
for i:= 1 to StringGrid1.ColCount-1 do
for j:= 1 to StringGrid1.RowCount-1 do
if StringGrid1.Cells[i,j]='' then
begin
ShowMessage('Данные для анализа не введены!'#13#10'Введите данные!');
exit;
end
else
mas[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
SG2.ColCount:=StringGrid1.ColCount;
SG2.RowCount:=2;
SG2.Cells[0,0]:='Среднее значение';
SG2.Cells[0,1]:='Среднее квадратическое отклонение';
// вычисление Xi
for k:=1 to StringGrid1.ColCount-1 do
begin
sum:=0;
for i:=1 to StringGrid1.RowCount-1 do
sum:=sum+mas[k,i];
mas_i[k]:=sum/(StringGrid1.RowCount-1);
SG2.Cells[k,0]:=FloatToStr(roundTo(mas_i[k],-6));
end;
// вычисление сигмы i
for j:= 1 to StringGrid1.ColCount-1 do
begin
sum:=0;
for i:=1 to StringGrid1.RowCount-1 do
sum:=sum+(mas[j,i]-mas_i[j])*(mas[j,i]-mas_i[j]);
sig[j]:=Sqrt(sum/(StringGrid1.RowCount-1));
SG2.Cells[j,1]:=FloatToStr(roundTo(sig[j],-6));
end;
GroupBox5.Enabled:=true;
end;
procedure TForm1.Button4Click(Sender: TObject);
var i,j,k:integer;
sum,a,b,c:double;
begin
Label3.Caption:='Матрица расстояний';
for i:=1 to StringGrid1.RowCount-1 do
begin
for j:=1 to StringGrid1.RowCount-1 do
if (i=j) then d[i,j]:=0
else
begin
sum:=0;
for k:=1 to StringGrid1.ColCount-1 do
begin
a:=z[k,i];
b:=z[k,j];
sum:=sum+(a-b)*(a-b);
end;
d[i,j]:=Sqrt(sum);
end;
end;
// выводим получившиеся
StringGrid1.ColCount:=StringGrid1.RowCount;
StringGrid1.Width:=65*StringGrid1.ColCount;
StringGrid1.Refresh;
for i:= 1 to StringGrid1.ColCount-1 do
for j:= 1 to StringGrid1.RowCount-1 do
StringGrid1.Cells[i,j]:= FloatToStr(roundTo(d[i,j], -6));
n:=StringGrid1.RowCount-1;
GroupBox7.Enabled:=true;
for i:=1 to 5 do
StringGrid1.Cells[i,0]:=IntToStr(i);
end;
// удаление заданной строки из переданной таблицы
procedure GridDeleteRow(RowNumber: Integer; Grid: TstringGrid);
var
i: Integer;
begin
Grid.Row:= RowNumber;
if (Grid.Row = Grid.RowCount - 1) then
{ On the last row}
Grid.RowCount:= Grid.RowCount - 1
else
begin
{ Not the last row}
for i:= RowNumber to Grid.RowCount - 1 do
Grid.Rows[i]:= Grid.Rows[i + 1];
Grid.RowCount:= Grid.RowCount - 1;
end;
end;
// удаление заданного столбца из переданной таблицы
procedure GridDeleteCol(ColNumber: Integer; Grid: TstringGrid);
var
i: Integer;
begin
Grid.Col:= ColNumber;
if (Grid.Col = Grid.ColCount - 1) then
{ On the last row}
Grid.ColCount:= Grid.ColCount - 1
else
begin
{ Not the last row}
for i:= ColNumber to Grid.ColCount - 1 do
Grid.Cols[i]:= Grid.Cols[i + 1];
Grid.ColCount:= Grid.ColCount - 1;
end;
end;
// процедура поиска сохранения минимума
procedure dd(SG:TstringGrid;ii:integer;jj:integer);
var i,j:integer;
begin
for i:=1 to SG.RowCount do
begin
if SG.Cells[ii,i]< SG.Cells[jj,i] then SG.Cells[ii,i]:=SG.Cells[jj,i];
if SG.Cells[i,ii]< SG.Cells[i,jj] then SG.Cells[i,ii]:=SG.Cells[i,jj];
SG.Cells[i,i]:=IntToStr(0);
end;
end;
procedure TForm1.Button5Click(Sender: TObject);
var i,j,ii,jj:integer;
min:double;
begin
while (StringGrid1.RowCount-1 >2) do
begin
min:=1000;
for i:=1 to (StringGrid1.RowCount-1) do
for j:=1 to (StringGrid1.RowCount-1) do
if (d[i,j]<min)and (i<>j) then
begin
min:=d[i,j];
ii:=i;
jj:=j;
end;
if (jj<=(StringGrid1.RowCount-1)) and (StringGrid1.RowCount>2) then
begin
dd(StringGrid1,ii,jj);
StringGrid1.Cells[ii,0]:=StringGrid1.Cells[ii,0]+'+'+StringGrid1.Cells[jj,0];
GridDeleteRow(jj,StringGrid1);
GridDeleteCol(jj,StringGrid1);
StringGrid1.Refresh;
end;
end;
StringGrid1.Height:=StringGrid1.RowCount*25;
StringGrid1.Width:=StringGrid1.ColCount*65;
label4.Caption:='Процесс объединения кластеров окончен';
end;
// Save a TStringGrid to a file
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var
f: TextFile;
i, k: Integer;
begin
AssignFile(f, FileName);
Rewrite(f);
with StringGrid do
begin
// Write number of Columns/Rows
Writeln(f, ColCount);
Writeln(f, RowCount);
// loop through cells
for i:= 0 to ColCount - 1 do
for k:= 0 to RowCount - 1 do
Writeln(F, Cells[i, k]);
end;
CloseFile(F);
end;
procedure TForm1.Save1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
SaveStringGrid(StringGrid1, SaveDialog1.FileName);
end;
procedure TForm1.N3Click(Sender: TObject);
var f:TextFile;
ColC, rowC, i, j:integer;
st:String;
begin
for i:=1 to 20 do
begin
for j:=1 to 20 do
begin
mas[i,j]:=0;
z[i,j]:=0;
d[i,j]:=0;
end;
sig[i]:=0;
mas_i[i]:=0;
end;
n:=0;
Label3.Caption:='Исходные данные';
if OpenDialog1.Execute then
begin
try
Assignfile(f,opendialog1.FileName);
reset(f);
Readln(f,St);
colC:=StrToInt(St);
StringGrid1.ColCount:=colC;
Readln(f,St);
rowC:=StrToInt(St);
StringGrid1.RowCount:=rowC;
StringGrid1.Height:=25*rowC;
StringGrid1.Width:=65*colC;
for i:=1 to StringGrid1.RowCount-1 do StringGrid1.Cells[0,i]:=' '+IntToStr(i);
for i:=1 to StringGrid1.ColCount-1 do StringGrid1.Cells[i,0]:=' X'+IntToStr(i);
i:=1;
j:=1;
Repeat
Readln(f,St);
if(St='') then Readln(f,St)
else
begin
if i<rowC then
StringGrid1.Cells[j,i]:=St
else
if i=rowC then
begin
i:=1;
j:=j+1;
StringGrid1.Cells[j,i]:=St;
end;
i:=i+1;
end;
{Memo1.Lines.Strings[i]:=St;
if i>0 then Memo1.Lines.Add(St);
i:=i+1;}
Until Eof(f)=true;
closefile(f);
except
MessageDlg ('Ошибка открытия файла '+opendialog1.FileName+'!', mtError, [mbOK], 0);
end;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
var i,k:integer;
begin
if Button2.Enabled then Button2Click(Sender);
if Button1.Enabled then Button1Click(Sender);
if Button4.Enabled then Button4Click(Sender);
if Button5.Enabled then Button5Click(Sender);
end;
procedure TForm1.Button7Click(Sender: TObject);
var i,k:integer;
begin
end;
procedure TForm1.N2Click(Sender: TObject);
begin
label1.Visible:=true;
label2.Visible:=true;
SpinEdit1.Visible:=true;
SpinEdit2.Visible:=true;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if ((key<'0')or (key>'9'))and(Key<>'VK_BACK')and(Key<>',')then key:=#0;
end;
procedure TForm1.Button3Click(Sender: TObject);
var i,k:integer;
begin
if OpenDialog1.Execute then
SaveStringGrid(StringGrid1, OpenDialog1.FileName);
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
var i,k:integer;
begin
StringGrid1.RowCount:=SpinEdit1.Value+1;
StringGrid1.ColCount:=SpinEdit2.Value+1;
with StringGrid1 do
for i:= 0 to ColCount - 1 do
for k:= 0 to RowCount - 1 do
Cells[i, k]:= '';
refre();
end;
procedure TForm1.FormShow(Sender: TObject);
begin
StringGrid1.RowCount:=SpinEdit1.Value+1;
StringGrid1.ColCount:=SpinEdit2.Value+1;
StringGrid1.Height:=25*StringGrid1.RowCount;
StringGrid1.Width:=65*StringGrid1.ColCount;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Close();
end;
end.
Дата публикования: 2015-11-01; Прочитано: 309 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!