use*_*619 4 python math function
我非常喜欢初学者,所以请保持温柔.
我正在修改一些Python练习,我的代码看起来像这样.
def newton(x0, Tol):
def F(x):
return (x**3)+898
def dF(x):
return 3*x**2
x=[x0]
for n in range(400):
x.append(x[n]-(F(x[n]))/dF(x[n]))
if abs((x[n+1])-(x[n]))<Tol:
conv='Converge'
print n
break
if abs((x[n+1])-(x[n]))>=Tol:
conv='No converge'
return x[n+1], conv
Run Code Online (Sandbox Code Playgroud)
我定义了一个函数F(x)及其派生函数,dF(x)并将值添加到列表中x.
任务是检查系列是否收敛,我认为我已经成功了.
但我的问题是关于函数(x**3)+898和函数的3*x**2参数Newton.
我想象它会是这样的
def newton(f, df, x0, Tol):
def F(x):
return f
def dF(x):
return df
*calculations*
return x[n+1], conv
Run Code Online (Sandbox Code Playgroud)
你会打电话给它
newton((x**3)+898, 3*x**2, x0=something, Tol=something)
Run Code Online (Sandbox Code Playgroud)
这样的功能F(x),并dF(x)在此过程中被定义.
但是,x没有定义,所以它不起作用.
请注意,在练习中需要将f和df作为'newton'的参数.
你会怎么解决这个问题?
谢谢.
你可以使用lambdas,它们基本上都是简单的功能.
你会这样称呼它:
newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something)
Run Code Online (Sandbox Code Playgroud)
这与做这样的事情是一样的:
def f1(x):
return (x**3)+898
def f2(x):
return 3*x**2
newton(f1, f2, x0=something, Tol=something)
Run Code Online (Sandbox Code Playgroud)
唯一的区别是你没有"给lambda一个名字",即将它分配给一个变量.这对于您只需要使用一次的函数非常方便,尤其是作为函数的关键参数,例如sorted和max.
使用lambda:
newton(lambda x: (x**3)+898, lambda x: 3*x**2, x0=something, Tol=something)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1059 次 |
| 最近记录: |