Сайт о программировании, математике и моделировании
Решений краевой задачи. Методом стрельбы
Решить краевую задачу методом стрельбы и полученное решение сравнить с аналитическим (если последнее можно найти). Результаты численного интегрирования представьте в виде графиков, которые необходимо строить для всех параметров .
Код программы:
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)
Print article | This entry was posted by root on 10.01.2012 at 7:41 дп, and is filed under Задачи и решения. Follow any responses to this post through RSS 2.0. Вы можете перейти в конец записи и оставить комментарий. Пинги запрещены. |
3 месяца назад
Интересно, это программа – под какой интерпретатор?
1 месяц назад
Здравствуйте. Программа реализована на Visual Basic.