The difference between scipy.optimize.fsolve and sympy's solve functions - python

I am trying to figure out the differences between Optimize.fsolve and SymPys solve function? **Is there a difference in computation or are the constraints as to which method to use?**Is Scipy fsolve more accurate than Numpy solve function?
The obvious difference I found is that Scipy.Optimize.Fsolve can solve non linear equations given a guess value, whereas SymPys solve function can be used to solve equations and expressions that contion symbolic math variables.
Any reference literature or website which you can share will be much appreciated.

Related

Solving nonlinear differential equations in python

I am trying to solve the differential equation 4(y')^3-y'=1/x^2 in python. I am familiar with the use of odeint to solve coupled ODEs and linear ODEs, but can't find much guidance on nonlinear ODEs such as the one I'm grappling with.
Attempted to use odeint and scipy but can't seem to implement properly
Any thoughts are much appreciated
NB: y is a function of x
The problem is that you get 3 valid solutions for the direction at each point of the phase space (including double roots). But each selection criterion breaks down at double roots.
One way is to use a DAE solver (which does not exist in scipy) on the system y'=v, 4v^3-v=x^-2
The second way is to take the derivative of the equation to get an explicit second-order ODE y''=-2/x^3/(12*y'^2-1).
Both methods require the selection of the initial direction from the 3 roots of the cubic at the initial point.

using mystic to solve a non convex non linear problem that has a function in its objective function

I am trying to use mystic to solve a nonconvex nonlinear objective function that has a function in it. I have written my problem formulation here
w and n are decision variables.
The problem is that none of the examples in mystic documentation has an objective function similar to mine. And I have a hard time writing my objective function in mystic. Would you please point me to a tutorial or help me to figure out how I can use mystic for my problem?

How to solve Matrix Riccati ODE in python

I want to solve the following Matrix Riccati ODE.
My Matrix Riccati ODE
After searching on the Internet, I found that there is something called continuous-time algebraic Riccati equation (CARE) https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.solve_continuous_are.html#scipy.linalg.solve_continuous_are
However, I am not majored in math and not familiar with advanced ode, so I wanna ask that are these two the same thing or not? If not, how to solve the above Matrix Riccati ODE in Python? Thanks in advance. Any comments are welcomed.
You can use the modified Davison-Maki method to solve your Riccati equation.
See https://arxiv.org/pdf/1910.13362.pdf (Algorithm 2). The method is easy to implement.

How to solve for roots in a non-linear equation? Do I use SciPy?

Link to Complicated Equation
I'm trying to find Ts for a given time. I have all necessary variables in the above equation, except for Ts. I realized that I can integrate with respect to t, which makes things a little easier. From there, how do I go about solving for Ts?
This is not a root-finding problem. This is a differential equation, which you can solve using e.g. solve_ivp from scipy.integrate. You will need the initial value for T(t=0).

Solving first-order ODE, which contains another ODE (odeint / solve_ivp in Python)

I'm trying to set up a fast numerical solver in Python for a differential problem of the form:
where r is some constant.
I want to integrate A over some time period, t of interest. However, this is complicated by the fact that the dA/dt equation includes another variable B, which itself is described by an ODE dB/dt. B is actually a vector, but I've simplified the expression to try and highlight my problems more clearly.
I currently have a solution using a manual Euler method: ie compute dB/dt (then use B = B_previous + dB/dt * dt) and manually step along using a fixed time step size dt. However, this is slow and unreliable. I imagine it would be far better to use the built-in ODE solvers in Numpy, but I'm not sure this is possible given the coupled nature of the problem I'm trying to solve?
Is this possible using Numpy odeint or solve_ivp please? And if so, can anyone suggest any pointers please! Thanks.
What you have is a coupled differential equation which are standard to solve using Runge kutta, Eulers, and many other methods. You can use this example to guide you in writting your python code:
https://scipy-cookbook.readthedocs.io/items/CoupledSpringMassSystem.html
Keep in mind that that not all equations can be solved with ODEINT. If your ODE is a "stiff" ODE then you will have to choose your algorithm precisely. The definition of a stiff ODE is not completely defined but usually they arise if you have large or non-integral powers of your dependent variable in your ODE.
The first step in solving a coupled ODE though is to use standard methods. If they don't work then look into something else.

Categories