如何在Matlab / Simulink仿真图递归定义?万博1manbetx

12个视图(30天)
其中n是1到10吗
(n) = 1.03 * -700 (n - 1);
B (n) = (B (n - 1) + 50) * 1.03;
n (n - 1)的前一项
有可能情节这些递归定义在Matlab图上相同的两行吗?
如果是如何?

接受的答案

Peter O
Peter O 2021年8月14日
确定。使用while循环和调用函数。然而,对于这个问题,考虑使用一个for循环。它会更有效率,因为你可以使用立即之前的值。
您需要定义一个(1)和B (1)。我假设他们是1。
nmx = 10;
%假设(1)和B(1)是1,因为他们没有其他定义。
一个= 1 (nmx, 1);
B = 1 (nmx, 1);
第九= 2:nmx
(九)= 1.03 * -700 (ix-1);
B (ix) = 1.03 * (B (ix-1) + 50);
结束
% n的递归函数为每个值
基于“增大化现实”技术= 1 (nmx, 1);
Br = 1 (nmx, 1);
第九= 1:nmx
[Ar (ix)] = A_recurse (ix);
[Br (ix)] = B_recurse (ix);
结束
图(1)
阴谋(1:nmx,“p”);
持有
阴谋(1:nmx B“o”);
阴谋(1:nmx,基于“增大化现实”技术,“年代”);
阴谋(1:nmx, Br,“x”);
持有
传奇(“一个”,“B”,基于“增大化现实”技术的,“品牌”);
函数一个= A_recurse (n)
如果n = = 1
= 1;
其他的
= 1.03 * A_recurse (n - 1) -700;
结束
结束
函数B = B_recurse (n)
如果n = = 1
B = 1;
其他的
B = 1.03 * (B_recurse (n - 1) + 50);
结束
结束
2的评论
Peter O
Peter O 2021年8月20日
这是正确的!
(1)= 10000;
B (1) = 2000;
另外两个评论:
首先,使用一个for循环结构通常是一个好主意,当你不知道多少次你将递归或循环大量的值。的数量 嵌套的 函数调用可以大幅增长,这是更难计算机优化。值得注意的一点是我上面的递归是一种编码捕捉每个值的输出,所以它是更糟。
对于上述情况对n = 10:
n = 10等待n = 9,等待n = 8…10个电话
n = 9等待n = 8…9日称
55个电话
如果你是 只有 感兴趣的最终值getRecurse(10),然后你会有10评估使用for循环或递归。它更容易捕获运行值或使用递归构建数组使用循环比。
其次,风格的东西。在MATLAB preallocate你数组当你知道他们的大小,因为它减少了计算机的工作量是保持在内存中为你填满它。我使用一个 叫来填补上述跳过分配(1)= 1,这未必是最佳实践。如果你想使用一个不同的值开始,考虑评估更“空白”价值与初始化一个显式的一步。常见的选择或设置为零 开始。
一个= 0 (nmx, 1);
B = 0 (nmx, 1);
(1)= 10000;
B (1) = 2000;
上面的意图在别人阅读你的代码风格会更清楚比初始化所有值的初始值。
一个= 10000 * 1 (nmx 1);
B = 2000 * 1 (nmx, 1);

登录置评。

更多的答案(0)

类别

找到更多的在数据类型识别帮助中心文件交换

s manbetx 845


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!