使用 scilab 说明一个特殊的函数 [英] illustrate a special function using scilab

查看:72
本文介绍了使用 scilab 说明一个特殊的函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一个函数来查找Log(Fn)/n,其中Fn 是斐波那契数列F_{n+1} = F_n+ F_{n-1}:

I have written a function to find Log(Fn) / n, where Fn is the sequence of Fibonacci numbers 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< 绘制这个函数.≤200.

推荐答案

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

First all please try to learn MarkDown language to post readable questions. Your first question had some information which was not shown due to the conflicts with StackOverflow's MarkDown rendering.

其次尽量将你的代码模块化,并使用我曾经使用过的约定让代码更具可读性.使用 for 循环定义斐波那契数列:

Secondly try to modularize your code as much as possible and use the convention I have used to have a more readable code. Define a Fibonacci using a for loop:

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. 以矢量化形式定义您的函数:

A. define your function in a vectorized form:

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

考虑到 Scilab 不会通过函数广播矩阵/列表,您应该自己做.

consider that Scilab does not broadcast matrices / lists over functions and you should do that your self.

现在你可以用:

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

结果是:

B. 或者,您可以使用 feval 在序列上映射或广播您的函数.以标量形式定义函数:

B. Alternatively you could map or broadcast your function over the sequence using feval. Define your function in scalar form:

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

然后绘制:

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

这篇关于使用 scilab 说明一个特殊的函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆