recieving error within ODE45: Input arguments to function include colon operator. To input the colon character, use ':' instead.
Show older comments
My code is meant to measure the oscilating path of a pendulum given a series of diferential equations and initial conditions, then the plot the phase plots of the results. However i seem to run into the same error when running the code, the full error message reads: Input arguments to function include colon operator. To input the colon character, use ':' instead.
Error in odearguments (line 75)
y0 = y0(:);
Error in ode45 (line 107)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
Error in lab9main (line 46)
[time, sol] = ode45(pos1, [0 tf], angle, opt1);
hope someone can help! thanks!
clc; clear; close all;
fprintf("Nathan Koch\nProject 9\nPendulum project");
datetime("today")
L = 4.5; %meters
Dtheta_0 = 0; %d(theta_0)
theta_0 = pi / 5.5;
g = 9.81; %m/s
k0 = sin(0.5*theta_0); %parameter of k;
C1 = 0; %drag coef case 1
C2 = 0.25; %drag coef case 2
T = @(k,x) 4*sqrt(L/g)*(1./sqrt(1-k.^2*sin(x).^2));%function of k and theta
T0 = @(x) 4*sqrt(L/g)*(1./sqrt(1-k0^2 * sin(x).^2)); %function of theta where k = k0
q = quadgk(T0,0,pi/2); %report value of integral from bounds
fprintf("\n\nthe value of the integral is %.4f\n\n",q);
%define general equation and initial conditions for use:
angle = @(t) theta_0 + t;
pos1 = @(angle,x) -g/L * sin(angle) - C1*x*abs(x); %second derivative of theta wrt t for case 2
pos2 = @(angle,x) -g/L * sin(angle) - C2*x*abs(x); %second derivative of theta wrt t for case 2
tspan = 0:200;%vector of sample points
tx = 0:0.1:20; %refined points on vector
%Case 1 no drag Cd = 0;
tol = [1e-3, 1e-6];
tf = 200;
print_time = [0, 82.65, 200];
%euler-ing my complex equations
for i = 1:length(tol)
fprintf("using tolerance of %.3e\n",tol(i))
for j = 1:length(print_time)
fprintf("at time step %.2f",print_time(j))
opt1 = odeset("RelTol",tol(j),"AbsTol",tol(j));
[time, sol] = ode45(pos1, [0 tf], angle, opt1);
L1 = interp1(time,sol,print_time(j));
fprintf("ODE45: %.4f at t = %.4f\n",L1,print_time(j));
end
fprintf("\n")
end
for N = 1:length(tol)
fprintf("using tolerance of %.3e\n",tol(N));
for M = 1:length(print_time)
opt2 = odeset("RelTol",tol(M),"AbsTol",tol(M));
[time, sol] = ode45(pos2, [0 tf], angle, opt2);
L2 = interp1(time,sol,print_time(M));
fprintf("ODE45: %,4f at t = %.4f\n",L2,print_time(M));
end
fprintf("\n")
end
%Plot the Phase plots for cases 1 and 2
figure(1)
plot(tspan,thet1,'o', tspan,dtheta1,':.')
xlim([0 200])
ylim([0 20])
title('Plot of Oscilations for non linear pendulum (case 1)')
figure(2)
plot(tspan,thet2,'o',tspan,dtheta2,':.')
xlim([0 200])
ylim([0 20])
title('Plot Oscilations for non linear pendulum (case 2)')
Accepted Answer
More Answers (0)
Categories
Find more on Ordinary Differential Equations in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!