Решить краевую задачу методом стрельбы и полученное решение сравнить с аналитическим (если последнее можно найти). Результаты численного интегрирования представьте в виде графиков, которые необходимо строить для всех параметров .

Код программы:

Dim x() As Single

Dim y() As Single

Dim z() As Single

Dim a0 As Single

Dim a1 As Single

Dim a2 As Single

Dim c As Single

Dim f1 As Single

Dim f2 As Single

Dim a As Single

Dim b As Single

Dim e As Single

Dim cont As Integer

Dim n As Integer

Private Sub Command1_Click()

c = 1.5

e = 0.001

n = Val(InputBox(«n=», n))

ReDim x(1 To n)

ReDim y(1 To n)

ReDim z(1 To n)

a0 = 0

a1 = 1.9

Label1.Caption = «A1 = » & Str(a0) + «рад»

Label2.Caption = «A2= » & Str(a1) + «рад»

f1 = f(a0, n)

f2 = f(a1, n)

cont = 0

Do

a2 = (a0 + a1) / 2

If f(a0 – c, n) * (f(a2, n) – c) < 0 Then

a1 = a2

Else

a0 = a2

End If

cont = cont + 1

Label4.Caption = Label4.Caption + «tan(a)=» + Chr$(32) + Chr$(32) + Format(Tan(a2), «0.00000″) + Chr$(13)

Label6.Caption = Label6.Caption + «y(x)=» + Chr$(32) + Chr$(32) + Format(f(a2, n), «0.00000″) + Chr$(13)

Loop While Abs(a0 – a1) > e

t = Atn(z(1))

Label3.Caption = «искомый угол A3 = » & Format(t, «0.00000″)

Label8.Caption = «y(x) = » & Format(f(a2, n), «0.000000″)

Label9.Caption = «погрешность = » & Format(e, «0.0000″)

End Sub

Public Function f(al As Single, n As Integer) As Single

Dim x0 As Single

Dim y0 As Single

Dim i As Integer

Dim h As Single

Dim k1, k2, k3, k4 As Single

Dim l1, l2, l3, l4 As Single

a = 0

b = 3.14 / 2

h = (b – a) / n

x(1) = 0

z(1) = Sin(al) / Cos(al)

y(1) = 0

For i = 1 To n – 1

k1 = z(i)

l1 = -y(i)

k2 = z(i) + l1 * h / 2

l2 = -1 * ((y(i) + k1 * h / 2))

k3 = z(i) + k2 * h / 2

l3 = -(y(i) + k2 * h / 2)

k4 = z(i) + k3 * h

l4 = -(y(i) + k3 * h)

y(i + 1) = y(i) + h / 6 * (k1 + 2 * k2 + 2 * k3 + k4)

z(i + 1) = z(i) + h / 6 * (l1 + 2 * l2 + 2 * l3 + l4)

x(i + 1) = a + h * i

Next i

f = y(n)

Call d1

End Function

Рисование графиков

Private Sub d1()

Dim x0 As Single

Dim y0 As Single

Dim xk As Single

Dim yk As Single

Dim zk As Single

Dim i As Single

With Form2

.Show

x0 = .ScaleWidth / 2 – 4

y0 = .ScaleHeight / 2 – 1

Form2.Line (x0, .ScaleHeight)-(x0, 0)

Form2.Line (.ScaleWidth, y0)-(0, y0)

For i = 1 To 250

‘График ф-ции y(x)

.CurrentX = 5.8

.CurrentY = 3.7

Form2.Print «y=y(x)»

yk = y0 – y(i)

xk = x(i) + x0

Form2.PSet (xk, yk)

Next i

‘Разметка осей координат

For i = 0 To 25 Step 0.5

Form2.Line (x0 + i, y0 – 0.08)-(x0 + i, y0 + 0.1)

.CurrentX = x0 + i – 0.1

.CurrentY = y0 + 0.1

Form2.Print i;

Form2.Line (x0 – i, y0 – 0.08)-(x0 – i, y0 + 0.1)

.CurrentX = x0 – i – 0.1

.CurrentY = y0 + 0.2

Form2.Print «-» & i;

Form2.Line (x0 – 0.08, y0 + i)-(x0 + 0.1, y0 + i)

.CurrentX = x0 + 0.15

.CurrentY = y0 + i – 0.08

Form2.Print «-» & i;

Form2.Line (x0 – 0.08, y0 – i)-(x0 + 0.1, y0 – i)

.CurrentX = x0 + 0.1

.CurrentY = y0 – i – 0.08

Form2.Print i;

Next i

End With

End Sub

—————————————————————————————————————————————————-

Графическая интерпретация:

На отрезке [0; π/2]

Входные данные:

a=0

b= π/2

Погрешность =0.001

Выходные данные:

α = 0.982 ± 0.001,   (0.981;  0.983)