как я могу получить точные значения sin и cos в matlab для таких углов, как pi/4?

если я пишу в матлабе

cos(pi/4)

Я получаю эту форму:

0.7071

когда я бы предпочел получить фактическое значение (2) ^ (1/2)/2, чтобы писать формулы более четко. есть ли способ сделать то, что я прошу?


person user1834153    schedule 03.01.2014    source источник
comment
Без символического набора инструментов Matlab число с плавающей запятой, аппроксимированное 0.7071, будет таким же хорошим, как и вы — конечно, за кулисами Matlab использует полное представление числа с двойной точностью и по умолчанию отображает только первые 4 значащие цифры. Вы не перепутали формат отображения и внутреннее значение?   -  person High Performance Mark    schedule 03.01.2014
comment
возможно, ОП захочет попробовать > format long   -  person vish    schedule 03.01.2014
comment
нет, но поскольку у меня есть символический набор инструментов, мне интересно, почему я получаю эту форму вместо более четкой   -  person user1834153    schedule 03.01.2014
comment
@user3149593: user3149593: Потому что вычисление символьных математических выражений в целом значительно более затратно в вычислительном отношении, и поэтому вы должны явно использовать его.   -  person horchler    schedule 03.01.2014
comment
Я не понимаю, почему вы находите cos(pi/4) неясным. Результат в Matlab — это числовая аппроксимация, конечно, ведь вы используете язык программирования, специализированный для числовых вычислений. Но код, в котором вы пишете это выражение, ясен как день, он говорит именно то, что означает.   -  person A. Donda    schedule 03.01.2014
comment
@A.Donda Я бы оставил cos (pi / 4), если бы мог, это число, которое мне не нужно   -  person user1834153    schedule 04.01.2014


Ответы (1)


Вы можете использовать инструментарий Symbolic Math, который поставляется со многими установками Matlab:

theta = sym(pi)/4;
cos(theta)

который возвращает

ans =

2^(1/2)/2
person horchler    schedule 03.01.2014
comment
это действительно странный способ решить эту проблему, но он отлично работает, большое спасибо - person user1834153; 03.01.2014
comment
@user3149593 user3149593 вы должны знать, что результат больше не является целым, двойным или .... это тип sym. - person NKN; 03.01.2014
comment
@NKN делает eval(), я могу вернуть его в два раза, если нужно, верно? - person user1834153; 03.01.2014
comment
@ user3149593: Совсем не странно. Matlab, как и большинство языков программирования, использует представление с плавающей запятой. Это и многие другие значения не имеют точной формы с плавающей запятой. Чтобы преобразовать числовой вывод символьного вычисления обратно в числа с плавающей запятой двойной точности, используйте функцию double. - person horchler; 03.01.2014