I have a relatively straightforward one-dimensional discrete system that is a variation of the logistic equation. I cannot figure out how to create my own function in Julia. For example, how do I model x(t+1) = p[1]+p[2]*x(t)^0.8(1-p[3]*x(t)^0.2). I cannot figure out how to create something like this. I can run the logistic equation successfully. The other examples I see are mainly with models with 2 or more variables. I cannot figure out how to set up the system for a customized 1-D problem. Thanks.

Hi, welcome to the Julia discourse

What precisely did you try? Can you show the code?

What I believe the answer is:

```
using DynamicalSystems
f(x, p, t) = p[1]+p[2] * x^0.8 * (1-p[3]*x^0.2)
x0 = 0.1 # initial condition
p0 = [0.1, 0.1, 0.1] # parameters
ds = DiscreteDynamicalSystem(f, x0, p0)
tr = trajectory(ds, 100) # timeseries
```

```
julia> tr = trajectory(ds, 100)
101-element Array{Float64,1}:
0.1
0.11484893192461114
0.11655674050586243
0.11674997309813506
0.11677179773573809
0.11677426222298418
0.11677454051213455
0.11677457193638044
0.11677457548478662
0.11677457588547042
0.11677457593071539
0.11677457593582442
0.11677457593640134
⋮
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
0.11677457593647476
```

Thank you very much!

I was trying variations of the following:

using DynamicalSystems

using PyPlot

logistic_eom(x, p, t) = SVector{1}(p[1]*x1)

state = zeros(1)

p = [2.0]

logistic = DiscreteDynamicalSystem(logistic_eom, state, p)

This yields:

DimensionMismatch(“derivative(f, x) expects that x is a real number. Perhaps you meant gradient(f, x)?”)

Stacktrace:

[1] derivative(::Function, ::StaticArrays.SArray{Tuple{1},Float64,1,1}) at C:\Users\mukherji.julia\packages\ForwardDiff\kU1ce\src\derivative.jl:72

and similar errors.

The problem is that you are mixing scalar and array representations of state, plus `x1`

is not defined:

```
logistic_eom(x, p, t) = SVector{1}(p[1]*x1)
state = zeros(1)
```

Note that `x1`

is a scalar that doesn’t appear in the argument list, and `state`

is a 1-D vector. You should follow @Datseris’s answer very closely, where `x`

is a scalar and `f`

returns a scalar.

According to the documentation:

Comment on 1-D

One dimensional discrete systems expect the state always as a pure number,`0.8`

instead of`SVector(0.8)`

.

You’ll probably want `logistic_eom(x1,p,t) = p[1]*x1`

to be consistent on both left and right-hand sides, and your initial state will also have to be scalar.

EDIT: Forgot to say try to format your code for readability and follow these instructions.

Thank you for your comments! Datseris’s response indeed solves my problem.