使用 scilab 说明一个特殊函数
illustrate a special function using scilab
我写了一个函数来查找 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
绘制此函数。
首先,请尝试学习 MarkDown 语言以 post 可读的问题。您的第一个问题有一些信息由于与 Whosebug 的 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));
结果是:
B. 或者,您可以使用 feval
在序列上映射或广播您的函数。以标量形式定义函数:
function [g] = logf(n)
g = log(fibonacci(n)) / n;
endfunction
然后绘制:
n = 1:200;
plot(n, feval(n, logf));
我写了一个函数来查找 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
绘制此函数。
首先,请尝试学习 MarkDown 语言以 post 可读的问题。您的第一个问题有一些信息由于与 Whosebug 的 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));
结果是:
B. 或者,您可以使用 feval
在序列上映射或广播您的函数。以标量形式定义函数:
function [g] = logf(n)
g = log(fibonacci(n)) / n;
endfunction
然后绘制:
n = 1:200;
plot(n, feval(n, logf));