Вечер добрый. Дано уравнение 8*SINX-3/X=0 Требуется найти х методом хорд. Х найти один, самый первый. Сделана табуляция (по значения 1,2,3,4,5) и по ней построен график, видится что х=3. Я понимаю как найти х вручную. Я худо-бедно могу разобрать блок-схему. Но прога вообще не выдает результата. Никакого. Ошибку я найти самостоятельно не в состоянии. Ибо программист я так себе... Преподаватель сказал использовать цикл Do While....Loop [vba]
Код
Sub Lab() Dim a As Double, b As Double, E As Double, x As Double, x0 As Double E = 0.005 a = Range("A1").Value b = Range("A5").Value x0 = b fa = 8 * Sin(a) - 3 / (a) fb = 8 * Sin(b) - 3 / (b) fx0 = 8 * Sin(x0) - 3 / (x0) Do While Abs(fx0 > E) If fa * fb < 0 Then b = x0 End If fa = 8 * Sin(a) - 3 / (a) x0 = (a + b) / 2 fx0 = 8 * Sin(x0) - 3 / (x0) Loop x0 = b
End Sub
[/vba]
Вечер добрый. Дано уравнение 8*SINX-3/X=0 Требуется найти х методом хорд. Х найти один, самый первый. Сделана табуляция (по значения 1,2,3,4,5) и по ней построен график, видится что х=3. Я понимаю как найти х вручную. Я худо-бедно могу разобрать блок-схему. Но прога вообще не выдает результата. Никакого. Ошибку я найти самостоятельно не в состоянии. Ибо программист я так себе... Преподаватель сказал использовать цикл Do While....Loop [vba]
Код
Sub Lab() Dim a As Double, b As Double, E As Double, x As Double, x0 As Double E = 0.005 a = Range("A1").Value b = Range("A5").Value x0 = b fa = 8 * Sin(a) - 3 / (a) fb = 8 * Sin(b) - 3 / (b) fx0 = 8 * Sin(x0) - 3 / (x0) Do While Abs(fx0 > E) If fa * fb < 0 Then b = x0 End If fa = 8 * Sin(a) - 3 / (a) x0 = (a + b) / 2 fx0 = 8 * Sin(x0) - 3 / (x0) Loop x0 = b
Sub Lab_from_Doober() Dim a As Double, b As Double, E As Double E = 0.005 a = 2 'Range("A1").Value b = 4 ' Range("A5").Value Результат = Хорда(a, b, E) End Sub Function f(ByVal x As Double) As Double f = 8 * Sin(x) - 3 / (x) End Function Function Хорда(ByVal a As Double, ByVal b As Double, ByVal epsilon As Double) As Double Do While Math.Abs(b - a) > epsilon a = b - (b - a) * f(b) / (f(b) - f(a)) b = a - (a - b) * f(a) / (f(a) - f(b)) Loop Хорда = b End Function
[/vba]
Результат =3,01697355819812 [vba]
Код
Sub Lab_from_Doober() Dim a As Double, b As Double, E As Double E = 0.005 a = 2 'Range("A1").Value b = 4 ' Range("A5").Value Результат = Хорда(a, b, E) End Sub Function f(ByVal x As Double) As Double f = 8 * Sin(x) - 3 / (x) End Function Function Хорда(ByVal a As Double, ByVal b As Double, ByVal epsilon As Double) As Double Do While Math.Abs(b - a) > epsilon a = b - (b - a) * f(b) / (f(b) - f(a)) b = a - (a - b) * f(a) / (f(a) - f(b)) Loop Хорда = b End Function
Это как? добавте еще одну строку кода и будет вам видимый результат.[vba]
Код
Результат = Хорда(a, b, E) MsgBox "корень= " & Результат & vbCrLf & _ "Значение функции =" & f(Результат) & vbCrLf & _ "What I have done , I decided this difficult lab"
Это как? добавте еще одну строку кода и будет вам видимый результат.[vba]
Код
Результат = Хорда(a, b, E) MsgBox "корень= " & Результат & vbCrLf & _ "Значение функции =" & f(Результат) & vbCrLf & _ "What I have done , I decided this difficult lab"