GeoGebra循环详解
Author : zbzhen, Modified : Mon Nov 13 01:02:43 2023
更多GeoGebra相关教程, 请参考
https://kz16.top/ggb/ggbpptReadMe.html
GeoGebra循环稍微有点麻烦, 通常的办法有
-
zip
-
sequence
-
iteration
-
iterationList
-
repeat
-
execute
-
在
JavaScript中使用 for
1. 问题一
求自然数累加序列
[0, 1, 3, 6, 10, 15, 21, ...]
1.1. numpy 求解
import numpy as np np.cumsum(range(8))
1.2. GeoGebra 求解
1.2.1. zip 循环
a=0..8 l1=Zip(Sum(a, k),k,1..length(a))
这种方法容易想到, 但是计算效率低
1.2.2. sequence 循环
a=0..8 l2=sequence(Sum(a, k),k,1,length(a))
本质上和第一种方法差不多, 缺陷也是效率低
1.2.3. iteration 迭代
a = 0..8 l3=Iteration(join(k,Last(k)+a(1+Length(k))),k,{first(a)},length(a)-1) l4=Iteration(Flatten({k,Last(k)+a(1+Length(k))}),k,{first(a)},length(a)-1)
1.2.4. iterationList 迭代
a = 0..8 l5=x(iterationList(k+(a(y(k)),1),k,{(a(1),2)},length(a)-1))
1.2.5. 小结
-
上面的代码对于
a取一般的列表也成立 -
求累加序列的算法复杂度为, 如果用第一二种办法, 则把复杂度提高到, 很明显是不合理的, 但是后面的迭代方法写起来比较繁琐
2. 问题二
已知数列的首项为, 满足, 求该数列
2.1. python 求解
python解法为
a=[1] for i in range(2, 5): a.append(a[-1] + 1/i)
2.2. geogebra 求解
这种问题直接用列表循环是不好处理的, 需要用到迭代
a1=Iteration(join(k,Last(k)+1/(1+Length(k))),k,{{1}},5) a2=x(iterationList(k+(1/y(k),1),k,{(1,2)},5))
3. 问题三
已知数列满足, , , 求该数列
3.1. 求解
3.1.1. python 求解
a=[1,1] for i in range(3, 8): a.append(a[-1] - a[-2] + 1/i)
3.1.2. geogebra 求解
方法不唯一, 但都不简单, 例如
a1=Iteration(append(k,element(k,Length(k))-element(k,Length(k)-1)+1/(1+Length(k))),k,{{1, 1}},5) a2=x(iterationList((y(k), y(k)-x(k)+1/(z(k)), z(k)+1),k,{(1,1,3)},5))