Resolvendo um ODE quando a function é dada como valores discretos -matlab-

Eu tenho o seguinte ODE:

x_dot = 3*x.^0.5-2*x.^1.5 % (Equation 1) 

Eu estou usando o ode45 para resolvê-lo. Minha solução é dada como um vetor de dim (kx 1) (geralmente k = 41, que é dado pelo tspan ).

Por outro lado, fiz um modelo que aproxima o modelo de (1), mas para comparar quão preciso é esse segundo modelo, quero resolvê-lo (resolver o segundo ODE) por meio de ode45 . Meu problema é que esse segundo ode é dado de forma discreta:

 x_dot = f(x) % (Equation 2) 

f é uma function discreta e não contínua como em (1). Os valores que tenho para f são:

 0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725 

O que eu quero agora é resolver este segundo ode usando ode45 . Espero obter uma solução muito semelhante à de (1). Como posso resolver um ode discreto aplicando o ode45 ? É possível usar o ode45 ? Caso contrário, posso utilizar o Runge-Kutta mas quero ser justo ao comparar os dois methods, o que significa que tenho de os resolver da mesma forma.

Você pode usar interp1 para criar uma function de tabela de consulta interpolada:

 fx = [0.5644 0.6473 0.7258 0.7999 0.8697 0.9353 0.9967 1.0540 1.1072 1.1564 ... 1.2016 1.2429 1.2803 1.3138 1.3435 1.3695 1.3917 1.4102 1.4250 1.4362 ... 1.4438 1.4477 1.4482 1.4450 1.4384 1.4283 1.4147 1.3977 1.3773 1.3535 ... 1.3263 1.2957 1.2618 1.2246 1.1841 1.1403 1.0932 1.0429 0.9893 0.9325 0.8725]; x = 0:0.25:10 f = @(xq)interp1(x,fx,xq); 

Então você deve ser capaz de usar o ode45 como normal:

 tspan = [0 1]; x0 = 2; xout = ode45(@(t,x)f(x),tspan,x0); 

Note que você não especificou quais valores de x sua function ( fx aqui) é avaliada, então eu escolhi de zero a dez. Você também não desejará usar os valores de cópia e colagem da janela de comando, é claro, porque eles têm apenas quatro casas decimais de precisão. Note também que, como o ode45 exigiu as inputs t e x , criei uma function anônima separada usando f , mas f pode ser criada com uma input t não utilizada, se desejado.