Мне необходимо запрограммировать действительный корень n уравнения
n*2*fo*(0.82+0.1*sqrt(n*2*fo)/lambda)=m
Это кубическое уравнение если сделать замену n^(1/2) =z
Решаю его в Maple:
solve(n*2*fo*(0.82+0.1*sqrt(n*2*fo)/lambda)=m,n);
Получаю корень без мнимой единицы:
n=(1/30*(33750*sqrt(2)*m*lambda-137842*sqrt(2)*lambda^3+150*sqrt(101250*m^2*lambda^2-827052*m*lambda^4))^(1/3)+1681/15*lambda^2/((33750*sqrt(2)*m*lambda-137842*sqrt(2)*lambda^3+150*sqrt(101250*m^2*lambda^2-827052*m*lambda^4))^(1/3))-41/30*sqrt(2)*lambda)^2/fo
Меняю sqrt на Sqr и вставляю в VB.
При m=0.5; lambda = 0.5 fo =0.1 получается корень n=2.593266377.
Но по формуле с радикалами напрямую это значение получить нельзя - - подкоренное выражение - отрицательное. Однако, если извлечь эти корни и проводить действия с комплексными числами, то мнимые единицы взаимоуничтожаются и получается вещественный результат.
Maple это проделывает, а VB - нет.
Теперь мой вопрос:
есть ли возможность проводить математикой VB действия с комплексными числами (например функция определяющая вещественную часть a числа a+I*b?).Или же выход один - надо подставлять в коды такие формулы, чтобы отрицательных чисел под корнями не было (например - аппроксимировать решение приближенной формулой, или организовать численный итерационный поиск процедурой в VB) ?
Заранее благодарю за совет.