Problem in nested function
显示 更早的评论
While I trying to make a routine with nested function as shown below
function [ resobj ] = plot4Paper(data_choice, prgms, fitcases, ~)
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
q = [-5 5 0.1];
ndays = 5;
nprgms = numel(prgms);
npset = numel(fitcases);
if npset == nprgms, disp('No matches found'); end
ibest = zeros(npset,0);
for i = 1:nprgms
prgm = prgms(i);
nparam = FMvariants_cont( prgm );
icase = fitcases(i);
[dirGraph, RName, Filein, ~, FileOut] = drawer(data_choice, prgm);
data = getdata(Filein); data = data(:);
ndata = numel(data);
[p, itn] = paramget(FileOut, nparam, 4, icase);
ibest(i,1) = itn;
resobj.data = data;
dataR = load(['Data\' RName '.rdata']);
resobj.dataR = dataR;
resobj.nparam{i} = nparam;
resobj.prggm{i} = prgm;
resobj.pbest{i} = p;
resobj.bestcase{i} = ibest(i);
dy = getprojection(p, prgm, ndata);
dy = stat_moving(dy, ndays);
resobj.dy{i} = dy;
resobj.stats{i} = statsummary(data, dataR, dy, q, '');
end
dys = zeros(ndata, nprgms);
dys(:,1) = resobj.data;
for i = 1:nprgms
dys(:,i+1) = resobj.dy{i};
end
resobj.dys = dys;
maxpk = max(max(resobj.dys));
resobj.normdata = dys/maxpk;
for i = 1:nprgms
if i == 1
prt = 'Y';
else
prt = '';
end
f = plotdatady(dys(:,1), dys(:,i+1), prt);
end
function dy = getprojection(p, prgm, ndata)
p; ndata;
expr = ['dy = fm_model_' int2str(prgm) '(p, ndata);'];
eval(expr);
end
function f = plotdatady(X, Y, A)
ndata = numel(X);
f = figure();
dyplot= subplot(1,3,[1 2]);
hold on
plot(1:ndata,X,'Color', zeros(1,3), 'LineWidth',1.0);
plot(1:ndata,Y,'Color',gr*ones(1,3));
hold off
set(dyplot,'FontSize',28)
set(gca,'Xtick',[1 ndata]);
set(gca,'Xlim',[1 ndata]);
set(gca,'TickLength',[0 0]);
set(gca,'Ytick',[0 1]);
set(gca,'Ylim',[-0.05 1]);
t1 = title(Tlabel);
set(t1, 'FontSize',32);
box on
cumplot = subplot(1, 3, 3);
cumR=cumsum(X);
cumP=cumsum(Y);
plot(1:ndata,cumR,'Color', zeros(1,3), 'LineWidth',1.0);hold
plot(1:ndata,cumP,'Color',gr1*ones(1,3));hold; hold on
Lc = min(min(cumR), min(cumP));
Uc = max(max(cumR), max(cumP));
fitline = linspace(Lc, Uc, ndata); fitline=fitline(:);
plot(fitline, '-k'); hold
set(cumplot,'FontSize',28)
set(gca,'Xtick',[0 ndata]);
set(gca,'Xlim',[0 ndata]);
set(gca,'TickLength',[0 0]);
set(gca,'Ytick',[0 1]);
set(gca,'Ylim',[-0.05 1]);
if A == 'Y'
t0 = title('Accumulated');
set(t0, 'FontSize',32);
end
box on
end
I got an error message like *"Error: File: plot4Paper.m Line: 94 Column: 4 The function "plotdatady" was closed with an 'end', but at least one other function definition was not. To avoid confusion when using nested functions, it is illegal to use both conventions in the same file." Could you please help me to solve this problem Thanks in advance
采纳的回答
更多回答(1 个)
Walter Roberson
2015-5-30
The "end" that you have right before
function dy = getprojection(p, prgm, ndata)
is matching the "for".
You need to add another "end" before that "function" statement.
类别
在 帮助中心 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!