如何创建循环来计算条件函数



我正在尝试创建一个循环,该循环将在离散值处评估函数。通常情况下,这是可以的,然而,这被证明是困难的,因为我的函数是有条件的(它有一个额外的分段函数,它依赖于主变量)。这是我在下面做的尝试;

import math
import numpy as np
for i in np.arange(4000,8000,1000):
def f(λ,a,u,o1,o2):
o = o1 if (λ <= u) else o2
return a*math.exp((λ-u)^2/(-2*o^2))
print(f(i,1.056,5998,379,310))

我期望代码在I =4000时评估函数,然后I =5000等。我接收到的输出如下;输入类型不支持TypeError: ufunc 'bitwise_xor',并且根据强制转换规则" safe "不能安全地将输入强制为任何支持的类型

我似乎找不到任何具体的例子来实现这样的条件函数。在没有循环的情况下进行了另一次尝试,但我遇到了值错误,我认为我正在评估数组,就好像它们是一个变量。

我希望稍后对函数进行积分和绘图。使用包含循环的方法是否会遇到问题?

Python使用**进行求幂。^为位异。

假设您的函数是正确的,除了幂运算符**,numpy的可能实现看起来像这样

# import math                           # does not work well with numpy
import numpy as np
def f(l,a,u,o1,o2):                     # change 'λ' to 'l' (it's easier to type)
o = np.where(l <= u, o1, o2)        # vectorize piecewise definition
return a*np.exp((l-u)**2/(-2*o**2)) # change '^' to '**' operator, use np.exp

x = np.arange(4000,8000,1000)           # define value range
print(f(x,1.056,5998,379,310))          # call your function one time with entire range

输出
[9.74560013e-07 3.29586202e-02 1.05597802e+00 5.68878883e-03]

要重用您的函数,您可以将其更改为参数化版本

import numpy as np
def f(a,u,o1,o2):
return lambda x: a*np.exp((x-u)**2/(-2*np.where(x <= u, o1, o2)**2)) 

x = np.arange(4000,8000,1000) 
f_p = f(1.056,5998,379,310)     # parameterize your function
print(f_p(x))                   # call the parameterized function with your value range

输出
[9.74560013e-07 3.29586202e-02 1.05597802e+00 5.68878883e-03]
import math
import numpy as np
def f(λ,a,u,o1,o2):
o = o1 if (λ <= u) else o2
return a*math.exp((λ-u)^2/(-2*o^2))
for i in np.arange(4000,8000,1000):  
print(f(i,1.056,5998,379,310))

试试这段代码。

最新更新