проиллюстрировать специальную функцию с помощью scilab - PullRequest
0 голосов
/ 13 марта 2019

Я написал функцию для поиска Log(Fn) / n, где Fn - последовательность чисел Фибоначчи F_{n+1} = F_n + F_{n-1}:

function [g] = logf(n)
    u = 0;
    v = 1;
    f = v;
    for i = 2:n do
        f = u + v;
        u = v;
        v = f;
    end
    g = log(f) / n;
endfunction

Мне нужно построить эту функцию для 1< n < 200.

1 Ответ

0 голосов
/ 17 марта 2019

Прежде всего, пожалуйста, попробуйте выучить язык MarkDown, чтобы публиковать читаемые вопросы.Ваш первый вопрос содержал некоторую информацию, которая не отображалась из-за конфликтов с рендерингом StackOverflow MarkDown.

Во-вторых, постарайтесь, насколько это возможно, модулировать ваш код и использовать соглашение, которое я использовал, чтобы получить более читаемый код.Определите Фибоначчи, используя цикл for:

function y = fibonacci(N)
    select N
    case 0 then
        y = 0;
    case 1 then
        y = 1;
    else
        y0 = 0;
        y1 = 1;
        y = 1;
        for ii = 3:N do
            y0 = y1;
            y1 = y
            y = y1 + y0;
        end
    end
endfunction

Тогда у вас есть два варианта:

A. определить вашу функцию в векторизованной форме:

function [g] = logf(n)
    for ii = n do
        g(ii) = log(fibonacci(ii)) / ii;
    end
endfunction

учтите, что Scilab не передает матрицы / списки по функциям, и вы должны делать это самостоятельно.

Теперь вы можете строить с помощью:

n = 1:200; 
plot(n, logf(n));

И результат будет следующим:

enter image description here

B. В качестве альтернативы вы можете отобразить или передать свою функцию через последовательность, используя feval.Определите свою функцию в скалярной форме:

function [g] = logf(n)
    g = log(fibonacci(n)) / n;
endfunction

, а затем нанесите на график:

n = 1:200; 
plot(n, feval(n, logf));
...