Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Решение дифф уравнения и построение графика. Добавлено: 05.06.11 20:36  

Автор вопроса:  Яблоко | ICQ: 582888880 
Rem Описание переменных
Dim x(), y(), Ei(), Run(), Ob() As Single
Private n, i As Integer
Private x0, xk, y0, h, minx, maxx, miny, maxy As Single
Rem Описание функции
Functiоn f(a, b) As Single
f = b * (1 / Tan(a))
End Functiоn
Rem Метод Эйлера
Private Sub Eiler()
ReDim x(n + 1)
ReDim Ei(n + 1)
Ei(0) = y0
For i = 0 To n
x(i) = Round(x0 + (i * h), 4)
Ei(i + 1) = Round(Ei(i) + h * f(x(i), Ei(i)), 4)
Next i
End Sub
Rem Метод Рунге-кутта
Private Sub RungeKutta()
ReDim x(n + 1)
ReDim Run(n + 1)
Run(0) = y0
For i = 0 To n
x(i) = Round(x0 + i * h, 4)
k1 = h * f(x(i), Run(i))
k2 = h * f(x(i) + (h / 2), Run(i) + (k1 / 2))
k3 = h * f(x(i) + (h / 2), Run(i) + (k2 / 2))
k4 = h * f(x(i) + h, Run(i) + k3)
k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
Run(i + 1) = Round(Run(i) + k, 4)
Next i
End Sub
Rem Общее решение
Private Sub Obhee()
ReDim x(n + 1)
ReDim Ob(n + 1)
For i = 0 To n
x(i) = Round(x0 + i * h, 4)
Ob(i) = Sin(x(i))
Next i
End Sub
Private Sub Command1_Click()
Rem Ввод данных
x0 = 3.14 / 2
y0 = 1
xk = 3 * 3.14 / 4
h = 3.14 / 20
Text1.Text = x0
Text2.Text = y0
Text3.Text = xk
Text4.Text = h
Rem Расчет количества отрезков табулирования
n = Round((xk - x0) / h)
ReDim x(n), y(n)
Rem расчет количества строк в таблице
MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = n + 2
Rem Подписи заголовков страницы
MSFlexGrid1.TextMatrix(0, 0) = "x"
MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение"
MSFlexGrid1.TextMatrix(0, 2) = "Эйлер"
MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт"
[B]Rem Формирование массивов и поиск экстремумов [/B]
Eiler
RungeKutta
Obhee

[B]For i = 0 To n
minx = x0
maxx = xk
miny = y0
maxy = Run(i)
If Ei(i) < Ob(i) Then miny = Ei(i)
If Run(i) < Ob(i) Then maxy = Run(i)
If Ei(i) > Run(i) Then maxy = Ei(i) [/B]
MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
MSFlexGrid1.TextMatrix(i + 1, 1) = Str(Ob(i))
MSFlexGrid1.TextMatrix(i + 1, 2) = Str(Ei(i))
MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Run(i))
Next i
Rem очистка картинки
Picture1.Cls

Rem Расчет коэффициентов масштабирования
kx = Round((Picture1.Height - 1200) / (xk - x0), 4)
ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
Rem Запись значений экстремумов на шаблон графика
Label16.Captiоn = Str(miny)
Label15.Captiоn = Str(maxy)
Label17.Captiоn = Str(minx)
Label18.Captiоn = Str(maxx)
Rem Расчет экранных координат, построение графика и определение цвета
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ei(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ei(i + 1) - miny) * ky
Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)
Next i
Picture1.DrawWidth = 2
For i = 0 To n - 1
z1 = Round(720 + (x(i) - x0) * kx)
z2 = Round(5400 - (Run(i) - miny) * ky)
z3 = Round(720 + (x(i + 1) - x0) * kx)
z4 = Round(5400 - (Run(i + 1) - miny) * ky)
Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)
Next i
Picture1.DrawWidth = 1
For i = 0 To n - 1
z1 = 720 + (x(i) - x0) * kx
z2 = 5400 - (Ob(i) - miny) * ky
z3 = 720 + (x(i + 1) - x0) * kx
z4 = 5400 - (Ob(i + 1) - miny) * ky
Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)
Next i
End Sub

Помогите найти ошибку в формировании массивов и в поиске экстремумов
ПОМОГИТЕ ПОЖАЛУЙСТА[B/]

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Яблоко



ICQ: 582888880 

Вопросов: 5
Ответов: 13
 Профиль | | #1 Добавлено: 05.06.11 20:39
    Rem Описание переменных
  1. Dim x(), y(), Ei(), Run(), Ob() As Single
  2. Private n, i As Integer
  3. Private x0, xk, y0, h, minx, maxx, miny, maxy As Single
  4. Rem Описание функции
  5. Functiоn f(a, b) As Single
  6. f = b * (1 / Tan(a))
  7. End Functiоn
  8. Rem Метод Эйлера
  9. Private Sub Eiler()
  10. ReDim x(n + 1)
  11. ReDim Ei(n + 1)
  12. Ei(0) = y0
  13. For i = 0 To n
  14. x(i) = Round(x0 + (i * h), 4)
  15. Ei(i + 1) = Round(Ei(i) + h * f(x(i), Ei(i)), 4)
  16. Next i
  17. End Sub
  18. Rem Метод Рунге-кутта
  19. Private Sub RungeKutta()
  20. ReDim x(n + 1)
  21. ReDim Run(n + 1)
  22. Run(0) = y0
  23. For i = 0 To n
  24. x(i) = Round(x0 + i * h, 4)
  25. k1 = h * f(x(i), Run(i))
  26. k2 = h * f(x(i) + (h / 2), Run(i) + (k1 / 2))
  27. k3 = h * f(x(i) + (h / 2), Run(i) + (k2 / 2))
  28. k4 = h * f(x(i) + h, Run(i) + k3)
  29. k = (k1 + 2 * k2 + 2 * k3 + k4) / 6
  30. Run(i + 1) = Round(Run(i) + k, 4)
  31. Next i
  32. End Sub
  33. Rem Общее решение
  34. Private Sub Obhee()
  35. ReDim x(n + 1)
  36. ReDim Ob(n + 1)
  37. For i = 0 To n
  38. x(i) = Round(x0 + i * h, 4)
  39. Ob(i) = Sin(x(i))
  40. Next i
  41. End Sub
  42. Private Sub Command1_Click()
  43. Rem Ввод данных
  44. x0 = 3.14 / 2
  45. y0 = 1
  46. xk = 3 * 3.14 / 4
  47. h = 3.14 / 20
  48. Text1.Text = x0
  49. Text2.Text = y0
  50. Text3.Text = xk
  51. Text4.Text = h
  52. Rem Расчет количества отрезков табулирования
  53. n = Round((xk - x0) / h)
  54. ReDim x(n), y(n)
  55. Rem расчет количества строк в таблице
  56. MSFlexGrid1.Cols = 4
  57. MSFlexGrid1.Rows = n + 2
  58. Rem Подписи заголовков страницы
  59. MSFlexGrid1.TextMatrix(0, 0) = "x"
  60. MSFlexGrid1.TextMatrix(0, 1) = "Общее рещение"
  61. MSFlexGrid1.TextMatrix(0, 2) = "Эйлер"
  62. MSFlexGrid1.TextMatrix(0, 3) = "Рунге-Кутт"
  63. Rem Формирование массивов и поиск экстремумов
  64. Eiler
  65. RungeKutta
  66. Obhee
  67.  
  68. For i = 0 To n
  69. minx = x0
  70. maxx = xk
  71. miny = y0
  72. maxy = Run(i)
  73. If Ei(i) < Ob(i) Then miny = Ei(i)
  74. If Run(i) < Ob(i) Then maxy = Run(i)
  75. If Ei(i) > Run(i) Then maxy = Ei(i)
  76. MSFlexGrid1.TextMatrix(i + 1, 0) = Str(x(i))
  77. MSFlexGrid1.TextMatrix(i + 1, 1) = Str(Ob(i))
  78. MSFlexGrid1.TextMatrix(i + 1, 2) = Str(Ei(i))
  79. MSFlexGrid1.TextMatrix(i + 1, 3) = Str(Run(i))
  80. Next i
  81. Rem очистка картинки
  82. Picture1.Cls
  83.  
  84. Rem Расчет коэффициентов масштабирования
  85. kx = Round((Picture1.Height - 1200) / (xk - x0), 4)
  86. ky = Round((Picture1.Width - 1000) / (maxy - miny), 4)
  87. Rem Запись значений экстремумов на шаблон графика
  88. Label16.Captiоn = Str(miny)
  89. Label15.Captiоn = Str(maxy)
  90. Label17.Captiоn = Str(minx)
  91. Label18.Captiоn = Str(maxx)
  92. Rem Расчет экранных координат, построение графика и определение цвета
  93. Picture1.DrawWidth = 1
  94. For i = 0 To n - 1
  95. z1 = 720 + (x(i) - x0) * kx
  96. z2 = 5400 - (Ei(i) - miny) * ky
  97. z3 = 720 + (x(i + 1) - x0) * kx
  98. z4 = 5400 - (Ei(i + 1) - miny) * ky
  99. Picture1.Line (z1, z2)-(z3, z4), RGB(0, 0, 9999)
  100. Next i
  101. Picture1.DrawWidth = 2
  102. For i = 0 To n - 1
  103. z1 = Round(720 + (x(i) - x0) * kx)
  104. z2 = Round(5400 - (Run(i) - miny) * ky)
  105. z3 = Round(720 + (x(i + 1) - x0) * kx)
  106. z4 = Round(5400 - (Run(i + 1) - miny) * ky)
  107. Picture1.Line (z1, z2)-(z3, z4), RGB(0, 9999, 0)
  108. Next i
  109. Picture1.DrawWidth = 1
  110. For i = 0 To n - 1
  111. z1 = 720 + (x(i) - x0) * kx
  112. z2 = 5400 - (Ob(i) - miny) * ky
  113. z3 = 720 + (x(i + 1) - x0) * kx
  114. z4 = 5400 - (Ob(i + 1) - miny) * ky
  115. Picture1.Line (z1, z2)-(z3, z4), RGB(9999, 0, 0)
  116. Next i
  117. End Sub

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам