Построение графика функции

Автор: Пользователь скрыл имя, 21 Января 2013 в 21:40, лабораторная работа

Краткое описание

Цель работы: построить график функции в среде разработки Visual Basic.NET.
Будем считать, что на рынке одного товара функция спроса и функция предложения – линейные функции цены на момент времени или цены предыдущего момента времени.
Составить программу, которая:
1. Изображает кривую спроса и кривую предложения на плоскости, по оси абсцисс которой отложена цена , а по оси ординат – количество сделок.
2. Вычисляет начальное предложение исходя из начального значения цены на момент времени .
3. Изображает маршрут "изменение цены → изменение числа сделок", который имеет вид "паутины", повторив несколько раз процессы.

Файлы: 25 файлов

Документ Microsoft Wordистория.docx

— 17.42 Кб (Открыть, Скачать)

ВВОДНИК.doc

— 326.00 Кб (Открыть, Скачать)

код на 3 лабу по модел экон.docx

— 491.37 Кб (Открыть, Скачать)

лаб 3 рис 1.PNG

— 45.97 Кб (Скачать)

лаб 3 рис 2.PNG

— 46.37 Кб (Скачать)

лаб 3 рис 3.PNG

— 42.72 Кб (Скачать)

лаб 3 рис 4.PNG

— 44.47 Кб (Скачать)

код на 4 лабу модел экон.docx

— 22.36 Кб (Скачать)

Imports System.Math

Imports System.Drawing.Drawing2D

Public Class Form1

    Public Sub построение_графика(ByVal sinX(,) As Single, ByVal sinY(,) As Single, ByVal кол_во_ГРАФИКОВ As Integer, ByVal подпись_Y As String, ByVal подпись_Х As String)

        Dim xmin, xmax, ymax, ymin As Single

        Dim высота_граф, ширина_граф As Single

        Dim i As Integer = 0

        Dim g As Graphics = PB.CreateGraphics

        Dim n As Integer = 1000 ' Размерность массива

        g.Clear(Color.White)

        xmin = 999999 : xmax = 0

        ymin = 9999

        For i = 1 To кол_во_ГРАФИКОВ

            For j = 0 To n

                If xmin > sinX(i, j) And sinY(i, j) > 0 Then : xmin = sinX(i, j)

                End If

                If xmax < sinX(i, j) Then : xmax = sinX(i, j)

                End If

 

                If ymin > sinY(i, j) Then : ymin = sinY(i, j)

                End If

                If ymax < sinY(i, j) Then : ymax = sinY(i, j)

                End If

            Next

        Next

        высота_граф = PB.Height - 120 : ширина_граф = PB.Width - 100 - 40

        g.DrawLine(Pens.Black, 50, высота_граф + 50, 50 + ширина_граф + 30, высота_граф + 50)

        g.DrawLine(Pens.Black, 50 + ширина_граф + 20, высота_граф + 45, 50 + ширина_граф + 30, высота_граф + 50)

        g.DrawLine(Pens.Black, 50 + ширина_граф + 20, высота_граф + 55, 50 + ширина_граф + 30, высота_граф + 50) ' ось Х

        g.DrawLine(Pens.Black, 50, высота_граф + 50, 50, 30)

        g.DrawLine(Pens.Black, 45, 40, 50, 30)

        g.DrawLine(Pens.Black, 55, 40, 50, 30) ' ось У

        For i = 1 To кол_во_ГРАФИКОВ

            For j = 1 To n

                If sinY(i, j) = 0 Then

                    Exit For

                End If

                g.DrawLine(Pens.Green, 50 + Abs(sinY(i, j - 1) - ymin) * (ширина_граф / (ymax - ymin)), _

                50 + высота_граф - Abs(sinX(i, j - 1) - xmin) * (высота_граф / (xmax - xmin)), _

                50 + Abs(sinY(i, j) - ymin) * (ширина_граф / (ymax - ymin)), _

                50 + высота_граф - Abs(sinX(i, j) - xmin) * (высота_граф / (xmax - xmin)))

            Next

        Next

        Dim myFont = New Font("Arial", 12, FontStyle.Bold)

        Dim myFont1 = New Font("Arial", 8, FontStyle.Regular)

        Dim myBrush = New SolidBrush(Color.Black)

        ' вывод значений графика

        g.DrawString(подпись_Х, myFont, myBrush, 10, 20)

        g.DrawString(подпись_Y, myFont, myBrush, 50 + ширина_граф + 20, высота_граф + 50)

        Dim шаг_для_надписей_по_высоте, шаг_для_надписей_по_горизонтали As Single

        For i = 0 To 10

            шаг_для_надписей_по_высоте = 50 + высота_граф - высота_граф / 10 * i

            g.DrawString(Format(CStr((xmax - xmin) / 10 * i) + xmin, "Fixed"), myFont1, myBrush, 3, шаг_для_надписей_по_высоте - 10)

            g.DrawLine(Pens.Red, 45, шаг_для_надписей_по_высоте, 55, шаг_для_надписей_по_высоте)

            шаг_для_надписей_по_горизонтали = 50 + (ширина_граф) / 10 * i

            g.DrawLine(Pens.Red, шаг_для_надписей_по_горизонтали, 50 + высота_граф - 5, шаг_для_надписей_по_горизонтали, 50 + высота_граф + 5)

            g.DrawString(Format(CStr((ymax - ymin) / 10 * i), "Fixed"), myFont1, myBrush, шаг_для_надписей_по_горизонтали  - 10, 50 + высота_граф + 15)

        Next

    End Sub

 

    Dim xn, xsh, xl As Single

    Public SinX(1000, 1000), sinY(1000, 1000) As Single

 

    Private Sub Кривая_доход_потребление_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кривая_доход_потребление.Click

        Dim U, b(3), P(3), Qmin, Qmaxs, Q As Single

        Dim xz(3), x1, x2 As Single

        Dim количество_графиков As Integer = CInt(Kol_voGR.Text)

        Dim indmas As Integer = 0

        Array.Clear(SinX, 0, 10201)

        Array.Clear(sinY, 0, 10201)

        Dim n As Integer = 1000 ' Размерность массива

        b(1) = CSng(B1bt.Text) : b(2) = CSng(B2tb.Text)

        P(1) = CSng(P1tb.Text) : P(2) = CSng(P2tb.Text)

        Qmaxs = CSng(Qmaxstb.Text) : Qmin = CSng(Qmintb.Text)

        For график = 1 To количество_графиков

            Q = Qmin + (Qmaxs - Qmin) / (количество_графиков - 1) * (график - 1)

            For i = 1 To 2

                xz(i) = (Q / P(i)) * (b(i) / (b(1) + b(2))) ' точки касания

            Next

            U = b(1) * Log(xz(1)) + b(2) * Log(xz(2))

            If CSng(TextBox1.Text) > U Then

                TextBox1.Text = U.ToString

            End If

            If CSng(TextBox2.Text) < U Then

                TextBox2.Text = U.ToString

            End If

            For i = 1 To 450 Step 450 / n 'кривая доход потребление

                x1 = i

                x2 = ((Exp(U)) / ((x1) ^ b(1))) ^ (1 / b(2))

                If x2 <= 400 Then

                    SinX(график, indmas) = x2

                    sinY(график, indmas) = x1

                    indmas += 1

                End If

            Next

            indmas = 0

            For i = 1 To 2000

                If (Q - P(1) * i) / P(2) <= -1 Then

                    Exit For

                End If

                SinX(количество_графиков + график + 1, indmas) = (Q - P(1) * i) / P(2) + 1

                sinY(количество_графиков + график + 1, indmas) = i - 1

                indmas += 1

            Next

            indmas = 0

            For i = Qmin / 2 To Qmaxs + 100 Step (Qmaxs + 100 - Qmin / 2) / n ' линия соединяющая точки касания

                For j = 1 To 2

                    xz(j) = (i / P(j)) * (b(j) / (b(1) + b(2)))

                Next

                SinX(количество_графиков + 1, indmas) = xz(2)

                sinY(количество_графиков + 1, indmas) = xz(1)

                indmas += 1

            Next

            indmas = 0

        Next

        построение_графика(SinX, sinY, CInt(Kol_voGR.Text) * 2 + 1, "X(1)", "X(2)")

    End Sub

 

    Private Sub Кривая_доход_потреб_в_зав_от_дох_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кривая_доход_потреб_в_зав_от_дох.Click

        Dim U, b(3), P(3), Qmin, Qmaxs, Q As Single

        Dim xz(3), x1, x2 As Single

        Dim количество_графиков As Integer = CInt(Kol_voGR.Text)

        Dim indmas As Integer = 0

        Array.Clear(SinX, 0, 10201)

        Array.Clear(sinY, 0, 10201)

        Dim n As Integer = 1000 ' Размерность массива

        b(1) = CSng(B1bt.Text) : b(2) = CSng(B2tb.Text)

        P(1) = CSng(P1tb.Text) : P(2) = CSng(P2tb.Text)

        Qmaxs = CSng(Qmaxstb.Text) : Qmin = CSng(Qmintb.Text)

        For график = 1 To количество_графиков

            b(1) = 0.5 + 0.05 * Sin(Q / 40)

            Q = Qmin + (Qmaxs - Qmin) / (количество_графиков - 1) * (график - 1)

            For i = 1 To 2

                xz(i) = (Q / P(i)) * (b(i) / (b(1) + b(2))) ' точки касания

            Next

            U = b(1) * Log(xz(1)) + b(2) * Log(xz(2))

            For i = 1 To 450 Step 450 / n 'кривая доход потребление

                x1 = i

                x2 = ((Exp(U)) / ((x1) ^ b(1))) ^ (1 / b(2))

                If x2 <= 400 Then

                    SinX(график, indmas) = x2

                    sinY(график, indmas) = x1

                    indmas += 1

                End If

            Next

            indmas = 0

            For i = 1 To 2000

                If (Q - P(1) * i) / P(2) <= -1 Then

                    Exit For

                End If

                SinX(количество_графиков + график + 1, indmas) = (Q - P(1) * i) / P(2) + 1

                sinY(количество_графиков + график + 1, indmas) = i - 1

                indmas += 1

                '(Q - P(1) * i) / P(2) + 1

            Next

            indmas = 0

            indmas = 0

        Next

        For i = Qmin / 2 To Qmaxs + 100 Step (Qmaxs + 100 - Qmin / 2) / n ' линия соединяющая точки касания

            b(1) = 0.5 + 0.05 * Sin(i / 40)

            For j = 1 To 2

                xz(j) = i * b(j) / P(j) / (b(1) + b(2))

            Next

            SinX(количество_графиков + 1, indmas) = xz(2)

            sinY(количество_графиков + 1, indmas) = xz(1)

            indmas += 1

        Next

        построение_графика(SinX, sinY, CInt(Kol_voGR.Text) * 2 + 1, "X(1)", "X(2)")

    End Sub

 

    Private Sub Кривая_цены_потребление_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кривая_цены_потребление.Click

        Dim U, b(3), P(3), Qmin, Qmaxs, Q As Single

        Dim xz(3), x1, x2 As Single

        Dim количество_графиков As Integer = CInt(Kol_voGR.Text)

        Dim indmas As Integer = 0

        Array.Clear(SinX, 0, 10201)

        Array.Clear(sinY, 0, 10201)

        Dim n As Integer = 1000 ' Размерность массива

        b(1) = CSng(B1bt.Text) : b(2) = CSng(B2tb.Text)

        P(1) = CSng(P1tb.Text) : P(2) = 1.5

        Qmaxs = CSng(Qmaxstb.Text) : Qmin = CSng(Qmintb.Text)

        For график = 1 To количество_графиков

            P(1) = 1000 / количество_графиков * график

            Q = 400

            For i = 1 To 2

                xz(i) = (Q / P(i)) * (b(i) / (b(1) + b(2))) ' точки касания

            Next

            U = b(1) * Log(xz(1)) + b(2) * Log(xz(2))

            If CSng(TextBox1.Text) > U Then

                TextBox1.Text = U.ToString

            End If

            If CSng(TextBox2.Text) < U Then

                TextBox2.Text = U.ToString

            End If

            For i = 0.001 To 2 Step 2 / n 'кривая доход потребление

                x1 = i

                x2 = ((Exp(U)) / ((x1) ^ b(1))) ^ (1 / b(2))

                If x2 <= 400 Then

                    SinX(график, indmas) = x2

                    sinY(график, indmas) = x1

                    indmas += 1

                End If

            Next

            indmas = 0

            For i = 0.001 To 5 Step 5 / n ' бюджетная линия

                If (Q - P(1) * i) / P(2) <= 1 Then

                    Exit For

                End If

                SinX(количество_графиков + график + 1, indmas) = (Q - P(1) * i) / P(2)

                sinY(количество_графиков + график + 1, indmas) = i

                indmas += 1

            Next

            indmas = 0

        Next

        indmas = 0

        For i = 200 To 1200 Step (1000) / n ' линия соединяющая точки касания

            xz(1) = (400 / i) * (b(1) / (b(1) + b(2)))

            xz(2) = (400 / P(2)) * (b(2) / (b(1) + b(2)))

            SinX(количество_графиков + 1, indmas) = xz(2)

            sinY(количество_графиков + 1, indmas) = xz(1)

            indmas += 1

        Next

        построение_графика(SinX, sinY, CInt(Kol_voGR.Text) * 2 + 1, "X(1)", "X(2)")

    End Sub

 

    Private Sub Кривая_цены_потреб_в_зав_от_цены_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Кривая_цены_потреб_в_зав_от_цены.Click

        Dim U, b(3), P(3), Qmin, Qmaxs, Q As Single

        Dim xz(3), x1, x2 As Single

        Dim количество_графиков As Integer = CInt(Kol_voGR.Text)

        Dim indmas As Integer = 0

        Array.Clear(SinX, 0, 10201)

        Array.Clear(sinY, 0, 10201)

        Dim n As Integer = 1000 ' Размерность массива

        'b(1) = CSng(B1bt.Text) :

        b(2) = CSng(B2tb.Text)

        P(1) = CSng(P1tb.Text) : P(2) = 1.5

        Qmaxs = CSng(Qmaxstb.Text) : Qmin = CSng(Qmintb.Text)

        For график = 1 To количество_графиков

            P(1) = 1000 / количество_графиков * график

            b(1) = 1 / (Sqrt(P(1)))

            Q = 400

            For i = 1 To 2

                xz(i) = (Q / P(i)) * (b(i) / (b(1) + b(2))) ' точки касания

            Next

            U = b(1) * Log(xz(1)) + b(2) * Log(xz(2))

            If CSng(TextBox1.Text) > U Then

                TextBox1.Text = U.ToString

            End If

            If CSng(TextBox2.Text) < U Then

                TextBox2.Text = U.ToString

            End If

            For i = 0.001 To 0.28 Step 0.28 / n 'кривая доход потребление

                x1 = i

                x2 = ((Exp(U)) / ((x1) ^ b(1))) ^ (1 / b(2))

                If x2 <= 400 Then

                    SinX(график, indmas) = x2

                    sinY(график, indmas) = x1

                    indmas += 1

                End If

            Next

            indmas = 0

            For i = 0.001 To 3 Step 3 / n ' бюджетная линия

                If (Q - P(1) * i) / P(2) <= 225 Then

                    Exit For

                End If

                SinX(количество_графиков + график + 1, indmas) = (Q - P(1) * i) / P(2)

                sinY(количество_графиков + график + 1, indmas) = i

                indmas += 1

            Next

            indmas = 0

        Next

        indmas = 0

        For i = 200 To 5400 Step (5400 - 200) / n ' линия соединяющая точки касания

            P(1) = i

            b(1) = 1 / (Sqrt(P(1)))

            xz(1) = (400 / i) * (b(1) / (b(1) + b(2)))

            xz(2) = (400 / P(2)) * (b(2) / (b(1) + b(2)))

            SinX(количество_графиков + 1, indmas) = xz(2)

            sinY(количество_графиков + 1, indmas) = xz(1)

            indmas += 1

        Next

        построение_графика(SinX, sinY, CInt(Kol_voGR.Text) * 2 + 1, "X(1)", "X(2)")

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 

    End Sub

End Class


рис 4 1.PNG

— 59.89 Кб (Скачать)

рис 4 2.PNG

— 46.20 Кб (Скачать)

рис 4 3.PNG

— 47.77 Кб (Скачать)

рис 4 4.PNG

— 47.53 Кб (Скачать)

Лабораторная работа №4.xlsx

— 13.29 Кб (Открыть, Скачать)

Конспект лекций.pdf

— 740.17 Кб (Открыть, Скачать)

МоделирЭкон1.pdf

— 619.32 Кб (Открыть, Скачать)

МоделирЭкон2.pdf

— 349.29 Кб (Открыть, Скачать)

МоделирЭкон3.pdf

— 249.18 Кб (Открыть, Скачать)

МоделирЭкон4.pdf

— 221.67 Кб (Открыть, Скачать)

МоделирЭкон5.pdf

— 242.82 Кб (Открыть, Скачать)

ЛР №1 График.pdf

— 71.03 Кб (Открыть, Скачать)

ЛР №2 Элементы теории экстремума.pdf

— 404.99 Кб (Открыть, Скачать)

ЛР №3 Кривые безразличия.pdf

— 153.20 Кб (Открыть, Скачать)

ЛР №4 Теория потребления.pdf

— 119.86 Кб (Открыть, Скачать)

ЛР №5 Предельная полезность.pdf

— 95.27 Кб (Открыть, Скачать)

ЛР №6 Теория производства.doc

— 183.00 Кб (Открыть, Скачать)

Информация о работе Построение графика функции