Табулирование функции и бесконечного функционального ряда разложения функции на данном отрезке - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток, Написал код для табулирования функции и функционального ряда и оценки средних погрешностей - все работает, однако, значения в результате абсолютно разные. В этой связи и правильность оценки погрешностей под вопросом. Не могу понять, где ошибка или опечатка (опыт среде программирования VB.net - несколько недель):
Листинг программы
  1. Imports System.Math
  2. Public Class Form5
  3. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  4. TextBox4.Text = " x f(x) " + Chr(13) + Chr(10)
  5. TextBox5.Text = " x S " + Chr(13) + Chr(10)
  6. End Sub
  7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  8. Dim x0, xn, h, Eps, delta, S, y, a, c As Double
  9. Dim k, n, i As Long
  10. h = Val(TextBox8.Text)
  11. x0 = Val(TextBox1.Text)
  12. xn = Val(TextBox2.Text)
  13. Eps = Val(TextBox3.Text)
  14. 'Табулирование f(x)
  15. Select Case True
  16. Case x0 > -1 And xn < 1
  17. For x = x0 To xn Step h
  18. y = 1 / 4 * Log((1 + x) / (1 - x)) + 1 / 2 * Atan(x)
  19. TextBox4.Text = TextBox4.Text +
  20. Format(x, "0.000") + " " +
  21. Format(y, "0.00000") + Chr(13) + Chr(10)
  22. Next x
  23. Case x0 <= -1 Or x0 >= 1 And xn <= -1 Or xn >= 1 'Предупреждение об ОДЗ
  24. MsgBox("В данной области f(x) не существует! Введите значения концов сегмента в диапазоне (-1;1)")
  25. End Select
  26. 'Табулирование S
  27. For x = x0 To xn Step h
  28. a = x : S = x : k = 0
  29. Do
  30. S = S + a
  31. c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
  32. a = c * a
  33. k = k + 1
  34. Loop Until Abs(a) < Eps
  35. TextBox5.Text = TextBox5.Text +
  36. Format(x, "0.000") + " " +
  37. Format(S, "0.00000") + Chr(13) + Chr(10)
  38. Next x
  39. 'Вычисление погрешностей
  40. n = CInt(Abs(xn - x0) / h) + 1 'определение количества точек в данном интервале
  41. For x = x0 To xn Step h
  42. y = 1 / 4 * Log((1 + x) / (1 - x)) + 1 / 2 * Atan(x)
  43. S = 0 : a = x : k = 0
  44. For k = 0 To 5000
  45. S = S + a
  46. c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
  47. a = c * a
  48. If Abs(a) < Eps Then Exit For
  49. delta = Abs(S - y)
  50. For i = 1 To n
  51. delta = delta + Abs(S - y)
  52. i = i + 1
  53. Next i
  54. TextBox6.Text = Format(delta, "0.000") 'Вывод средней абсолютной погрешности
  55. TextBox7.Text = Format((Format(delta, "0.000") / S) * 100, "0.000") + "%" 'вывод средней относительной погрешности
  56. Next k
  57. Next x
  58. End Sub
  59.  
  60. End Class

Решение задачи: «Табулирование функции и бесконечного функционального ряда разложения функции на данном отрезке»

textual
Листинг программы
  1. Public Class Form7
  2.     Private Sub Form7_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         TextBox5.Font = New Font(FontFamily.GenericSansSerif, 9)
  4.         TextBox6.Font = New Font(FontFamily.GenericSansSerif, 9)
  5.     End Sub
  6.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  7.         Dim x0, xn, h, Eps As Double
  8.         If Not Double.TryParse(TextBox3.Text, h) Then Exit Sub
  9.         If Not Double.TryParse(TextBox1.Text, x0) Then Exit Sub
  10.         If Not Double.TryParse(TextBox2.Text, xn) Then Exit Sub
  11.         If Not Double.TryParse(TextBox4.Text, Eps) Then Exit Sub
  12.         TextBox5.Clear() : TextBox6.Clear()
  13.         TextBox5.AppendText("x" & "y".PadLeft(20) & vbCrLf)
  14.         TextBox6.AppendText("x" & "y".PadLeft(20) & vbCrLf)
  15.         If x0 > -1 AndAlso xn < 1 Then
  16.             For x = x0 To xn Step h
  17.                 TextBox5.AppendText(Format(x, "0.000") & Format(fnt(x), "0.00000").PadLeft(15) & vbCrLf)
  18.                 TextBox6.AppendText(Format(x, "0.000") & Format(fntSeries(x, Eps), "0.00000").PadLeft(15) & vbCrLf)
  19.             Next
  20.         Else
  21.             MsgBox("В данной области f(x) не существует! Введите значения концов сегмента в диапазоне (-1;1)")
  22.             Exit Sub
  23.         End If
  24.     End Sub
  25.     Private Function fnt(ByVal x As Double) As Double
  26.         Return 0.25 * Math.Log((1 + x) / (1 - x)) + 0.5 * Math.Atan(x)
  27.     End Function
  28.     Private Function fntSeries(ByVal x As Double, ByVal eps As Double) As Double
  29.         Dim a As Double = x, S As Double = 0, c As Double, k As Integer
  30.         Do
  31.             S += a
  32.             c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
  33.             a *= c
  34.             k += 1
  35.         Loop Until Math.Abs(a) < eps
  36.         Return S
  37.     End Function
  38. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.214 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы