Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Библиотека Математических функций для VB Добавлено: 06.04.11 21:15  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Собрал несколько полезных функций и откомпилировал в библиотеку.
http://xawp.narod.ru/simth.zip
Пример на VB6 с описанием и декларациями
Исходники на FB

Содержит следующие функции:

FastFourierTransform/FFT - Быстрое преобразование Фурье
Bezie - Вычисляет точки на кривой безье
RShift/LShift - Битовые сдвиги
fvXOR/fvXOR2 - Проход XOR по двум массивам
HSize/lHSize - Вычисление расстояния
XSize/lXSize - dX^2 + dY^2
FastHSize/lFastHSize - Псевдорасстояние (|X| + |Y|) * 0.71
Angle - Вычисляет угол между отрежком и горизонталью
sqrDT - 2D Линейная интерполяция
GradLeaner/GradLeanerOne - 1D Линейная интерполяция
GetRND/GetFastRND - Эмитирует выпадение вероятности
waveTRIANGLE - Треугольная форма волны.
waveSAW - SAWTOOTH "Зубья Пилы" Функция
waveSQUARE - SQUARE
waveSINE - Синусоида
wavePULSE - PULSE

Возможно функционал пополниться, только идею дайте!))

Ответить

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

Номер ответа: 1
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #1 Добавлено: 08.04.11 12:04
У мну где-то целая куча этого добра была. Около 200 функций по математике и физике. Лень на FB переводить.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 08.04.11 19:26
Кинь - переведу =)

Ответить

Номер ответа: 3
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #3 Добавлено: 08.04.11 21:26
Сам вечерком займусь. Исходник сюда скину.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 08.04.11 21:55
Кстати, проверил компилятор на скорость.
Написал функцию Fast Square Root - выполняется медленнее чем ВБ'шная SQR o_O

Ответить

Номер ответа: 5
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #5 Добавлено: 08.04.11 23:14
Код в студию. Хотя я бы использовал формулу Герона или Ньютона потому как они ближе моим математическим корням, но по скорости они сильно уступают всем встроенным алгоритмам.

Ответить

Номер ответа: 6
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #6 Добавлено: 08.04.11 23:15
Брр. Не успеваю сегодня добраться до математики. Отложим исходники на завтра.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #7
Добавлено: 09.04.11 00:08
Код отсюда взял.
http://www.freebasic.net/forum/viewtopic.php?t=14783
Асм вставка их вообще даёт вылет из приложения...

Мнебы каких -нибудь Мат полезностей типа FFT, интерполяций разных и т.д...

Ответить

Номер ответа: 8
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #8 Добавлено: 09.04.11 09:27
Эта вставка?
  1.  
  2. #Define BIAS -&h4c000
  3.  
  4. function fsqrt naked( value as single ) as single
  5.     asm
  6.         mov eax, [esp+4]
  7.         shr eax, 1
  8.         add eax, (1 << 29) - (1 << 22)
  9.         add eax, BIAS
  10.         mov [esp+4], eax
  11.         fld DWORD PTR [esp+4]
  12.         ret 4
  13.     end asm
  14. end function
  15.  
  16. dim as single s0, s2
  17. for i as integer = 1 to 6
  18.   s0 = rnd * 1000
  19.   s2 = fsqrt(s0)
  20.   print s0 & chr(9) & s2
  21. next
  22.  
  23. sleep


Она норм работает (-lang fb главное не забыть), но вот точность заметно хромает. Целую часть еще можно найти, а вот дробная уже труба.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 09.04.11 20:10
А мне-то нужна Дллка под Винды...

А в этом варианте...
  1. Function fastsqrt(value As Double) As Single
  2. Dim u As _fsqrt
  3.  
  4.    u.value = value  
  5.    ' Remove last bit so 1.0 gives 1.0
  6.    ' tmp is now an approximation to logbase2(val)
  7.    ' divide by 2
  8.    ' add 64 to exponent: (e+127)/2 =(e/2)+63,  
  9.    u.tmp = (1 Shl 29) + (u.tmp shr 1) - (1 Shl 22) + BIAS
  10.    Return u.value
  11.  
  12. End Function
она сильно уступает по скорости.

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #10
Добавлено: 09.04.11 20:16
Да и так как ты написал у меня компилироваться не хочет - выдает
  1. error 10: Expected '='
  2.     ASM

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #11
Добавлено: 09.04.11 20:21
вот так откомпилировалось
  1. -s gui

Ответить

Номер ответа: 12
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #12 Добавлено: 10.04.11 19:15
Вот то на что хватило мозга, особо не вникая перевести.
http://exfile.ru/168616

Declare Function Fib (n as integer) as long 'Вычисление числа Фибоначи
Declare Function NOD (n1 as integer, n2 as integer) as integer 'НОД
Declare Function ExpandNumb (n as integer) as string 'Разложить число на простые множители
Declare Function Dig (n1 as integer, n2 as integer, count as integer) as string 'Деление с заданной точностью
Declare Function Fact (n as integer) as long 'Вычисление факториала (количество перестановок)
Declare Function Accom (n as integer, m as integer) as integer 'Число размещений из n элементов по m
Declare Function Comb (n as integer, m as integer) as integer 'Число сочетаний  из n элементов по m                      
Declare Function LaguerreCalc(n As Long, x As Double) As Double 'Расчет значения полинома Ляггера
Declare Function LaguerreSum(C() As Double, n As Long, x As Double) As Double 'Суммирование Ляггера по формуле Кленшоу

Есть еще куча всего типа: Преобразования координат везде где можно, решение систем линейных уравнений методом гаусса, вращения, интерполяции в том числе и по Лагранжу, функции для работы с локальными сплайнами, решение нелинейных уравнений и их систем, вычисление производной и всего что с ней связано, вычисление коэфициентов чувствительности, интегральное исчисление, решения дифференциальных уравнений и еще много чего.
Дело в том что это мои студенческие-школьные зарисовки (распечатки) на qb, и вот так на коленке довольно сложно вспомнить о чем речь (учитывая что GOTO в то время я очень любил).

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #13
Добавлено: 10.04.11 22:26
Шикаро, не против если использую?

Ответить

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



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #14
Добавлено: 10.04.11 22:42
http://alglib.sources.ru

Ответить

Номер ответа: 15
Автор ответа:
 СанСаныч



Вопросов: 3
Ответов: 118
 Профиль | | #15 Добавлено: 11.04.11 00:48
Да ради бога. Только
СанСаныч пишет:
сть еще куча всего типа: Преобразования координат везде где можно, решение систем линейных уравнений методом гаусса, вращения, интерполяции в том числе и по Лагранжу, функции для работы с локальными сплайнами, решение нелинейных уравнений и их систем, вычисление производной и всего что с ней связано, вычисление коэфициентов чувствительности, интегральное исчисление, решения дифференциальных уравнений и еще много чего.

Это все на бумажных носителях. Напряжно переводить нечто такое:
  1.  
  2. 10 rem runge-kutt
  3. 11 input "h=" h: input "x0=" x
  4. 12 input "y0=" z : y=z
  5. 13 gosub 18: a=f*h : x=x+h/2 : y=z+a/2
  6. 14 gosub 18: b=f*h : y=z+b/2
  7. 15 gosub 18: c=f*h : x=x+h/2 : y=z+c
  8. 16 gosub 18: y=z+(a+2*(b+c)+h*f)/6 : z=y
  9. 17 print "x=" x : print "y=" y : goto 13
  10. 18 f=-y : return : end


в нормальный код. Здесь еще не сложно, а вот допустим реализация интерполяции таблиц с произвольным числом узлов меня просто в тупик ставит.

Ответить

Страница: 1 | 2 |

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



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