2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 18:45 
Заслуженный участник
Аватара пользователя


01/09/13
3161
maximkarimov в сообщении #1458287 писал(а):
Вот

:facepalm:
Используется синтаксис Matlab M
v = factor(n);
if any(diff(v)==0)
   m = 0;
elseif mod(length(v))
   m = 1;
else
   m = -1;
end
 

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 18:55 


26/09/17
294
Когда она работает внутри кода, где n указана как символьная переменная, то проблем не возникает.
Результат тот же.

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:09 
Заслуженный участник


12/07/07
4135
Донецк, Украина
Geen в сообщении #1458303 писал(а):
maximkarimov в сообщении #1458287 писал(а):
Вот

:facepalm:
Используется синтаксис Matlab M
v = factor(n);
if any(diff(v)==0)
   m = 0;
elseif mod(length(v))
   m = 1;
else
   m = -1;
end
 
В R2013 не работает, что-то не так. :)
Используется синтаксис Matlab M
function m = moebius3(n)
v = factor(n);
if any(diff(v)==0)
   m = 0;
elseif mod(length(v))
   m = 1;
else
   m = -1;
end
end
Используется синтаксис Matlab M
>> moebius3(1)
Error using mod
Not enough input arguments.

Error in moebius3 (line 5)
elseif mod(length(v))

>> moebius3(sym('1'))
Error using mod
Not enough input arguments.

Error in moebius3 (line 5)
elseif mod(length(v))

В общем, в R2013b и вариант moebius из начального сообщения работает, без специальной привязки к символьным вычислениям. Более поздних версий у меня нет. Что там не работает я не понимаю.

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:30 


21/05/16
4157
Аделаида
Вангую, что имелось в виду mod(length(v), 2)

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:51 
Заслуженный участник


12/07/07
4135
Донецк, Украина
kotenok gav, пусть лучше Geen, если сочтёт нужным, напишет, о чём он хотел сказать.
Используется синтаксис Matlab M
function m = moebius3(n)
v = factor(n);
if any(diff(v)==0)
   m = 0;
elseif mod(length(v), 2)
   m = 1;
else
   m = -1;
end
end
Используется синтаксис Matlab M
>> for i=1:10, C(i) = moebius3(i); end
>> C(1:10)
ans =   1     1     1     0     1    -1     1     0     0    -1
Неправильно.

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:53 


21/05/16
4157
Аделаида
Еще проще сделать
Код:
if any(diff(v)==0)
   m = 0;
else
   m = (-1)^length(v);
end
.

 Профиль  
                  
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:58 
Заслуженный участник
Аватара пользователя


01/09/13
3161
kotenok gav в сообщении #1458322 писал(а):
Вангую, что имелось в виду mod(length(v), 2)

Да, спасибо, причём ==0.

-- 27.04.2020, 19:59 --

kotenok gav в сообщении #1458335 писал(а):
Еще проще сделать

Только в обоих случаях надо отдельно обработать 1, поскольку factor возвращает в этом случае не пустой массив, а 1.

-- 27.04.2020, 20:00 --

Ну и саму основную функцию стоит упростить, используя unique(factor(n)).
Причём, лучше мёбиуса интегрировать в неё...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group