我正在努力为学校完成这项任务,但无法弄清楚如何去做。我遇到的问题是for循环。它不断返回无效语法
import matplotlib.pyplot as plt
import numpy as np
import scipy
from scipy import stats
T = 1
r=0.06
m=0.03
mu = r-m
sigma = 0.2
H=99
S0 = 100
M=100
N =10
dt = T/N
t = np.linspace(0, T, N)
W = np.random.standard_normal(size = N)
W = np.cumsum(W)*np.sqrt(dt) ### standard brownian motion ###
X = (mu-0.5*sigma**2)*t + sigma*W
S = S0*np.exp(X) ### geometric brownian motion ###
i = 1
j=100
while S >= H
if True
S = S*np.exp(X)
i += 1
if False
print(" Barrier crossed at ",i)
break
elif
print("error")
break
plt.plot(t, S)
plt.show()
答案 0 :(得分:0)
首先,if False
永远不会评估您希望的方式,False
始终为假。
您还需要使用冒号(:
)完成while循环语句和所有条件语句,这就是您收到语法错误的原因。此外,您的elif
没有要评估的条件,因此会引发另一个语法错误。
答案 1 :(得分:0)
首先通过在while循环语句的末尾添加分号:
来修复无效语法。尽管如此,您的代码仍然无法评估。你可以以这样的错误结束,因为多个元素的数组的真值是不明确的。
基本上,如果您打印条件print(S >= H)
您将获得一个数组[False True False True True True True True True True]
您可以将表达式分配给array = S >= H
之类的变量。您可能希望使用while array.all():
或while array.any():
现在,array.all()
会产生False
,并且会在评估/执行的情况下进行任何评估/执行,最后会显示情节。
如果您决定尝试使用array.any()
,则会导致True
,并且会评估循环内的所有内容。
要使其工作,您必须纠正更多语法问题。在每个if语句之后添加分号并在elif之后添加条件并且不要忘记分号。
现在,if False:
下的块不会被评估,因为总是为假。 if True:
下的块将始终被评估,因为始终为True 。无论如何,结果将永远留在循环中进行操作并且情节不会出现。