# ode45 issue: dimension mismatch

10 messages
Open this post in threaded view
|

## ode45 issue: dimension mismatch

 Dear all, For my first time, I am trying to solve a differential equation using ode45. My code looks like this: clear; clc; t = linspace(0,400,401); x0 = [0, 0]; function f = dx(x,t) M = 2.933e-5; m = 0.158; n = 1.26; dx = M*x^m(1-x)^n; endfunction [t,x] = ode45(@dx, t, x0); The error I get is a dimension mismatch and I do not understand a mismatch between which parameters. Can this function be solved by ode45 at all or should I use a different solver or bring the function to a different form? If so, which? I appreciate any kind of information. Thanks, Jan ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 Hi, > On 6 Feb 2018, at 12:07, Tweety <[hidden email]> wrote: > > Dear all, > > For my first time, I am trying to solve a differential equation using > ode45. My code looks like this: > > clear; clc; > t = linspace(0,400,401); > x0 = [0, 0]; > function f = dx(x,t) > M = 2.933e-5; > m = 0.158; > n = 1.26; > dx = M*x^m(1-x)^n; > endfunction > [t,x] = ode45(@dx, t, x0); > > The error I get is a dimension mismatch and I do not understand a > mismatch between which parameters. > > Can this function be solved by ode45 at all or should I use a different > solver or bring the function to a different form? If so, which? I > appreciate any kind of information. There are so many errors in the few lines of code above that it is quite difficult to understand what actually is the proble that you are trying to solve, maybe it would be easier to understand what you are trying to accomplish if you write in formulas rather than in code. Is this some sort of homework? We usually don't solve homework questions on this list, but we do answer specific questions about the usage of octave functions. > Thanks, > Jan c. ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 Hi, Thanks for the reply. Basically, the equation I am trying to solve is dx/dt = M*x^m (1-x)^n The equation describes the reaction kinetics of a specific polymer over time. M=2.93e-5 is a pre factor, m=0.158 and n=1.26 are exponents which describe the order of the two parts of a reaction. I wish it was homework so I could actually speak to others having the same issue... no. Kind regards, Jan Am 06.02.2018 um 15:52 schrieb Carlo De Falco: > Hi, > >> On 6 Feb 2018, at 12:07, Tweety <[hidden email]> wrote: >> >> Dear all, >> >> For my first time, I am trying to solve a differential equation using >> ode45. My code looks like this: >> >> clear; clc; >> t = linspace(0,400,401); >> x0 = [0, 0]; >> function f = dx(x,t) >> M = 2.933e-5; >> m = 0.158; >> n = 1.26; >> dx = M*x^m(1-x)^n; >> endfunction >> [t,x] = ode45(@dx, t, x0); >> >> The error I get is a dimension mismatch and I do not understand a >> mismatch between which parameters. >> >> Can this function be solved by ode45 at all or should I use a different >> solver or bring the function to a different form? If so, which? I >> appreciate any kind of information. > > There are so many errors in the few lines of code above that it is quite > difficult to understand what actually is the proble that you are trying to > solve, maybe it would be easier to understand what you are trying to accomplish > if you write in formulas rather than in code. > > Is this some sort of homework? > > We usually don't solve homework questions on this list, but we do answer specific > questions about the usage of octave functions. > >> Thanks, >> Jan > > c. > > ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 I am having difficulty parsing `dx = M*x^m(1-x)^n;`. What does it mean? I'd add more brackets for clarity. ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 On 02/06/18 21:15, Svetlana Tkachenko wrote: > I am having difficulty parsing `dx = M*x^m(1-x)^n;`. What does it mean? I'd add more brackets for clarity. > As stated before,  m(1-x) can mean either a function call or the 1-x th element of m. I believe you want m*(1-x). Look at 'help function' Tom Dean ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 In reply to this post by Svetlana Tkachenko-2 Hello, sorry for the confusion. Yes, what I meant was dx/dt = M*(x^m)*(1-x)^n From my original post it became clear that M, m and n are constants. When I let octave run on below code, I now get warning: dx: some elements of return values are undefined. error: ode45 [...] dimension mismatch Still do not understand, t has been defined globally and in my thinking x is supposed to be the outcome of ode45? If I define x = zeros(101,1) within the function as seen in some examples on the internet, I get a message on nonconformant arguments (op1 is 101x1, op2 is 101,1). The dimensions of which variables must match? Thanks, Jan clear; clc; t = linspace(0,400,101); x0 = [0, 0]; function f = dx(x,t) M = 2.933e-5; m = 0.158; n = 1.26; dx = M*(x.^m)*(1-x).^n; endfunction [t,x] = ode45(@dx, t, x0); Am 07.02.2018 um 06:15 schrieb Svetlana Tkachenko: > I am having difficulty parsing `dx = M*x^m(1-x)^n;`. What does it mean? I'd add more brackets for clarity. > ----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------
Open this post in threaded view
|

## Re: ode45 issue: dimension mismatch

 Tweetman wrote > Hello, sorry for the confusion. Yes, what I meant was > dx/dt = M*(x^m)*(1-x)^n If the initial value is x(0)=0 then your ODE will only have the trivial solution x=0. Tweetman wrote > clear; clc; > t = linspace(0,400,101); > x0 = [0, 0]; > function f = dx(x,t) > M = 2.933e-5; > m = 0.158; > n = 1.26; > dx = M*(x.^m)*(1-x).^n; > endfunction > [t,x] = ode45(@dx, t, x0); * I suggest to use a anonymous function, see https://www.gnu.org/software/octave/doc/v4.2.0/Anonymous-Functions.html* Your initial value as two components but it is a scalar ode Try this: t = linspace(0,400,101); x0 = 0; M = 2.933e-5; m = 0.158; n = 1.26; dx = @(t,x) ( M*(x.^m)*(1-x).^n ); [t,x] = ode45(dx, t, x0); plot(t,x) and enjoy the zero function :) Seb. -- Sent from: http://octave.1599824.n4.nabble.com/Octave-General-f1599825.html----------------------------------------- Join us March 12-15 at CERN near Geneva Switzerland for OctConf 2018.  More info: https://wiki.octave.org/OctConf_2018-----------------------------------------