使用for循环在等式

时间:2015-06-18 23:43:57

标签: python combinations equation

我在文本文件中解压缩了包含数字的多个数组。我已经想出把它们放在我的等式中:

import numpy as np
import matplotlib.pyplot as plt
import urllib
from numpy import sin, cos
from scipy.special import jv

tms, period, perioderr, bjdo, bjdoerr, ecc, eccerr, omega, omegaerr, ampltd, ampltderr, yo, yoerr = np.loadtxt(TM_filename, unpack = True)

def compute_ETV(bjd, bjdo, period, ecc, ampltd, omega, yo, numiter = 20):
    M = 2 * np.pi * (bjd - bjdo) / period
    u = M + sum([2./k * jv(k,k*ecc) * sin(k*M) for k in range(1,numiter)])
    return yo + ampltd/(24*60*60) * ((1-ecc**2)**0.5 * sin(u)*cos(omega)+(cos(u)-ecc)*sin(omega))

for i,item in enumerate(tms[:10]):
    ETV = compute_ETV(bjd[ecl==0], bjdo[i], period[i], ecc[i], ampltd[i], omega[i], yo[i], 20)

问题是,“如何交换这些值的最小值和最大值?我想使用for循环为每个数组输入最大值和最小值,并通过添加最大值或减去相应的误差值至少,但我怎样才能为每种可能的组合混合搭配分钟和最大值?

修改

好吧那些不喜欢通过我的代码混乱找到他们的人(这是一个可怕的习惯,特别是因为我编码......),我想到了TL:DR版本。

我有这些数组:m,x和b。在此之后,我有:m_error,x_error和b_error。我通过添加和减去这些原始值的误差值来设置这些变量的最小值和最大值。

m = np.arange(1, 10)
x = np.arange(1, 10)
b = np.arange(1, 10)
m_error = np.linspace(0, 1, 9)
x_error = np.linspace(0, 1, 9)
b_error = np.linspace(0, 1, 9)
m_max = m + m_error
m_min = m - m_error
x_max = x + x_error
x_min = x - x_error
b_max = b + b_error
b_min = b - b_error


def compute(m, x, b):
    y = m*x + b
    return y

如何输入一个给我y的循环:“m_min(x_min)+ b_min”,“m(x_min)+ b_min”,“m(x)+ b(min)”,“m(x )+ b“,”m_max(x)+ b“......依此类推?

1 个答案:

答案 0 :(得分:0)

您可以找到所有可能的排列,然后通过执行字符串找到数值解;它是hacky,但是如果你需要一个更好的解决方案,你可以重新发布问题并等待回复(假设存在更好的解决方案!)。

示例:

m = 1
x = 2
b = 3
m_max = 4
m_min = 5
x_max = 6
x_min = 7
b_max = 8
b_min = 9

import parser

m_iters = ['m','m_max','m_min']
x_iters = ['x','x_max','x_min']
b_iters = ['b','b_max','b_min']
h =[]
i =[]

[h.append([k+'*'+j]) for k in m_iters for j in x_iters]     #m*x   perms
[i.append(k+[v for v in b_iters]) for k in h]               #m*x+b perms 
for k in range(1,4):
    for j in i:
        q = j[0]+'+'+j[k]
        ans_q = eval(parser.expr(j[0]+'+'+j[k]).compile())  #eqn from str
        print q, '=', ans_q

>>>
m*x+b = 5
m*x_max+b = 9
m*x_min+b = 10
m_max*x+b = 11
m_max*x_max+b = 27
m_max*x_min+b = 31
m_min*x+b = 13
m_min*x_max+b = 33
m_min*x_min+b = 38
m*x+b_max = 10
m*x_max+b_max = 14
m*x_min+b_max = 15
m_max*x+b_max = 16
m_max*x_max+b_max = 32
m_max*x_min+b_max = 36
m_min*x+b_max = 18
m_min*x_max+b_max = 38
m_min*x_min+b_max = 43
m*x+b_min = 11
m*x_max+b_min = 15
m*x_min+b_min = 16
m_max*x+b_min = 17
m_max*x_max+b_min = 33
m_max*x_min+b_min = 37
m_min*x+b_min = 19
m_min*x_max+b_min = 39
m_min*x_min+b_min = 44