2014 dxdy logo

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

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




На страницу 1, 2, 3, 4  След.
 
 Matlab: символьное вычисление членов посл-ти A006206
Сообщение26.04.2020, 23:36 
При вычислении в Матлабе членов последовательности A006206 по любой из формул, которые указаны в OEIS, получаю неверный результат при n>83.
Код следующий:
Используется синтаксис Matlab M
function [a] = calcType1Long (n)
    % Вычисление членов последовательноси A006206
    % ВНИМАНИЕ!!! если n>83, то функция дает неверное значение
    s=0;
    for i=1:n
        if mod(n,i)==0
            s=s+moebius(n/i)*(fibonacci(i+1)+fibonacci(i-1));
        end
    end
    a=s/n;
end

Функцию Мебиуса реализовал так:
Используется синтаксис Matlab M
function mu = moebius(n)
    if n == 1
        mu = 1;
    else
        a=factor(n);
        b=length(a);
        mu = (prod([0 a]-[a 0])~=0)*((2*(floor(b/2)==b/2))-1);
    end
end
 

Есть ли возможность с помощью Symbol toolbox получить точные значения для членов последовательности А006206 при больших аргументах?
Если да - как именно?

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение26.04.2020, 23:48 
maximkarimov в сообщении #1458107 писал(а):
A006206

A006206

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение26.04.2020, 23:50 
Аватара пользователя
А где тут символьные вычисления?

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение26.04.2020, 23:51 
maximkarimov в сообщении #1458107 писал(а):
mu = (prod([0 a]-[a 0])~=0)*((2*(floor(b/2)==b/2))-1);

Что это значит?

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение26.04.2020, 23:56 
Аватара пользователя
И Вы как-то странно, на мой взгляд, квадраты ищите....

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:12 
kotenok gav в сообщении #1458109 писал(а):
maximkarimov в сообщении #1458107 писал(а):
A006206

A006206


https://oeis.org/search?q=A006206&sort= ... &go=Search

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:15 
maximkarimov в сообщении #1458148 писал(а):

Тег oeis.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:34 
Geen в сообщении #1458112 писал(а):
И Вы как-то странно, на мой взгляд, квадраты ищите....


Код взял здесь: https://www.mathworks.com/matlabcentral ... u-function
Он дает верные значения (в том числе для больших аргументов).
Точные значения для больших чисел Фибоначчи c помощью Symbol toolbox можно получить так:
Используется синтаксис Matlab M
n=sym(300);
a=fibonacci(n);
 


Проблема в том, что все вместе не получается - ошибка выскакивает на самой последней строчке:
Используется синтаксис Matlab M
a= s/n;
 

Крутил и так и эдак - не получается. Потому и прошу помощи.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:36 
maximkarimov в сообщении #1458153 писал(а):
a= s/n;

Мб это целочисленное деление?

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:38 
kotenok gav в сообщении #1458154 писал(а):
maximkarimov в сообщении #1458153 писал(а):
a= s/n;

Мб это целочисленное деление?

Да, результат всегда целочисленный.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:44 
maximkarimov в сообщении #1458156 писал(а):
Да, результат всегда целочисленный.

Я не про это. Попробуйте ввести 3/5.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:50 
kotenok gav в сообщении #1458157 писал(а):
maximkarimov в сообщении #1458156 писал(а):
Да, результат всегда целочисленный.

Я не про это. Попробуйте ввести 3/5.


Куда? Аргумент n целочисленный. Результат деления целочисленный, потому что суммирование производится по индексам, которые делят аргумент нацело.
Попробовал вот так:
код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
function [C] = calcType1Long (n)
   % Вычисление членов последовательноси A006206
   % ВНИМАНИЕ!!! если n>83, то функция дает неверное значение
    s=0;
    for i=1:n
        if mod(n,i)==0
            s=s+moebius(n/i)*(fibonacci(i+1)+fibonacci(i-1));
        end
    end
    A = int64(s);
    B = int64(n);
    C = idivide(A,B);
    %a=s/n;
end
 


Чуть лучше, но при n=89 результат все равно не верен.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:52 
maximkarimov в сообщении #1458159 писал(а):
Куда?

В "командную строку" матлаба.

-- 27 апр 2020, 18:22 --

maximkarimov в сообщении #1458159 писал(а):
Чуть лучше - при n=89 теперь получаю 2, раньше было 3.

Посмотрите, чему равно s.

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 10:58 
kotenok gav в сообщении #1458161 писал(а):
maximkarimov в сообщении #1458159 писал(а):
Куда?

В "командную строку" матлаба.

-- 27 апр 2020, 18:22 --

maximkarimov в сообщении #1458159 писал(а):
Чуть лучше - при n=89 теперь получаю 2, раньше было 3.

Посмотрите, чему равно s.


Используется синтаксис Matlab M
>> 3/5

ans =

   0.600000000000000
 



s=3.980154972736918e+18

 
 
 
 Re: Matlab: символьное вычисление членов посл-ти A006206
Сообщение27.04.2020, 11:01 
maximkarimov в сообщении #1458162 писал(а):
s=3.980154972736918e+18

Это при $n=89$?

 
 
 [ Сообщений: 52 ]  На страницу 1, 2, 3, 4  След.


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