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

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




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

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

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

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