用scilab说明一个特殊的功能

问题描述 投票:0回答:1

我写了一个函数来找到Log(Fn) / n,其中Fn是Fibonacci数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绘制这个函数。

plot scilab
1个回答
0
投票

首先,请尝试学习MarkDown语言以发布可读问题。由于与StackOverflow MarkDown渲染的冲突,您的第一个问题有一些未显示的信息。

其次尝试尽可能模块化你的代码,并使用我曾经使用过的代码具有更易读的代码。使用for循环定义Fibonacci:

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));
© www.soinside.com 2019 - 2024. All rights reserved.