Search code examples
matlabsimulationmathematical-optimizationodenonlinear-functions

MATLAB: How to solve high dimensional nonlinear ODE?


I have an ODE:

x' = -x + f(x)

Looks simple enough, but x is 100 dimensional i.e.

x = [x1, ... , x100]

Furthermore,

fi(x) = ln(xi)/(ln(x1)+...+ln(x100))

where i is between 1 and 100 and f(x) = [f1(x), ... , f100(x)]

On MATLAB's website, it says I should first create a function as:

enter image description here

But how can I do this? I have 100 variables, and all my variables are coupled through that highly nonlinear function.

Any help is greatly appreciated!


Solution

  • The function can leverage the vectorization capabilities of MATLAB since, from the ode45 documentation, the "function dydt = odefun(t,y), for a scalar t and a column vector y, must return a column vector dydt". So your odefun can be expressed simply as

    function dxdt = odefun(~,x)
        logX = log(x);
        dxdt = -x + logX/sum(logX);
    end
    

    and let ode45, or another appropriate integrator, handle the rest.