Matlab 试图访问sym(67);索引超出范围,因为numel(sym)=2

Matlab 试图访问sym(67);索引超出范围,因为numel(sym)=2,matlab,Matlab,我收到以下错误消息: 试图访问sym(67);索引超出范围,因为numel(sym)=2 我已经做了三天了。我寻找类似的错误,但没有帮助。我的代码如下: filename='DriveCyclesCP.xlsx'; V=xlsread('DriveCyclesCP.xlsx',2,'C9:C774'); % Get the velocity values, they are in an array V. N=length(V); % Find out how

我收到以下错误消息:

试图访问sym(67);索引超出范围,因为numel(sym)=2

我已经做了三天了。我寻找类似的错误,但没有帮助。我的代码如下:

filename='DriveCyclesCP.xlsx';
V=xlsread('DriveCyclesCP.xlsx',2,'C9:C774'); % Get the velocity values, they are in an   array V.
N=length(V);                  % Find out how many readings
mass = 1700 ;                 % Vehicle mass+ two 70 kg passengers.
area_Cd = 0.75;               % Frontal area in square metres
Crr=0.009;                    %rolling resistance
g=9.8;                        % gravity acceleration
T=774;                        %UDDS cycle time duration
V_ave = 21.5;                 % UDDS avearage speed im m/s
rd=0.3;                       % Effective tire radius
Qhv =12.22;                   % E85 low Heating value in kWh/kg
Vd = 2.189;                     % engine size in L 
md=0.801;                     %  mass density of Ethanol
mf =Vd*md;                    % mf is the fuel mass consumed per cycle

Per = zeros(1,N);             % engine power for each point of the drive cycle
a = zeros(1,N);               % acceleration 
SFC = zeros(1,N);             % specific fuel consumption
Wc = zeros (1,N);            % mass flow rate
nf = zeros (1,N);             %fuel efficiency
Pm = zeros (1,N);            % motor power
Pt = zeros (1,N);
Te =zeros (1,N);              % Engine Troque
Tt = zeros (1,N);
Tm =zeros (1,N);
we =zeros (1,N);              % Engine rot speed
wt = zeros (1,N);
wm =zeros (1,N);
S =zeros (1,8);
int (sym ('C'));

for C=1:N
    a(C)=V(C+1)-V(C);
    Pt(C)= V(C)*(mass*g*Crr + (0.5*area_Cd*1.202*(V(C))^2) + mass*a(C))/1000; 
    Per(C)=(mass*g*Crr +0.5*area_Cd*1.202*(V(C))^2 +mass*g*0.03)/1000*0.85;% e

    syms Te(C) Tt(C) Tm(C) wt(C) we(C) wm(C) k1 k2

    S = solve( Pm(C)==Pt(C) - Per(C), Tt(C)*wt(C)== Pt(C), Tt(C)*wt(C)==  Te(C)*we(C) +      Tm(C)*wm(C), wt(C)==we(C)/k1,  wt(C)==wm(C)/k2, Pm(C)==wm(C) *Tm(C), Per(C)==we(C) *Te(C), Tt == k1*Te + k2*Tm );

end

问题就在眼前

int (sym ('C'));
您已将
sym
定义为一个在某处有2个条目的矩阵(在代码之前或之前的mfile中),因此它将
sym
视为一个矩阵而不是一个函数。因此,当Matlab到达语句
sym('C')
时,它首先将字符
'C'
转换为其整数表示形式(正好是数字67),然后它尝试计算
sym(67)
,这是不可能的,因为
sym
只有2个元素

因此,您必须停止
sym
成为矩阵(变量),让它再次成为函数。有两种方法可以解决这个问题,或者您可以用语句
clear启动文件,这将删除内存中的所有变量,这可能不是您想要的;或者您可以使用,因为这会隐藏以前定义的所有变量并防止此类错误

注意,
numel(X)
行是一种测量
X
中有多少元素的方法。因此
numel(sym)=2意味着
sym
有2个元素

注意,这些行中有一个错误(注意,我只取了您代码中的一些行)


C
等于
N
时,
V(C+1)
将生成一个错误。

哪个符号的输出是什么?
这一行的要点是什么:
int(sym('C')?整个错误消息是什么,即它发生在哪一行?
N=length(V);                  % Find out how many readings
for C=1:N
    a(C)=V(C+1)-V(C);
end