由尺寸引起的ode15i错误,这是什么意思?

问题描述 投票:0回答:1

t0 = 0;
tfinal = 1;
tspan = [t0 tfinal];

optionsII = odeset('Events',@myEventsFcnII);

y0 = [-0.5972 6.2068];
yp0 = 10000*[0.0006 1.0178];


[t,y,te,ye,ie] = ode15i(@(t,y,yp) StateII(t,y,yp),tspan,y0,yp0,optionsII);

function res = StateII(t,y,yp)
% Constants
mB = 4.5*10^(-3); % [kg]
g = 9.81; % [m/s^2]
JB = 7*10^(-7); % [kgm]
rS = 3.1*10^(-3); % [m]
r0 = 2.5*10^(-3); % [m]
hS = 2*10^(-2); % [m]
lG = 1.5*10^(-2); % [m]
cp = 5.6*10^(-3); % [N/rad]

% y = (b,bv)

A = JB+mB*lG^2;
B = cp*(-(rS-r0)/hS)-mB*lG*g; % State II

res = [yp(1)-y(2);
       yp(2)-1/A*(B-cp*y(1))];
end

function [value,isterminal,direction] = myEventsFcnII(t,y,yp)
% Constants
mS = 3*10^(-4); % [kg]
mB = 4.5*10^(-3); % [kg]
g = 9.81; % [m/s^2]
rS = 3.1*10^(-3); % [m]
lS = 10^(-2); % [m]
r0 = 2.5*10^(-3); % [m]
hS = 2*10^(-2); % [m]
lG = 1.5*10^(-2); % [m]
lB = 2.01*10^(-2); % [m]
hB = 2*10^(-2); % [m]
cp = 5.6*10^(-3); % [N/rad]

Z2 = -(mS+mB)*g-mB*lG*yp(2);
Z1II = (cp*(y(1)+(rS-r0)/hS)-rS*Z2-mB*lS*lG*yp(2)-mB*lS*g)/hS;

value = [Z1II];
isterminal = [1];
direction = [-1];
end

错误信息

Unable to perform assignment because the size of the left side is 2-by-1 and the size of the right side is 2-by-2.

Error in ode15i (line 241)
meshsol(:,2) = y0 - h*yp0;

Error in sally (line 11)
[t,y,te,ye,ie] = ode15i(@(t,y,yp) StateII(t,y,yp),tspan,y0,yp0,optionsII);

我的Matlab版本是2018a。我不知道问题是什么,我的矢量y0yp0的尺寸是相同的,所以ode15i不应该引起它的错误。 ode45以前工作过,但是我需要使用ode15i来解决这个系统,因为我有一个依赖于速度的事件函数。我该如何解决这个问题?我的代码中的问题在哪里?

matlab ode
1个回答
0
投票

我正在使用Matlab 2016a,所以我无法明确确认这将有效。如果我使用你的代码,我会收到一个错误。如果我将y0和yp0的定义更改为列向量而不是行向量,那么我没有得到任何错误。如此:

y0 = [-0.5972 6.2068]';
yp0 = 10000*[0.0006 1.0178]';
© www.soinside.com 2019 - 2024. All rights reserved.