math - 转换数学函数以允许多个值
问题描述
我正在尝试更改 Octave / Matlab 函数以允许多个值。
示例:函数rtfib(8)产生21,这是第 8 个斐波那契数。
我试图让输入也允许rtfib(1:8)并且答案将作为数组返回[1,1,2,3,5,8,13,21]
我的代码如下:
function [f] = rtfib(n)
if n<0
multi=-1; %if neg number store neg in multi variable
n=abs(n); %if neg make pos
else
multi=1;
end
if (n == 0)
f = 0;
elseif (n==1)
f=1;
elseif (n == 2)
f = 1; % its 1
else
fOld = 1; % 1 again.
fOlder = 1;
for i = 3 : n
f = fOld + fOlder;
fOlder = fOld;
fOld = f;
end
end
f=f*multi; %put sign back
end
PS:我使用的是类似于 Matlab 的 Octave 4.2.2
解决方案
此函数也适用于标量、顺序向量、非顺序向量和矩阵。此外,输出具有与输入相同的维度:
function res = rtfib(n)
abs_mat = abs(n);
max_num = max(max(abs_mat));
fib_vec = ones(1, max_num);
for i = 3:max_num
fib_vec(i) = fib_vec(i - 1) + fib_vec(i - 2);
end
res = zeros(size(n));
res(n ~= 0) = fib_vec(abs_mat(n ~= 0));
res(n < 0) = -res(n < 0);
end
例子:
代码:
n = 9
rtfib(n)
输出:
n = 9
ans = 34
代码:
n = 1:8
rtfib(n)
输出:
n =
1 2 3 4 5 6 7 8
ans =
1 1 2 3 5 8 13 21
代码:
n = [1:8]'
rtfib(n)
输出:
n =
1
2
3
4
5
6
7
8
ans =
1
1
2
3
5
8
13
21
代码:
n = [-5 1 6 0; 4 4 -2 8; 7 -3 0 -1]
rtfib(n)
输出:
n =
-5 1 6 0
4 4 -2 8
7 -3 0 -1
ans =
-5 1 8 0
3 3 -1 21
13 -2 0 -1
推荐阅读
- node.js - 使用 pracrand 测试 RNG 的 nodejs JavaScript 堆内存不足
- python-3.x - 如何从python 3中的字符串数据框中找到出现次数最多的句子
- javascript - Google Drive API 压缩文件损坏
- offline - 离线使用 Cartopy 地图
- python - 在按钮中创建图像
- java - 如何使用 Selenium Webdriver 和 Java 提取元素的显示属性
- python - 如何升级pip?
- c++ - 如何在 C++ 中循环遍历类对象
- syntax - 了解函数类型签名
- arrays - R 将矩阵重塑为多维数组,用于卷积神经网络训练