使用scipy.optimize.brentq查找两个函数的根

时间:2016-12-01 21:29:05

标签: python scipy

我试图找到函数的根(即曲线交叉的地方):

def f1(x):
    return np.cos(2 * np.pi * x) * np.exp(-x ** 2)

def f2(x):
    return np.log(x + 2.2)

从查看这两个函数的图表我知道有两个根,其中-2&lt; x&lt; 2但我希望根> 0.5> x> 0(另一个根出现在x <0)

我做了一些研究,似乎scipy.optimize.brentq用于查找函数的根,但我不知道如何为两个函数的根执行它。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

以我的拙见,最简单的方法是定义新功能,例如:

def difference(x):
   return f1(x)-f2(x)

然后使用scipy.optimize.brentq

答案 1 :(得分:0)

使用lambda创建一个新函数,将值(x)传递给两个函数并减去它们并返回结果

import UIKit
import Firebase
import GoogleSignIn


class ViewController: UIViewController, GIDSignInUIDelegate, GIDSignInDelegate {
@IBOutlet weak var txtPassword: UITextField!
@IBOutlet weak var txtEmail: UITextField!
@IBOutlet weak var txtAuthStatus: UILabel!


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
    GIDSignIn.sharedInstance().delegate = self
    GIDSignIn.sharedInstance().uiDelegate = self

    if let user = Auth.auth().currentUser {
        self.txtAuthStatus.text = "Signed in as " + user.email!;
    }
    else {
        self.txtAuthStatus.text = "";
    }

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

    func sign(_ signIn: GIDSignIn!, didDisconnectWith user: GIDGoogleUser!, withError error: Error!) {
        if let error = error {
            print(error.localizedDescription)
            return
        }
        try! Auth.auth().signOut()
    }

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    if let error = error {
        print(error.localizedDescription)
        return
    }

    let authentication = user.authentication
    let credential = GoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!, accessToken: (authentication?.accessToken)!)

    Auth.auth().signIn(with: credential, completion: { (user, error) in
        if error != nil {
            print(error?.localizedDescription as Any)
            return
        }
        print("User logged in with Google")
    })
}




@IBAction func btnCreateUser(_ sender: Any) {
    if let email:String = txtEmail.text, let pass:String = txtPassword.text {
        Auth.auth().createUser(withEmail: email, password: pass) {
            (user, error) in
            if let error = error {
                let errCode = AuthErrorCode(rawValue: error._code);
                if (errCode == .emailAlreadyInUse) {
                    self.txtAuthStatus.text = "Error: user already exists";
                } else {

                    self.txtAuthStatus.text = error.localizedDescription;
                }
            }
            if let user = user {
                self.txtAuthStatus.text = "Signed in as " + user.email!
                self.txtEmail.text = nil;
                self.txtPassword.text = nil;

            }
        }
    }
}
@IBAction func btnSignIn(_ sender: Any) {
    if let email:String = txtEmail.text, let pass:String = txtPassword.text {
        Auth.auth().signIn(withEmail: email, password: pass) {
            (user, error) in
            if let error = error {
                let errCode = AuthErrorCode(rawValue: error._code);
                if (errCode == .userNotFound) {
                    self.txtAuthStatus.text = "Error: user not found";
                }
                else if (errCode == .wrongPassword) {
                    self.txtAuthStatus.text = "Error: wrong password";
                }
                else if (errCode == .userDisabled) {
                    self.txtAuthStatus.text = "Error: user account disabled";
                }
                else {
                    self.txtAuthStatus.text = error.localizedDescription;
                }
            }
            if let user = user {
                self.txtAuthStatus.text = "Signed in as " + user.email!
                self.txtEmail.text = nil;
                self.txtPassword.text = nil;
                self.performSegue(withIdentifier: "signin", sender: self)

            }
        }
    }
}
@IBAction func btnSignOut(_ sender: Any) {
    try! Auth.auth().signOut();
    self.txtAuthStatus.text = "Signed out";
}

}