我获得了以下任务:
编写一个可以生成包含N个元素的数组的函数。这些值在数学上定义为:
z_n = alpha(1 + sqrt {3})^ n + beta(1-sqrt {3})^ n所有n> = 1
元素数量和两个实数alpha和beta作为输入。输出应该是具有前n个值的向量。
这段代码,我必须完成:
def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
return
这是我能够提出的:
def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
z_n = np.empty((N, 1))
N = 10
n = 1
for alpha in range(1, N):
z_n[n] = alpha*(1+sqrt(3))^n + beta*(1-sqrt(3))^n
n += 1
return z_n
有人可以帮助我做对吗?
答案 0 :(得分:0)
问题:^
是按位xor操作,而不是电源。在这种情况下,您可以使用**
。此外,您在alpha
循环中分配给for
。
所以你可以解决它:
def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
result = np.empty((N, 1))
for n in range(1, N+1):
result[n-1] = alpha*(1+sqrt(3))**n + beta*(1-sqrt(3))**n
return result
尽管如此,您可以先生成arange
,然后使用广播,使其更具说明性:
def make_sequence(N:int, alpha:float, beta:float) -> np.ndarray:
result = np.arange(1,N+1)
return alpha*(1+sqrt(3))**result + beta*(1-sqrt(3))**result
对于alpha=0.5
和beta=0.25
的10个元素,我们得到:
>>> make_sequence(10,0.5,0.25)
array([ 1.18301270e+00, 3.86602540e+00, 1.00980762e+01,
2.79282032e+01, 7.60525589e+01, 2.07961524e+02,
5.68028166e+02, 1.55197938e+03, 4.24001509e+03,
1.15839890e+04])