Approximating parameters with ODE, error using vertcat dimesions of arrays being concatenated are not consistent
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi guys, I have a project to approximate a function with radial basis function, basically I want to approximate the parameters of radial basis function. We are talking about dynamic learning and I have 14 differential equations to solve, dx/dt, dx_approx/dt, dtheta_1/dt...dtheta_12/dt. I am trying to use ode45 or ode23 to solve this differential equations and approximate the thetas. However, when I am using ode either 23 or 45 I am getting this error:
"Error using vertcat
Dimensions of arrays being concatenated are not consistent.
[t,x]=ode45(@(t,x) [f(t,x(1),sin(t));dxdt_approx(t,x(2),sin(t),x(3:end))],tspan,[x0, x0*ones(1,num_RBF)],...
f0 = ode(t0,y0,args{:}); % ODE15I sets args{1} to yp0.
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);"
Can anyone pinpoint what I am doing wrong? Here is my code.
xmin=-1; xmax=1;
% Width
n=0.4;
% Number centers
num_RBF=12;
c=(xmin:(xmax-xmin)/(num_RBF-1):xmax);
% Gradient descent algorithm to update the weights
gamma=0.1;
theta=rand(1,num_RBF);
am=1;
sigma=0.4;
% Define the dynamical system
f=@(t,x,u) (sin(3.3*x)-0.7*x.*(9+x.^2))./(0.5*(8+x.^2))+u;
x0=-0.3; % initial condition
tspan=[0 20];
%RBF approximation function
fhat=@(x,theta) sum(theta.*exp(-((x-c).^2)./sigma^2));
%differential equation for the approximation
dxdt_approx=@(t,x,u,theta) -am.*x+am.*fhat(x,theta)+am*u;
%derivative of the approximation weights
dtheta_approx=@(x,x_approx,theta,gamma,e) gamma.*e.exp(-((x-c).^2)./sigma^2).(x-x_approx);
% Define the error filter
Z=zeros(num_RBF,2);
for i=1:num_RBF
Z(i,1)=exp(-((xmin-c(i)).^2)./sigma^2);
Z(i,2)=exp(-((xmax-c(i)).^2)./sigma^2);
end
[t,x]=ode45(@(t,x) [f(t,x(1),sin(t));dxdt_approx(t,x(2),sin(t),x(3:end))],tspan,[x0, x0*ones(1,num_RBF)],...
odeset('RelTol',1e-6,'AbsTol',1e-6));
% Plot the true and estimated output
figure; hold on;
plot(t,x(:,1),'linewidth',2);
plot(t,x(:,2),'linewidth',2);
legend('x','x_approx','fontsize',14);
xlabel('Time','fontsize',14);
0 commentaires
Réponses (1)
Torsten
le 25 Fév 2023
If you debug your code, you will see that c has dimension 1x12 while theta has dimension 1x11 in the function "fhat".
Thus
theta.*exp(-((x-c).^2)
cannot be evaluated.
0 commentaires
Voir également
Catégories
En savoir plus sur Ordinary Differential Equations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!