首页 > 解决方案 > python:绘制和优化相同的函数

问题描述

可以说我有以下功能:

def f(x):
    return log(3*exp(3*x) + 7*exp(7*x))

我想做两件事:

1) 在一系列 x 值上绘制函数

2)使用scipy中的Newton方法找到函数的根

我的问题是,似乎最好使用 numpy array 进行绘图x=np.linspace(-2,2,1000),但随后评估函数会导致错误TypeError: only size-1 arrays can be converted to Python scalars。我可以通过简单地分别将和更改为logexp来解决这个问题。np.lognp.exp

但是这样做会让 scipy.optimize.newton 不高兴。

似乎我需要定义函数两次,一次用于绘图(with np. ...),一次用于以上面给出的形式进行优化。

我无法想象事实是这样的。任何提示将不胜感激。

标签: pythonnumpyscipy

解决方案


似乎合法,您只需要使用 numpy 函数而不是基本数学函数:

import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt
%matplotlib inline

def f(x):
  return np.log(3*np.exp(3*x) + 7*np.exp(7*x))

x = np.linspace(-2,2,1000)
y = f(x) 
plt.scatter(x, y)

optimize.root(f, 1)

推荐阅读