Form1.Picture1.Line (tmp - 10, sh)-(tmp - 10, sh - sh / 40) ' рисование засечки в точке tmp




Form1.Picture1.CurrentX = tmp - 15 'установка текущего значения координаты пера по оси x

Form1.Picture1.CurrentY = sh - 40 'установка текущего значения координаты пера по оси y

Form1.Picture1.Print tmp 'вывод подписи при зесечке

Next tmp 'конец цикла

Form1.Picture1.DrawWidth = 2 'установка жирного пера

For n = 10 To 200 Step 10 'цикл - разное количество шагов

sp = 0 'начальное значение интеграла

st = 0 'начальное значение интеграла

For x = a To b - 0.000001 Step (b - a) / n 'цикл - вычисление интеграла

sp = sp + f(x) * (b - a) / n 'формула левых прямоугольников

Next x 'конец цикла

i = 1

Do While i <= n

x = a + (b - a) * i / n

st = st + (b - a) * (f(x - 2 * (b - a) / n) + 4 * f(x - (b - a) / n) + f(x)) / (3 * n) 'формула симпсона

'st = st + (b - a) * 2 * (f(x) + 2 * f(x - 1 / n)) / (3 * n) 'формула симпсона

i = i + 2

Loop

yp = sh - Abs(sp - r) 'вычисление координаты точки, соответствующей sp

yt = sh - Abs(st - r) 'вычисление координаты точки, соответствующей st

Form1.Picture1.ForeColor = QBColor(3) 'установка морской волны цвета линии

Form1.Picture1.Line (n - 20, Abs(yp1) / 10)-(n - 10, Abs(yp) / 10) 'рисование части линии

Form1.Picture1.ForeColor = QBColor(10) 'установка зеленого цвета линии

Form1.Picture1.Line (n - 20, Abs(yt1) / 10)-(n - 10, Abs(yt) / 10) 'рисование части линии

yp1 = yp 'сохранение текущего результата для следующей итерации

yt1 = yt 'сохранение текущего результата для следующей итерации

Next n 'конец цикла

Form1.Show (1)

End Sub

рис 4. Исследование сходимости разных методов

Private Sub simpson_Click()

Dim n As Integer, k As Integer

Dim y As Double, y1 As Double, x As Double, r As Double, s As Double

Dim tmp As Double, minf As Double, maxf As Double

Dim a As Double, b As Double, sw As Double, sh As Double

Dim q As Double, q1 As Double, aq As Double, bq As Double, cq As Double

Dim h As Double, x1q As Double, x2q As Double, x3q As Double, zv As Double, kor As Double

a = Val(Form4.Text1.Text) 'чтение введённого значения a

b = Val(Form4.Text2.Text) 'чтение введённого значения b

n = Val(Form4.Text3.Text) 'чтение введённого значения n

If (n <= 0) Or (a >= b) Then 'проверка корректности данных

MsgBox ("Введены некорректные данные") 'вывод сообщения об ошибке

Exit Sub 'выход из функции

End If 'конец проверки

sw = b - a 'вычисление масштаба по оси x

kor = ((-18 + 6 * 33 ^ (1 / 2.5)) ^ (1 / 2.5)) / 6

minf = f(a)

maxf = f(a)

If minf > f(b) Then minf = f(b)

If maxf < f(b) Then maxf = f(b)

If (a >= kor) And (b <= kor) Then

If minf > f(kor) Then minf = f(kor)

If maxf < f(kor) Then maxf = f(kor)

End If

If (a >= -kor) And (b <= -kor) Then

If minf > f(-kor) Then minf = f(-kor)

If maxf < f(-kor) Then maxf = f(-kor)

End If

sh = maxf - minf 'вычисление масштаба по оси y

zv = maxf

If maxf < 0 Then zv = 0

If minf > 0 Then zv = sh

r = (Log((b ^ 2 + 1) / (b ^ 2 + 2.5)) - Log((a ^ 2 + 1) / (a ^ 2 + 2.5))) 'реальное значение

Form5.Picture1.Cls 'очистка области рисования

Form5.Picture1.DrawWidth = 1 'установка тонкого пера

Form5.Picture1.ScaleWidth = sw 'установка масштаба по оси x

Form5.Picture1.ScaleHeight = sh 'установка масштаба по оси y

For tmp = minf To maxf Step sh / 10 'цикл - рисование засечек по оси y

Form5.Picture1.Line (0, maxf - tmp)-(sw / 40, maxf - tmp) ' рисование засечки в точке tmp

Form5.Picture1.CurrentX = sw / 40 'установка текущего значения координаты пера по оси x

Form5.Picture1.CurrentY = maxf - tmp 'установка текущего значения координаты пера по оси y

Form5.Picture1.Print Format(tmp, "#0.00") 'вывод подписи при зесечке с двумя знаками после запятой

Next tmp 'конец цикла

Form5.Picture1.Line (0, zv)-(sw, zv)

For tmp = a To b Step sw / 10 'цикл - рисование засечек по оси x

Form5.Picture1.Line (tmp - a, zv)-(tmp - a, zv - sh / 40) ' рисование засечки в точке tmp

Form5.Picture1.CurrentX = tmp - a 'установка текущего значения координаты пера по оси x

Form5.Picture1.CurrentY = zv - sh / 20 'установка текущего значения координаты пера по оси y

Form5.Picture1.Print Format(tmp, "#0.00") 'вывод подписи при зесечке с двумя знаками после запятой

Next tmp 'конец цикла

s = 0 'начальное значение интеграла

y1 = f(a) 'начальное значение функции

Form5.Picture1.DrawWidth = 2 'установка жирного пера

For k = 1 To 500 'цикл - рисование графика функции

x = a + (b - a) * k / 500 'вычисление x

y = f(x) 'вычисление y

Form5.Picture1.Line (x - a - (x - a) / 500, maxf - y1)-(x - a, maxf - y) 'рисование части графика

y1 = y 'запоминание текущего результата для использывания на следующем шаге

Next k 'конец цикла

y1 = f(a) 'начальное значение функции

Form5.Picture1.DrawWidth = 1 'установка тонкого пера

k = 2

Do While k <= n 'цикл - вычисление интеграла и рисование графика

x = a + (b - a) * k / n 'вычисление x

y = f(x) 'вычисление y

Form5.Picture1.Line (x - 2 * (b - a) / n - a, zv)-(x - 2 * (b - a) / n - a, maxf - y1) 'рисование левой стороны криволинейной трапеции

x1q = x - 2 * (b - a) / n

x2q = x - (b - a) / n

x3q = x

h = (b - a) / n

aq = (f(x1q) - 2 * f(x2q) + f(x3q)) / (2 * h * h) 'вычисление коэффициентов параболы

bq = (f(x3q) - f(x1q)) / (2 * h) - aq * (x1q + x3q) 'вычисление коэффициентов параболы

cq = f(x1q) - aq * x1q * x1q - bq * x1q 'вычисление коэффициентов параболы

For q = x1q To x3q Step h / 10 ' рисование параболы

Form5.Picture1.Line (q - h / 10 - a, maxf - (aq * (q - h / 10) * (q - h / 10) + bq * (q - h / 10) + cq))-(q - a, maxf - (aq * q * q + bq * q + cq))

Next q



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: