Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Функции бесселя Добавлено: 06.06.10 22:58  

Автор вопроса:  kurganov4
Ребят! Помогите!!!
Как в VB2008 задать функцию Бесселя?
То есть например есть число x, надо найти J1(x).
Прошу подскажите кто нибудь как это сделать.

Ответить

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

Номер ответа: 1
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #1
Добавлено: 07.06.10 00:11
http://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%91%D0%B5%D1%81%D1%81%D0%B5%D0%BB%D1%8F
тут математика идет

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 07.06.10 00:12
хотя...
http://alglib.sources.ru/specialfunctions/bessel.php
тут даже исходники есть.

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 07.06.10 10:33
Здесь качество кода явно повыше: http://www.boost.org/doc/libs/1_43_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/bessel/bessel.html

Ответить

Номер ответа: 4
Автор ответа:
 kurganov4



Вопросов: 1
Ответов: 1
 Профиль | | #4 Добавлено: 07.06.10 23:24
Всем спасибо за помощь!
Решение нашел отсюда - http://alglib.sources.ru/specialfunctions/bessel.php
Довольно высокая точность.
Кому интересно в VB2008 я использовал такой код:
  1.  
  2. Public Function BesselJ1(ByVal X As Double) As Double
  3.         Dim Result As Double
  4.         Dim s As Double
  5.         Dim XSq As Double
  6.         Dim nn As Double
  7.         Dim PZero As Double
  8.         Dim QZero As Double
  9.         Dim P1 As Double
  10.         Dim Q1 As Double
  11.  
  12.         s = Math.Sign(X)
  13.         If X < 0.0# Then
  14.             X = -X
  15.         End If
  16.         If X > 8.0# Then
  17.             Call BesselAsympt1(X, PZero, QZero)
  18.             nn = X - 3.0# * Math.PI / 4.0#
  19.             Result = Math.Sqrt(2.0# / Math.PI / X) * (PZero * Math.Cos(nn) - QZero * Math.Sin(nn))
  20.             If s < 0.0# Then
  21.                 Result = -Result
  22.             End If
  23.             BesselJ1 = Result
  24.             Exit Function
  25.         End If
  26.         XSq = X ^ 2  'square
  27.         P1 = 2701.12271089232
  28.         P1 = -4695753.530643 + XSq * P1
  29.         P1 = 3413234182.3017 + XSq * P1
  30.         P1 = -1322983480332.13 + XSq * P1
  31.         P1 = 290879526383478.0# + XSq * P1
  32.         P1 = -3.58881756991011E+16 + XSq * P1
  33.         P1 = 2.316433580634E+18 + XSq * P1
  34.         P1 = -6.67210656892492E+19 + XSq * P1
  35.         P1 = 5.81199354001606E+20 + XSq * P1
  36.         Q1 = 1.0#
  37.         Q1 = 1606.93157348149 + XSq * Q1
  38.         Q1 = 1501793.59499859 + XSq * Q1
  39.         Q1 = 1013863514.35867 + XSq * Q1
  40.         Q1 = 524371026216.765 + XSq * Q1
  41.         Q1 = 208166122130761.0# + XSq * Q1
  42.         Q1 = 6.09206139891752E+16 + XSq * Q1
  43.         Q1 = 1.18577071219032E+19 + XSq * Q1
  44.         Q1 = 1.16239870800321E+21 + XSq * Q1
  45.         Result = s * X * P1 / Q1
  46.         BesselJ1 = Result
  47.     End Function
  48.     Private Sub BesselAsympt1(ByVal X As Double, _
  49.          ByRef PZero As Double, _
  50.          ByRef QZero As Double)
  51.         Dim XSq As Double
  52.         Dim P2 As Double
  53.         Dim Q2 As Double
  54.         Dim P3 As Double
  55.         Dim Q3 As Double
  56.  
  57.         XSq = 64.0# / (X * X)
  58.         P2 = -1611.61664432461
  59.         P2 = -109824.055434593 + XSq * P2
  60.         P2 = -1523529.35118114 + XSq * P2
  61.         P2 = -6603373.24836494 + XSq * P2
  62.         P2 = -9942246.50507764 + XSq * P2
  63.         P2 = -4435757.81679413 + XSq * P2
  64.         Q2 = 1.0#
  65.         Q2 = -1455.0094401905 + XSq * Q2
  66.         Q2 = -107263.859911038 + XSq * Q2
  67.         Q2 = -1511809.50663416 + XSq * Q2
  68.         Q2 = -6585339.47972309 + XSq * Q2
  69.         Q2 = -9934124.38993459 + XSq * Q2
  70.         Q2 = -4435757.81679413 + XSq * Q2
  71.         P3 = 35.265133846636
  72.         P3 = 1706.37542902077 + XSq * P3
  73.         P3 = 18494.2628732239 + XSq * P3
  74.         P3 = 66178.8365812708 + XSq * P3
  75.         P3 = 85145.1606753357 + XSq * P3
  76.         P3 = 33220.9134098572 + XSq * P3
  77.         Q3 = 1.0#
  78.         Q3 = 863.836776960499 + XSq * Q3
  79.         Q3 = 37890.2297457722 + XSq * Q3
  80.         Q3 = 400294.43582267 + XSq * Q3
  81.         Q3 = 1419460.66960372 + XSq * Q3
  82.         Q3 = 1819458.042244 + XSq * Q3
  83.         Q3 = 708712.819410287 + XSq * Q3
  84.         PZero = P2 / Q2
  85.         QZero = 8.0# * P3 / Q3 / X
  86.     End Sub

Ответить

Страница: 1 |

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



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