Табулирование функции и бесконечного функционального ряда разложения функции на данном отрезке - Visual Basic .NET
Формулировка задачи:
Всем доброго времени суток,
Написал код для табулирования функции и функционального ряда и оценки средних погрешностей - все работает, однако, значения в результате абсолютно разные. В этой связи и правильность оценки погрешностей под вопросом. Не могу понять, где ошибка или опечатка (опыт среде программирования VB.net - несколько недель):
Листинг программы
- Imports System.Math
- Public Class Form5
- Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- TextBox4.Text = " x f(x) " + Chr(13) + Chr(10)
- TextBox5.Text = " x S " + Chr(13) + Chr(10)
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim x0, xn, h, Eps, delta, S, y, a, c As Double
- Dim k, n, i As Long
- h = Val(TextBox8.Text)
- x0 = Val(TextBox1.Text)
- xn = Val(TextBox2.Text)
- Eps = Val(TextBox3.Text)
- 'Табулирование f(x)
- Select Case True
- Case x0 > -1 And xn < 1
- For x = x0 To xn Step h
- y = 1 / 4 * Log((1 + x) / (1 - x)) + 1 / 2 * Atan(x)
- TextBox4.Text = TextBox4.Text +
- Format(x, "0.000") + " " +
- Format(y, "0.00000") + Chr(13) + Chr(10)
- Next x
- Case x0 <= -1 Or x0 >= 1 And xn <= -1 Or xn >= 1 'Предупреждение об ОДЗ
- MsgBox("В данной области f(x) не существует! Введите значения концов сегмента в диапазоне (-1;1)")
- End Select
- 'Табулирование S
- For x = x0 To xn Step h
- a = x : S = x : k = 0
- Do
- S = S + a
- c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
- a = c * a
- k = k + 1
- Loop Until Abs(a) < Eps
- TextBox5.Text = TextBox5.Text +
- Format(x, "0.000") + " " +
- Format(S, "0.00000") + Chr(13) + Chr(10)
- Next x
- 'Вычисление погрешностей
- n = CInt(Abs(xn - x0) / h) + 1 'определение количества точек в данном интервале
- For x = x0 To xn Step h
- y = 1 / 4 * Log((1 + x) / (1 - x)) + 1 / 2 * Atan(x)
- S = 0 : a = x : k = 0
- For k = 0 To 5000
- S = S + a
- c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
- a = c * a
- If Abs(a) < Eps Then Exit For
- delta = Abs(S - y)
- For i = 1 To n
- delta = delta + Abs(S - y)
- i = i + 1
- Next i
- TextBox6.Text = Format(delta, "0.000") 'Вывод средней абсолютной погрешности
- TextBox7.Text = Format((Format(delta, "0.000") / S) * 100, "0.000") + "%" 'вывод средней относительной погрешности
- Next k
- Next x
- End Sub
- End Class
Решение задачи: «Табулирование функции и бесконечного функционального ряда разложения функции на данном отрезке»
textual
Листинг программы
- Public Class Form7
- Private Sub Form7_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- TextBox5.Font = New Font(FontFamily.GenericSansSerif, 9)
- TextBox6.Font = New Font(FontFamily.GenericSansSerif, 9)
- End Sub
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Dim x0, xn, h, Eps As Double
- If Not Double.TryParse(TextBox3.Text, h) Then Exit Sub
- If Not Double.TryParse(TextBox1.Text, x0) Then Exit Sub
- If Not Double.TryParse(TextBox2.Text, xn) Then Exit Sub
- If Not Double.TryParse(TextBox4.Text, Eps) Then Exit Sub
- TextBox5.Clear() : TextBox6.Clear()
- TextBox5.AppendText("x" & "y".PadLeft(20) & vbCrLf)
- TextBox6.AppendText("x" & "y".PadLeft(20) & vbCrLf)
- If x0 > -1 AndAlso xn < 1 Then
- For x = x0 To xn Step h
- TextBox5.AppendText(Format(x, "0.000") & Format(fnt(x), "0.00000").PadLeft(15) & vbCrLf)
- TextBox6.AppendText(Format(x, "0.000") & Format(fntSeries(x, Eps), "0.00000").PadLeft(15) & vbCrLf)
- Next
- Else
- MsgBox("В данной области f(x) не существует! Введите значения концов сегмента в диапазоне (-1;1)")
- Exit Sub
- End If
- End Sub
- Private Function fnt(ByVal x As Double) As Double
- Return 0.25 * Math.Log((1 + x) / (1 - x)) + 0.5 * Math.Atan(x)
- End Function
- Private Function fntSeries(ByVal x As Double, ByVal eps As Double) As Double
- Dim a As Double = x, S As Double = 0, c As Double, k As Integer
- Do
- S += a
- c = x ^ 4 * ((4 * k + 1) / (4 * k + 5))
- a *= c
- k += 1
- Loop Until Math.Abs(a) < eps
- Return S
- End Function
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д