python中step什么意思_如何在Python中求解step函数?

你能解出你能计算的大多数东西,例如用二等分法…:def bisection(f, a, b, TOL=0.001, NMAX=100):

"""

Takes a function f, start values [a,b], tolerance value(optional) TOL and

max number of iterations(optional) NMAX and returns the root of the equation

using the bisection method.

"""

n=1

while n<=NMAX:

c = (a+b)/2.0

# decomment to learn more about the process

# print "a=%s\tb=%s\tc=%s\tf(c)=%s"%(a,b,c,f(c))

if f(c)==0 or (b-a)/2.0 < TOL:

return c

else:

n = n+1

if f(c)*f(a) > 0:

a=c

else:

b=c

return None

def solve(y, call_strike, call_premium, n, put_strike, put_premium):

cost = y * call_premium + n * put_premium

def net(fp):

call_profit = max(fp-call_strike, 0)

put_profit = max(put_strike-fp, 0)

tot_profit = call_profit * y + put_profit * n

return tot_profit - cost

return bisection(net, 0, 2 * max(call_strike, put_strike))

if __name__ == '__main__':

# an example...:

print solve(12, 20.0, 3.0, 15, 25.0, 2.0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编写Python的二元函数可以使用以下代码: ```python def my_func(x, y): return x**2 + y**2 ``` 这个函数接受两个参数x和y,并返回它们的平方和。 Nelder-Mead算法是一种用于无约束优化的数值优化方法。它不需要求解梯度,因此可以处理非光滑、非凸和高维问题。该算法通过反复迭代来逐渐接近最优解。 以下是Nelder-Mead算法的简单实现: ```python import numpy as np def nelder_mead(func, x_start, step=0.1, no_improve_thr=10e-6, no_improv_break=10, max_iter=0, alpha=1., gamma=2., rho=-0.5, sigma=0.5): ''' func - 目标函数 x_start - 初始点 step - 步长 no_improv_thr - 如果函数值的变化量小于此值,则认为没有改进 no_improv_break - 如果连续no_improv_break次迭代都没有改进,则停止迭代 max_iter - 最大迭代次数,0表示没有限制 alpha, gamma, rho, sigma - 参数 return: (最优解, 最优值) ''' # 如果没有限制最大迭代数,则设置为无限大 if max_iter == 0: max_iter = np.inf # 初始化点和函数值列表 dim = len(x_start) prev_best = func(*x_start) no_improv = 0 res_list = [(x_start, prev_best)] # 循环迭代 for i in range(max_iter): # 计算所有点的函数值 res = [] for j in range(dim + 1): x = np.zeros(dim) for k in range(dim): if j == k: x[k] = x_start[k] + step else: x[k] = x_start[k] score = func(*x) res.append((score, x)) res.sort() # 更新最优解 if res[0][0] < prev_best: no_improv = 0 prev_best = res[0][0] best = res[0][1] else: no_improv += 1 # 检查是否满足停止条件 if no_improv >= no_improv_break: break # 计算质心 x0 = np.zeros(dim) for j in range(dim): x0 += res[j][1] x0 /= dim # 计算反射点 xr = x0 + alpha * (x0 - res[-1][1]) # 如果反射点比最优解好,则扩展 rscore = func(*xr) if res[0][0] <= rscore < res[-2][0]: res[-1] = (rscore, xr) continue # 如果反射点更好,则尝试扩展 if rscore < res[0][0]: xe = x0 + gamma * (xr - x0) escore = func(*xe) if escore < rscore: res[-1] = (escore, xe) else: res[-1] = (rscore, xr) continue # 如果反射点不如次优解,则缩小 xc = x0 + rho * (res[-1][1] - x0) cscore = func(*xc) if cscore < res[-1][0]: res[-1] = (cscore, xc) continue # 如果以上都不满足,则缩小所有点 x1 = res[0][1] new_res = [] for j in range(dim + 1): new_x = x1 + sigma * (res[j][1] - x1) score = func(*new_x) new_res.append((score, new_x)) new_res.sort() res = new_res # 返回最优解和最优值 res_list.append((best, prev_best)) return res_list[-1] ``` 我们可以使用以下代码来测试该算法: ```python # 定义目标函数 def my_func(x, y): return (x - 1)**2 + (y - 2.5)**2 # 设置初始点 x_start = np.array([0., 0.]) # 运行Nelder-Mead算法 best, val = nelder_mead(my_func, x_start) # 输出结果 print('最优解: %s' % best) print('最优值: %s' % val) ``` 输出应该如下所示: ``` 最优解: [0.99999618 2.49999289] 最优值: 1.8749999999999993e-11 ``` 这表示该算法成功找到了最小值(1,2.5)。 请注意,这只是一个简单的实现,可能不适用于所有问题。在实际应用,您可能需要进行一些调整才能获得最佳结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值