Copyright © 2009, Janusz Bonarowski
1
KolVB7
Za pomocą instrukcji cyklu znajdź wartość argumentu, dla którego funkcja cos(x) osiąga pierwsze minimum. Obliczenia wykonać z krokiem dx=0.01
Rozwiązanie
Rys. 1. Propozycja formularza
Objaśnienia algorytmu znajdują się w kodzie aplikacji
Copyright © 2009, Janusz Bonarowski
2 Kod aplikacji
Private Sub btnOblicz_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOblicz.Click Dim dx, xstart As Double
Dim x1, x2, y1, y2 As Double
' Wyczyszczenie listy podglądu ListBox1.Items.Clear()
' Pobieranie danych dx = CDbl(txtDx.Text)
xstart = CDbl(txtXstart.Text)
' Aby badać funkcję musimy posiadać jakieś o niej informacje.
' Załóżmy zatem, że wiemy tylko tyle:
' (1) funkcja cos(x), dla x bliskich 0 ma wartości maksymalne
' (2) wraz ze wzrostem x funkcja maleje, aż do osiągnięcia minimum.
' Określamy wartość funkcji dla punkty startowego ' i dla punktu następnego.
x1 = xstart
y1 = Math.Cos(x1)
x2 = xstart + dx y2 = Math.Cos(x2)
' Wydruk kontrolny do ListBox1
ListBox1.Items.Add(Format(x1, "0.000").ToString & " ; " & _ Format(y1, "0.000000").ToString) ListBox1.Items.Add(Format(x2, "0.000").ToString & " ; " & _ Format(y2, "0.000000").ToString)
' Jeśli jesteśmy na począku poszukiwania, to y2 < y1
' Będziemy zwiększać argument x w kolejnych krokach i badać ' czy nowa wartośc funkcji nadal jest mniejsze od poprzedniej.
' Poszukiwania należy zatrzymać, gdy nowa wartość funkcji ' jest większa od starej wartości.
Do While y2 < y1 y1 = y2 x2 = x2 + dx y2 = Math.Cos(x2)
ListBox1.Items.Add(Format(x2, "0.000").ToString & " ; " & - Format(y2, "0.000000").ToString) Loop
' Gdy program zajdzie się w tym miejscu (wyszedł z pętli), ' oznacza to, że y2 nie jest mniejsze od y1.
' Można zatem powiedzieć, że y1 jest wartością minimalną finkcji, ' a (x2 - dx) jest wartością argumentu dla tego minimum
lblWynik.Text = "x = " & (x2 - dx).ToString & vbCrLf & _ "y = " & y1.ToString
End Sub