2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 18:45 
Аватара пользователя
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 
Когда она работает внутри кода, где n указана как символьная переменная, то проблем не возникает.
Результат тот же.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:09 
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 
Вангую, что имелось в виду mod(length(v), 2)

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:51 
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 
Еще проще сделать
Код:
if any(diff(v)==0)
   m = 0;
else
   m = (-1)^length(v);
end
.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 19:58 
Аватара пользователя
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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group