Страница: 1 | 2 |
Вопрос: Глюки... Ничего не понимаю в математике машин!
Добавлено: 11.10.06 03:58
Автор вопроса: Morpheus | Web-сайт:
Считал я как то интегралы на математике и выяснил к большому удивлению что мой инженерно-научный калькулятор (говорю с сарказмом) не может вычислить (-1)^(4/3) (степень была задана не так, а явно, дробью.)
Пишет - Не подходит к области определения функции (Domain Error)
Как это не подходит? ведь кубический корень из (-1)^4 должен неплохо вычисляться.
Ладно, захожу в наш любимый васик (а я кстати тоже давненько его недолюбливал за подобные глюки) и ввожу:
n = (-1) ^ (4 / 3)
выдаёт ошибку. при том что
n = ((-1) ^ 4) ^ (1 / 3)
решает правильно.
Просто я подумал что нет смысла звонить в техподдержку калькулятора и объяснять что у меня блин из-за вас интегралы не решаются раз даже ВБ не может решить...
Проосто хотелось бы знать в чём собственно причина таких вот странностей?
Ответы
Всего ответов: 23
Номер ответа: 1
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #1
Добавлено: 11.10.06 12:39
Да вообще гонево!
Кубический корень и из просто (-1) тоже вычисляется на ура - а он не может.
Мелкомягкий калькулятор вообще туфту гонит: (-1)^0.5 у него равно -1!!!
А как вообще вычисляются корни? Я-то их обычно подбором извлекаю (беру самое ближайшее извлекающееся число и накидываю разницу "на глазок".
А какой у компа алгоритм?
возможно если он видит в основании степени отрицательное число, то дробную степень даже и не пытается вычислить.
Номер ответа: 2
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 11.10.06 15:09
Да можно и через логорифмы, да зачем, если можно короче... в уме можно, но бывают же и не таки простые числа. просто на экзамене как бы нет времени даже на ((-1) ^ 4) ^ (1 / 3) - у меня калькулятор поддерживает формулу до 88 символов в таком формате (хотя пока не разу не переполнялся) так что может и не влезть Ладно, у отца возьму, его Шарп хоть и однострочный но держит до 160 символов
Номер ответа: 3
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #3
Добавлено: 11.10.06 16:49
Дробные степени от отрицательных чисел, считается, нельзя вычислить, не выходя за границы действительных чисел. Потому что то же 4/3 = 8/6, а корни четных степеней из отрицательных чисел комплексны.
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 11.10.06 17:46
Ну и что? 2/1=4/2, но это не значит, что теперь и в квадрат отрицательные нельзя возводить...
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 11.10.06 21:58
aga... eto tochno!
Звонил в техподдержку... очень приятниые люди там сидят правда сказали что ета модель не поддерживает операции x^y где x<0 and y is not integer.
да их похоже ни один калкулатор не может вичислить.
2 Sharp: так что теперь и интеграл уже простенькии не посчитать?
Номер ответа: 6
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #6
Добавлено: 11.10.06 22:01
p.s. (-1)^(4/3) = (-1)^(8/6) = sqr((-1)^8) = sqr(1) =1, where sqrt - корень 6-и цтепени.
Номер ответа: 7
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #7
Добавлено: 11.10.06 22:35
1. sqr(1)=(+-)1
2. два хода решения:
(-1)^(5/3)=(-1)^(1/3)=-1
(-1)^(5/3)=(-1)^(10/6)=1^(1/6)=sqr(1)=(+-)1
по-моему умножать числитель и знаменатель степени это неправильно.
Номер ответа: 8
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #8
Добавлено: 11.10.06 23:52
Если выход за множество действительных чисел происходит в зависимости от порядка действий или в случае эквивалентной операции хотя бы в одном случае, операция считается вообще невозможной на множестве действительных чисел.
Номер ответа: 9
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #9
Добавлено: 12.10.06 02:12
С каких пор +- ?
на сколько я знаю это в уравнениях типа x^2=a мы имеем два решения и то, потому что ставим +- перед корнем
да и вспомним хотя бы график...
Sharp, а как нам тогда посчитать интеграл функции x^1/3 (кубический корень из икс) на интервале [-2;-1]??? функция непрерывна на этом интервале и интеграл вычесляется по формуле
I = 3/4 * [ (-1)^4/3 - (-2)^4/3 ]
Номер ответа: 10
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #10
Добавлено: 12.10.06 10:15
корни чётных степеней всегда имеют два решения - это очевидно.
и по графику тоже два решения
Что за новости, таварисч? В математике порядок действий всегда жёстко определён.
Сначала выполняются действия в скобках - и собственно поэтому васик и не считает дроби - он делит 4 на 3, получает 1.333333333 (с точностью Double) а это десятичная (т.е. с чётным знаменателем) дробь - вот он и уходит в затык. Он не умеет раскрывать скобки - за него это должен делать прогер, поэтому если у вас есть дробь X/Y, то надо сначала возвести в X а потом в 1/Y.
Но!
MsgBox ((-1) ^ 4) ^ (1 / 3) - вычисляется правильно
MsgBox ((-1) ^ 5) ^ (1 / 3) - не вычисляется
Надо думать дальше...
Номер ответа: 11
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #11
Добавлено: 12.10.06 14:29
Блин, забыл что корни то разные. Вобщем тут, в Канаде, юзают другой корень из которого выходит только одно решение и график соответственно представляет собой повёрнутую на -90 градусов левую ветку параболы. чтобы решить троблему, +- ставятся перед знаком конрня.
Номер ответа: 12
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #12
Добавлено: 12.10.06 17:31
Во-первых, попробуй построить график этой функции в Maple и посмотри, что думают по поводу ее непрерывности (и определенности) математики-создатели Maple.
Во-вторых, если так хочется, скажи, что эта функция нечетна и приравняй int(f(x), x=-2..-1) к -int(f(x), x=1..2) и все получится.
Корень n-ой степени имеют n корней )
Сначала выполняются действия в скобках - и собственно поэтому васик и не считает дроби
Не путай математику и языки программирования. 1/3 = 2/6? Равно. Значит и (-1)^(1/3) должно быть равно (-1)^(2/6), что должно быть равно sqr(-1)^6, а оно не определено на R.
Многозначные функции, которой является множество решений x^2=a в случае квадратного корня, в нематематических вузах не рассматриваются.
Номер ответа: 13
Автор ответа:
vito
Разработчик Offline Client
Вопросов: 23
Ответов: 879
Web-сайт:
Профиль | | #13
Добавлено: 12.10.06 18:42
Morpheus
А я говорил используй математические пакеты для рассчетов.
MsgBox ((-1) ^ 5) ^ (1 / 3) - не вычисляется
Все просто.
(-1) ^ 4) =1 положительное число.
(-1) ^ 5) =-1 отрицательное
Поэтому понятно почему так получается. Во втором случае дробная степень из отрицательного числа - результат комплексное число.
В .NET я не знаю есть нужный класс или нет (не нашел). Но в стандартной библиотеке С++ есть специальный класс - complex
#include <complex>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
double po = 1.333;//4/3
complex <double> cb1 ( -1 , 0);
complex <double> ce1 = pow ( cb1 ,po );
cout << "Complex number returned from complex base and power:"
<< "\n ce1 = cb1 ^ po = " << ce1 << endl;
// = -0.5+0.866i
po= 1.667;//5/3
ce1 = pow ( cb1 ,po );
cout << "Complex number returned from complex base and power:"
<< "\n ce1 = cb1 ^ po = " << ce1 << endl;
// = 0.5+0.866i
return 0;
}
Насчет не путать ты прав, но здесь немного поторопился.
(-1)^(2/6) не равно sqr(-1)^6. Тогда это получится (-1)^(6/2), что равняется -1^3.
Но смысл понятен.
Номер ответа: 14
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #14
Добавлено: 12.10.06 20:17
Упс, местами перепутал
Номер ответа: 15
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #15
Добавлено: 12.10.06 20:51
Мне непонятно - степень-то нечётная.
корень кубический из (-1) комплексное число?
Ты скормил ему неверные данные и он выдал тебе неверный результат.
Результатом обоих выражений являются недействительные значения, хотя на самом деле это не так. Что является недействительным значением выражения - как пример значение y=sqr(x) при x=-1 - то значение, которого нет, т.е. которое нельзя указать на декартовых координатах. Его можно вычислить (как j), но не указать.
Итак берём палец ставим на ось абсцисс на значении (-1) и тянем до пересечения с графиком выражения (не функции!!!) - дотянули? а раз так, значит твоё решение неверно.
Про второе (y=x^(5/3)) вообще молчу - это функция, в ней по определению не может быть неопределённых значений.
Я же говорю задача правильного вычисления ложится на программера - бездумно использовать васика или те же пакеты, это как юзать каклькулятор (обычный) для вычисления (2+2*2). Иначе васик сделает из любой дроби дробь с чётным знаменателем и полезет в бутылку.
Вот написал функцию для вычисления кубического корня:
Dim y As Double
If x <> 0 Then ' с нулём глючило и я смухлевал
Dim d, need_diff, r As Double
Dim sig As Integer = 1
Dim st As Double = 10
need_diff = 0.0000000001
d = 1
y = 1
Do While Math.Abs(d) > need_diff
r = y * y * y
d = x - r
If Math.Sign(d) <> sig Then ' поворачиваем
st /= 2
If sig = -1 Then sig = 1 Else sig = -1
End If
y = y + sig * st
Loop
End If
Return Math.Round(y, 8)
End Function
И моя функция (даже в таком страшном виде) даёт правильные ответы:
MsgBox(MyPower1of3(-1) ^ 5)