close

Вход

Забыли?

вход по аккаунту

?

Отчет по лабораторной работе

код для вставкиСкачать
Отчет по лабораторной работе №7
1. Описание методов прогнозирования.
* логарифмическая зависимость f(t) = а0 + а1ln(t): * гиперболическая зависимость f(t) = а0 + а1/ t:
2. Графическое отображение реализованных интерфейсных форм
отчетов по
прогнозу в виде рисунка с текстовым описанием.
Если выбрать "Прогноз" в "Сервис", то откроется следующее окно: Синяя линия означает фактические продажи за выбранный период. Если выбрать период прогноза и поставить галочку в "Метод прогнозирования", то построится график-прогноз по методу линейной статистической экстраполяции. Зеленая линяя - это логарифмическая зависимость, а красная-гиперболическая. Автоматически, в программе, считается ошибка аппроксимации. Лучшей кривой является та, для которой величина σ минимальна.
3. Описание и код модулей, реализующих работу по проведению прогноза.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Data.SqlClient;
using System.Collections;
using System.Linq;
namespace Uchet
{
public partial class Prognoz : Form
{
public Prognoz(string x)
{
InitializeComponent();
string[] Meciac = { "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь" };
comboBox1.Items.AddRange(Meciac);
comboBox2.Items.AddRange(Meciac);
string[] year = { "2013", "2014", "2015", "2016" };
comboBox3.Items.AddRange(year);
comboBox4.Items.AddRange(year);
comboBox5.Items.AddRange(Meciac);
comboBox1.SelectedIndex = 0;
comboBox2.SelectedIndex = 11;
comboBox3.SelectedIndex = 0;
nah_put = x;
}
private void Prognoz_Load(object sender, EventArgs e)
{
this.gurnal_provodokTableAdapter.Fill(this.uchet_DataSet.Gurnal_provodok);
}
private void button1_Click(object sender, EventArgs e)
{
try
{
{
string[] labels = { "январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь" };
int id1 = 0; int id2 = 0;
for (int i = 0; i < labels.Length; i++)
{
if (labels[i] == comboBox1.Text)
{
id1 = i;
}
if (labels[i] == comboBox2.Text)
{
id2 = i;
}
}
string m = "";
for (int i = id1; i <= id2; i++)
{
m += labels[i] + " ";
}
int nn = 12;
string[] mes = new string[nn];
int j = 0;
for (int i = 0; i < m.Length; i++)
{
if (m[i] == ' ')
{
j++;
}
else
{
mes[j] += m[i].ToString();
}
}
// чтобы настраивать сетку вручную выключи это
chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisX.IntervalOffset = 1;
double y = 0.1;
chart1.Series[0].Points.Clear();
chart1.ChartAreas[0].AxisX.CustomLabels.Clear();
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(-2, 1, comboBox3.Text, 0, LabelMarkStyle.LineSideMark));
chart1.Series[0].Color = Color.Blue;
int innd = 0;
int combo = Convert.ToInt32(comboBox3.Text);
for (int i = 0; i < mes.Length; i++)
{
if (mes[i] != null)
{
if (mes[i] != "декабрь")
{
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(i, i + 0.1, mes[i], 0, LabelMarkStyle.LineSideMark));
innd = i;
y += 0.1;
}
else
{
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(i, i + 0.1, mes[i], 0, LabelMarkStyle.LineSideMark));
innd = i;
}
}
}
List<object> provodki = new List<object>();
for (int i = 0; i < mes.Length; i++)
{
if (mes[i] != null)
{
switch (mes[i].ToString())
{
case "январь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-01-01' AND '" + comboBox3.Text + "-01-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "февраль":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-02-01' AND '" + comboBox3.Text + "-02-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "март":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-03-01' AND '" + comboBox3.Text + "-03-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "апрель":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-04-01' AND '" + comboBox3.Text + "-04-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "май":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-05-01' AND '" + comboBox3.Text + "-05-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "июнь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-06-01' AND '" + comboBox3.Text + "-06-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "июль":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-07-01' AND '" + comboBox3.Text + "-07-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "август":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-08-01' AND '" + comboBox3.Text + "-08-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "сентябрь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-09-01' AND '" + comboBox3.Text + "-09-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "октябрь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-10-01' AND '" + comboBox3.Text + "-10-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "ноябрь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-11-01' AND '" + comboBox3.Text + "-11-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
case "декабрь":
{
string Proovodki = "SELECT SUM (Kolvo) From Gurnal_provodok WHERE [Дата] BETWEEN '" + comboBox3.Text + "-12-01' AND '" + comboBox3.Text + "-12-31'";
var Zcmb = query1(Proovodki);
foreach (var ip in Zcmb)
{
System.Array yy = ((System.Array)(ip)); //приводим к типу System.Array
provodki.Add(Convert.ToString(yy.GetValue(0)));
}
break;
}
default: break;
}
}
}
for (int u = 0; u < provodki.Count; u++)
{
if (provodki[u].ToString() == "")
{
provodki[u] = "0";
}
}
double[] kol = new double[provodki.Count];
for (int r = 0; r < provodki.Count; r++)
{
kol[r] = Convert.ToDouble(provodki[r]);
}
int ii = -1;
int ie = 0;
//данные о количестве (объеме продаж)
//фактические продажи
chart1.Series[0].Points.Clear();
for (int i = 0; i < mes.Length; i++)
{
if (mes[i] != null)
{
chart1.Series[0].Points.AddXY(ii + 1, (double)(kol[ie]));
ie++;
ii++;
}
}
chart1.Annotations.Clear();
chart1.Series[0].IsValueShownAsLabel = true;
//значение точек
foreach (DataPoint point in chart1.Series[0].Points)
{
TextAnnotation annotation = new TextAnnotation();
annotation.Text = point.YValues[0].ToString();
annotation.SetAnchor(point);
chart1.Annotations.Add(annotation);
}
chart1.Series[1].Points.Clear();
chart1.Series[2].Points.Clear();
string Ind1 = comboBox5.Text;
int Ind11 = comboBox4.SelectedIndex;
int Ind = Math.Abs(comboBox3.SelectedIndex - comboBox4.SelectedIndex);
string mm = "";
for (int i = 0; i <= Ind; i++)
{
for (int jj = id2; jj < labels.Length; jj++)
{
if (labels[jj].ToString() == Ind1 && i == Ind11)
{
mm += labels[jj].ToString() + " ";
break;
}
else
{
if (labels[jj].ToString() != Ind1 || i != Ind11)
mm += labels[jj].ToString() + " ";
}
}
id2 = 0;
}
int k = 0;
for (int i = 0; i < mm.Length; i++)
{
if (mm[i] == ' ')
{
k++;
}
}
string[] mes1 = new string[k];
int jjj = 0;
for (int i = 0; i < mm.Length; i++)
{
if (mm[i] == ' ')
{
jjj++;
}
else
{
mes1[jjj] += mm[i].ToString();
}
}
if (checkBox1.Checked == true)
{
if (comboBox5.Text == "" || comboBox4.Text == "")
{
}
else
{
mes = mes.Where(item => item != null).ToArray();
//всевсе- числа, mes-месяца
double[] vsevse = new double[mes.Length];
int q = 0;
foreach (DataPoint point in chart1.Series[0].Points)
{
vsevse[q] = Convert.ToDouble(point.YValues[0]);
q++;
}
////считаем t
double n = mes.Length;
//считаем коэффициенты
double sumx = 0;
double sumt1 = 0;
double _1_sumt = 0;
double sum_t_2 = 0; double _1_sum_t_2 = 0; double sum_t_2_1 = 0; ; double sumtx1 = 0;
//г.п.
double gsumtx = 0, gsumt = 0, g_1_sumt = 0, g_1_sum_t_2 = 0;
for (int i1 = 0; i1 < mes.Length; i1++)
{
sumx += vsevse[i1];
////гип.ф
gsumtx += (vsevse[i1]) / (i1 + 1);
gsumt += 1.0 / (i1 + 1);
g_1_sum_t_2 += 1.0 / (Math.Pow((i1 + 1), 2));
////лог.ф.
sumtx1 += Math.Log(i1 + 1) * vsevse[i1];
sumt1 += Math.Log(i1 + 1);
sum_t_2 += Math.Pow((i1 + 1), 2);
sum_t_2_1 += Math.Pow(Math.Log(i1 + 1), 2);
}
//гипер. ф.
double a1 = (n * gsumtx - sumx * gsumt) / (n * g_1_sum_t_2 - Math.Pow(gsumt, 2));
double a0 = (1.0 / n) * (sumx) - (1.0 / n) * a1 * gsumt;
////логариф. ф
double b = (n * sumtx1 - sumt1 * sumx) / (n * sum_t_2_1 - Math.Pow(sumt1, 2));
double a = (1.0 / n) * (sumx) - (1.0 / n) * b * sumt1;
double time = mes.Length + mes1.Length - 1;
double[] vse1 = new double[mes.Length + (mes1.Length - 1)];
double[] vse2 = new double[mes.Length + mes1.Length];
for (int i1 = 0; i1 < time; i1++)
{
//логар.ф.
vse2[i1] = a + b * Math.Log(i1 + 1);
//гипер. ф.
vse1[i1] = a0 + (a1 / (i1 + 1));
}
for (int i = 0; i < mes1.Length; i++)
{
if (mes1[i] != "декабрь")
{
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(innd, innd + 0.1, mes1[i], 0, LabelMarkStyle.LineSideMark));
innd++;
}
else
{
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(innd, innd + 0.1, mes1[i], 0, LabelMarkStyle.LineSideMark));
combo = combo + 1;
chart1.ChartAreas[0].AxisX.CustomLabels.Add(new CustomLabel(innd, innd + 1, " " + combo.ToString(), 0, LabelMarkStyle.LineSideMark));
innd++;
}
}
chart1.Series[1].BorderDashStyle = ChartDashStyle.Dash;
chart1.Series[1].Color = Color.Red;
chart1.Series[2].BorderDashStyle = ChartDashStyle.Dash;
chart1.Series[2].Color = Color.Green;
ii = -1;
for (int i = 0; i < time; i++)
{
chart1.Series[1].Points.AddXY(ii + 1, Math.Round((vse1[i]), 0));
chart1.Series[2].Points.AddXY(ii + 1, Math.Round((vse2[i]), 0));
ii++;
}
//значение точек
foreach (DataPoint point in chart1.Series[1].Points)
{
TextAnnotation annotation = new TextAnnotation();
annotation.Text = point.YValues[0].ToString();
annotation.SetAnchor(point);
chart1.Annotations.Add(annotation);
}
//значение точек
foreach (DataPoint point in chart1.Series[2].Points)
{
TextAnnotation annotation = new TextAnnotation();
annotation.Text = point.YValues[0].ToString();
annotation.SetAnchor(point);
chart1.Annotations.Add(annotation);
}
//считаем ошибки
double[] vse11 = new double[Convert.ToInt32(n)];
double[] vse22 = new double[Convert.ToInt32(n)];
for (int i1 = 0; i1 < Convert.ToInt32(n); i1++)
{
//логар.ф.
vse22[i1] = a + b * Math.Log(i1 + 1);
//гипер. ф.
vse11[i1] = a0 + (a1 / (i1 + 1));
}
double S = 0;
double S1 = 0;
for (int i1 = 0; i1 < Convert.ToInt32(n); i1++)
{
//лог.ф.
S1 += (vsevse[i1] - vse22[i1]) / n;
//г.ф.
S += (vsevse[i1] - vse11[i1]) / n;
}
S = Math.Sqrt(S);
S1 = Math.Sqrt(S1);
if (S > S1)
{
label4.Text = "Лучшей кривой считается логарифмическая кривая";
}
else
{
label4.Text = "Лучшей кривой считается гиперболическая кривая";
}
}
chart1.Invalidate();
}
}
}
catch (Exception) { }
}
}
}
Сургачева Оксана, ИСЭбд-31
Документ
Категория
Рефераты
Просмотров
25
Размер файла
145 Кб
Теги
работа, отчет, лабораторная
1/--страниц
Пожаловаться на содержимое документа