MATLAB: Second Order ODE solved with ODE45

2 order odeode45

Hi!
I am struggling with the task to solve a 2'nd order Ode with ODE45. Please help as I'm struggling with this.
Equation as given in the task:
y'' + pi*y^(x/3)*(2y' sin pi*x + pi*y cos pi*x) − y/9 = 0, y(0) = and y'(0) = -⅓
My code:
%Lab 2 uppgift 3
clear all
close all
clc
[t,y] = ode45(@odefun, t, [0, 2.5], [1, -1/3]);
plot(t,y(:,1),'-',t,y(:,2),'--')
title('Title');
xlabel('time t');
ylabel('solution y');
legend('y_1','y_2')
%The function called odefun.
function [dydx] = odefun(t,y)
%x = (0:0.1:2.5);
dydt=[y(2); pi*y(1).*exp(x/3)*2*y(2)*sin(pi*x) + x*y(1)*cos(pi*x) - (y(1)./9)x];
end
Thanks! /Henrik

Best Answer

Your equation implies (to me) that y is a function of x, not t. So your function should probably be:
function [dydx] = odefun(x,y)
Also, there is an error in this line at the very end:
dydt=[y(2); pi*y(1).*exp(x/3)*2*y(2)*sin(pi*x) + x*y(1)*cos(pi*x) - (y(1)./9)x];
You might want:
dydt=[y(2); pi*y(1).*exp(x/3)*2*y(2)*sin(pi*x) + x*y(1)*cos(pi*x) - (y(1)./9).*x];
or some other operator, since MATLAB will throw an error without an operator there.
When I ran it (with the change in the function line, vectorising, and putting a multiplication operator before the x at the end, it ran.