我写了一个函数来找到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
绘制这个函数。
首先,请尝试学习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));
结果是:
B.或者,您可以使用feval
在序列上映射或广播您的函数。以标量形式定义函数:
function [g] = logf(n)
g = log(fibonacci(n)) / n;
endfunction
然后用:
n = 1:200;
plot(n, feval(n, logf));