Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=7)
-   -   Корень 3-й степени из отрицательного числа??? (http://www.flasher.ru/forum/showthread.php?t=42085)

uri-uri 18.01.2003 23:42

Корень 3-й степени из отрицательного числа???
 
В "Справочнике по математике", И.Н.Бронштейн и К.А. Семендяев, стр.139, 8-я строка сверху:
корень 3-й степени из -4 = -1.5874

Обычный виндузовский калькулятор на ввод -4 x^y ( 1 / 3 ) выдаёт -1.587401051968....

НО!!!!!

В Matlab 6 ввод (-8)^(1/3) выдаёт комплексное число: ans = 1.0000 + 1.7321i :mad:

Во Флеш следующий скрипт
-----------------------
a = Math.pow(-8 , 1/3);
trace (a);
-----------------------
в трейсе выдаёт NaN :mad:
===========
Я точно знаю, что -2 х -2 х -2 = -8.
Соответственно корень 3-й степени из -8 должен = -2.
(Речь собсно о минусе в подкоренном числе)

Вопрос: Какой проблем у Matlab 6 и Flash MX ? Или у меня ?

DeliMIter 18.01.2003 23:46

Определись на каком множестве ты оперируешь. Если комплексные числа, то там три корня равномерно размазанные по окружности радиуса два, если действительные, то один отрицательный, а флэш прав на каком-ньть другом множестве...

uri-uri 19.01.2003 00:07

Что значит, на каком множестве? Помоему я ясно описал конкретные числа.
Обьясни

Qhil 19.01.2003 00:17

Помнится в стандартном школьном определении было мол, что общая степенная функция y=a^x имеет смысл только при a>0.

По ходу Flash пользуется им. :)

Кстати проверил в MathCad'e, там верно все.

DeliMIter 19.01.2003 00:18

Множество R - действительные числа. 0, 1, -1, пи, -пи, -корень из 3.... Стандартная числовая прямая от минус бесконечности до плюс бесконечности. Операции заданные на этом ножестве подразумевают аргумент из R и принимают значения в R.

Множество C - комплексные числа, предстваленные парами действительных чисел, первое из которых называю действительной частью а второе мнимою. Аналогия - плоскость (пары действительныз x, y).

Очевидно флэш не знаком с новыми математическими теориями и поэтому не способен взять корень третьей степени из -8...

DMN 19.01.2003 00:30

Существует 3 корня 3 степени из -8. Калькулятор честно называет один из них, -2. И вообще говоря, пока мы не говорим про мнимые числа, а ограничиваемся вещественными, это будет единственным корнем. Однако, так как степень третья, то и корней олжно быть три. Поэтому МатЛаб честно признается в том, что ему известен еще один корень, единица плюс корень из трех на мнимую единицу, то есть 1+1.732i.

А вот Флэш, видимо, единственный, кто знает о существовании третьего корня, единица минус корень из трех на мнимую единицу (1-1.732i) - но какие-то внутренние религиозные убеждения не позваоляют ему поверить в существование мнимых чисел, отчего он и заявляет, что это вовсе и не число (Not a Number)...

DeliMIter 19.01.2003 00:45

А это и не число :)))))

[subway]design 20.01.2003 21:21

Дело в том, что в математике (еще до флеша, интернета и компов) договорились на следующем (хотя в некоторых учебниках могут и по-другому объяснить):

1. Существует функция Корня N-ой степени, которая:
1.1. Определена на [0;+infinity) для четного N
1.2. Определена на (-infinity;+infinity) для нечетного N

2. Существует показательная функция X^A, которая:
2.1. Определена на (0;1)+(1;+infinity). Т.е. на множестве положительных числах без единицы (споры до сих пор по поводу единицы - если логарфим считать обратной к показательной функцией, то БЕЗ единицы - тогда возможно беспроблемное преобразование туда-обратно, если логарифм - самостоятельная ф-ция, то можно договориться и на включении единицы)

Судя по всему, во Флэш Math.pow - показательная функция и не понимает отрицательных значений.
Функция Корня во Флеше одна - Math.sqrt() - квадратного корня.

зы: корень и степенная функция - разные функции. Те, кто не верит, поверьте :)

Pietrovich 20.01.2003 23:36

не парься и считай через экспоненту
Код:

xPow = function (x,y)
{
        var yy=y;
        if (Math.abs(y)<1) yy=1/yy
        sign = Math.pow(x/Math.abs(x),odd(y))
        if (odd(yy)==2 && sign<0) return void(2);
        return sign*Math.exp(y*Math.log(Math.abs(x)));
}
odd = function (x)
{
        if (x/Math.floor(x/2)==2) return 2;
        return 1;
}
t = getTimer();
trace(xPow(16,11)+" "+(getTimer()-t));


uri-uri 21.01.2003 01:20

2 DeliMIter
> Очевидно флэш не знаком с новыми математическими теориями и поэтому не способен взять корень третьей степени из -8... <
Эти "новые математические теории" 16 века. Сейчас 21. Тормозитттт Флэш. :)))

2 DMN
> Поэтому МатЛаб честно признается в том, что ему известен <!>еще<!> один корень, единица плюс корень из трех на мнимую единицу, то есть 1+1.732i. <

Было бы честно, если бы при наличии 3-х корней он показал бы все 3 корня. А то он на свой вкус показывает только один - этот, даже не заикаясь об остальных. Это честно?

2 [subway]design
спасибо за очень интересный материал.

2 Pietrovich
спасибо, но код не для таких дилетантов, как я.
----------------
if x < 0
k = -1
else
k = 1
end
y = k*(k*x)^(1/3)
----------------
кусок кода в формате Matlab, придуманный мной для избавления от этого геммороя


В Visual Basic 6 следующий код:
-----------------------
Private Sub Form_Load()
a = (-8) ^ (1 / 3)
Text1.Text = a
End Sub
-----------------------
выдаёт Run-time error '5': Invalid procedure call or argument

Если прав [subway]design, спинным мозгом чую, что прав: "корень и степенная функция - разные функции", а корень n-ной степени в имеющихся под рукой программах нереализован как функция, значит его что-то заменяет.
Экспонента, как говорит Pietrovich, или может, что попроще? Интересны ваши мнения на сей счёт. Спасибо.


Часовой пояс GMT +4, время: 22:26.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.