Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 变量值未进入内部for循环_Python_Numpy - Fatal编程技术网

Python 变量值未进入内部for循环

Python 变量值未进入内部for循环,python,numpy,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循环没有使用来自外部循环的新值。 出了什么问题,我该如何解决

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
将numpy导入为np
a=0.0000001
b=15。
d=0.1
TOL=1.0e-6
a1=[]
dd=0.1
da1=[]
对于范围(0,10)内的i:
def f(v):
返回np.cosh(d*v)-(1./v)*np.sinh(d*v)-1。
FA=f(a)
FB=f(b)
对于范围(01000)内的I:
p=a+(b-a)/2.0
FP=f(p)
如果FA==0或(b-a)/2.00:
a=p
FA=FP
如果FA*FP<0:
b=p
a1.附加(p)
da1.追加(d)
d=d+dd
打印a1
打印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
将numpy导入为np
a=0.00001
a1=[]
dd=0.1
da=1.e-5
d=0.1
yvs=[]
ds=[]
EE=[]

而d我删除了我先前的答案;这不是你的主要问题

您跟踪了错误的值:ddnew确实发生了变化。但是,对于您担心的值,它们不是数据流的一部分

在上层程序中,d完全取决于其起始值和增量值,两者均为0.1,dd不变p完全取决于ab的值,这两个值也不会改变

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

如果使用较低的程序,则E存在相同的问题:您从不更改它们所依赖的参数(这些都在yvs中,您从不打印出来),因此每个循环的输出都是相同的


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

为什么要在循环中定义一个方法?不可能有那么高的效率,那是难以辨认的。请阅读并将代码编辑到您的问题中。这些微小、难以捉摸的变量名让我想起了20世纪80年代我从杂志上手工复制到我背上的TI BASIC程序。自文档化的名称确实值得额外的击键,特别是如果您以后需要对代码进行更多工作的话。