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取一般的列表也成立

  • 求累加序列的算法复杂度为O(N)O(N), 如果用第一二种办法, 则把复杂度提高到O(N2)O(N^2), 很明显是不合理的, 但是后面的迭代方法写起来比较繁琐

2. 问题二

已知数列{an}\{a_n\}的首项为11, 满足an=an1+1na_n=a_{n-1}+\frac{1}{n}, 求该数列

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. 问题三

已知数列{an}\{a_n\}满足, a1=a2=1a_1=a_2=1, an=an1an2+1na_n=a_{n-1}-a_{n-2}+\frac{1}{n}, 求该数列

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))