Kev*_*fer 4 python numpy matplotlib
所以基本上我想抓住我的牛顿方法找到根的迭代次数,然后取这个数字并将它应用到我的配色方案中,使迭代量越长,颜色越深,越少,颜色越饱满.
所以这是我的代码
from numpy import *
import pylab as pl
def myffp(x):
return x**3 - 1, 3*(x**2)
def newton( ffp, x, nits):
for i in range(nits):
#print i,x
f,fp = ffp(x)
x = x - f/fp
return x
q = sqrt(3)/2
def leggo(xmin=-1,xmax=1,jmin=-1,jmax=1,pts=1000,nits=30):
x = linspace(xmin, xmax, pts)
y = linspace(jmin, jmax, pts)*complex(0,1)
x1,y1 = meshgrid(x,y)
n = newton(myffp,x1+y1,nits) #**here is where i wanna see the number of iterations newton's method takes to find my root**
r1 = complex(1,0)
r2 = complex(-.5, q)
r3 = complex(-.5,-q)
data = zeros((pts,pts,3))
data[:,:,0] = abs(n-r1) #**and apply it here**
data[:,:,2] = abs(n-r2)
data[:,:,1] = abs(n-r3)
pl.show(pl.imshow(data))
leggo()
Run Code Online (Sandbox Code Playgroud)
主要的问题是找到迭代次数,然后我可以弄清楚如何应用它来使颜色变暗,但是现在它只是找到通过牛顿方法运行的每个值所需的迭代次数.
也许最简单的方法是重构你的牛顿函数,以便它跟踪总迭代然后返回它(当然还有结果),例如,
def newton( ffp, x, nits):
c = 0 # initialize iteration counter
for i in range(nits):
c += 1 # increment counter for each iteration
f, fp = ffp(x)
x = x - f/fp
return x, c # return the counter when the function is called
Run Code Online (Sandbox Code Playgroud)
因此,在代码的主体中,将您的调用更改为牛顿,如下所示:
res, tot_iter = newton(myffp, x, nits)
Run Code Online (Sandbox Code Playgroud)
最后一次调用牛顿的迭代次数存储在tot_iter中
除此之外,你对Newton's Method的实现似乎并不完整.
例如,它缺少针对某些收敛标准的测试.
这是python中的一个简单实现:
def newtons_method(x_init, fn, max_iter=100):
"""
returns: approx. val of root of the function passed in, fn;
pass in: x_init, initial value for the root;
max_iter, total iteration count not exceeded;
fn, a function of the form:
def f(x): return x**3 - 2*x
"""
x = x_init
eps = .0001
# set initial value different from x_init so at lesat 1 loop
x_old = x + 10 * eps
step = .1
c = 0
# (x - x_old) is convergence criterion
while (abs(x - x_old) > eps) and (c < max_iter):
c += 1
fval = fn(x)
dfdx = (fn(x + step)) - fn(x) / step
x_old = x
x = x_old - fval / dfdx
return x, c
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2065 次 |
| 最近记录: |