变量值没有进入内部for循环

时间:2016-11-16 23:49:43

标签: python numpy

我的内部for循环不使用外部循环中的新值。 怎么了,怎么解决?

import numpy as np
a = 0.0000001
b = 15.
d = 0.1
TOL = 1.0e-6
a1 = []
dd = 0.1
da1 = []
for i in range(0,10):
    def f(v):
        return np.cosh(d * v) - (1./v) * np.sinh(d * v) - 1.
    FA = f(a)
    FB = f(b)
    for I in range(0,1000):
        p = a + (b - a) / 2.0
        FP = f(p)
        if FA == 0 or (b - a)/2.0 < TOL:
            break        
        I = I + 1
        if FA * FP > 0:
            a = p
            FA = FP
        if FA * FP < 0:
            b = p
    a1.append(p) 
    da1.append(d)
    d = d + dd
print a1
print da1

这是第二个实现。变量 d 显示新值,但内部循环不断给出相同的结果结果,就像它没有注册新的 d 值一样。

import numpy as np
a = 0.00001
a1 = []
dd = 0.1
da = 1.e-5
d = 0.1
yvs=[]
ds = []
EE = []
while d <= 1.:
    dnew = d
    print dnew
    for i in range(0,1000000):
        dnew = d
        yv = np.cosh(dnew * a) - (1./a) * np.sinh(dnew * a) - 1.
        yvs.append(yv)
        a = a + da
        a1.append(a)
        i = i + 1
    for ii in range(0,999999):
        As = (a1[ii]+a1[ii+1])/2.
        E = -1. * As**2    
        if yvs[ii]*yvs[ii+1] < 0:
            EE.append(E)
            print As, E
        ii = ii + 1
    d = dnew + dd

1 个答案:

答案 0 :(得分:1)

我删除了我之前的回答;这不是你遇到的主要问题。

您追踪了错误的值: d dnew 确实改变了。但是,它们不是您担心的值的数据流的一部分。

在上面的程序中, d 完全取决于它的起始值和增量值,它们都是0.1,而 dd 不会改变。 p 完全取决于 a b 的值,这些值也不会更改。

是的,你做了一些很好的工作来计算FA,FB,FP - 然后你点击了循环的底部,你没有将它们保存在任何地方,然后你在下一个循环中覆盖tehm。

如果较低的程序,你有 As E 的相同问题:你永远不会改变它们所依赖的参数(全部在 yvs < / strong>,你永远不会打印出来),所以每个循环的输出都是一样的。

由于您使用的是单字母和双字母变量并且没有记录您的代码,我不知道如何解决这个问题:我不知道您的程序应该做什么,尽管它似乎想收敛一些计算系列。