我的内部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
我删除了我先前的回答;这不是你的主要问题
您跟踪了错误的值:d和dnew确实发生了变化。但是,对于您担心的值,它们不是数据流的一部分
在上面的程序中,d完全取决于它的起始值和增量,两者都是0.1,dd不变p完全取决于a和b的值,这些值也不会改变
是的,你做了一些很好的工作来计算FA,FB,FP,但是你到达了循环的底部,你没有把它们保存在任何地方,然后你在下一个循环中覆盖了tehm
如果是较低的程序,则与As和E有相同的问题:您从不更改它们所依赖的参数(这些参数都在yvs中,您从不打印出来),因此每个循环的输出都是相同的
由于您使用的是一个和两个字母的变量,并且还没有记录您的代码,所以我不知道如何解决这个问题:我不知道您的程序应该做什么,尽管它似乎想要收敛一些计算序列
相关问题 更多 >
编程相关推荐