Help needed with a matlab code - end missing.
조회 수: 18 (최근 30일)
이전 댓글 표시
I wanted to use the code from a paper to calculate the marginal tax rate. Tried using it this is the main error that pops up: "159 An END might be missing, possibly matching FUNCTION". Could somoene help me fix this?
The code is from Sinha, Pankaj & Bansal, Vishakha. (2012). Algorithm for calculating corporate marginal tax rate using Monte Carlo simulation.
Here is the code:
function varargout = program(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @program_OpeningFcn, ...
'gui_OutputFcn', @program_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function program_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = program_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles)
function edit1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit2_Callback(hObject, eventdata, handles)
function edit2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton1_Callback(hObject, eventdata, handles)
J=get(handles.edit1,'String');
J=str2double(J);
Y=get(handles.edit2,'String');
Y=str2double(Y);
[num] = xlsread('income.xlsx');
p=num(1,:);
Ntemp=length(p);
N=Ntemp+2*J;
p=diff(p);
mu=mean(p);
sig=std(p);
[num] = xlsread('tr.xlsx');
tr=num(1,:);
temp=tr(Ntemp)*ones(1,2*J);
tr=[tr temp];
[num] = xlsread('amt.xlsx');
amt=num(1,:);
temp=amt(Ntemp)*ones(1,2*J);
amt=[amt temp];
[num] = xlsread('rr.xlsx');
rr=num(1,:);
temp=rr(Ntemp)*ones(1,2*J);
rr=[rr temp];
p=zeros(1,N);
mtr=zeros(1,N-J);
sum=zeros(1,N-J);
for z=1:10000
p=randn(1,N);
p=mu+sig*p;
p=cumsum(p);
n=b(p,tr,amt,J,N);
for i=1:N-J
pnew=p;
pnew(i)=pnew(i)+1;
nnew=b(pnew,tr,amt,J,N);
npv=n(i);
nnewpv=nnew(i);
for j=i+1:N
r=1;
for k=i:(j-1)
r=r/(1+rr(k)/100);
end
npv=npv+n(j)*r;
nnewpv=nnewpv+nnew(j)*r;
end
mtr(i)=(nnewpv-npv)*100;
end
sum=sum+mtr;
end
sum=sum/10000;
years=linspace(Y,Y+N-J-1,N-J);
xlswrite('output_algo1.xlsx',years,'A1:CV1');
xlswrite('output_algo1.xlsx',sum,'A2:CV2');
function pushbutton2_Callback(hObject, eventdata, handles)
J=get(handles.edit1,'String');
J=str2double(J);
Y=get(handles.edit2,'String');
Y=str2double(Y);
[num] = xlsread('income.xlsx');
p=num(1,:);
Ntemp=length(p);
N=Ntemp+2*J;
pp=diff(p);
mu=mean(pp);
sig=std(pp);
[num] = xlsread('tr.xlsx');
tr=num(1,:);
temp=tr(Ntemp)*ones(1,2*J);
tr=[tr temp];
[num] = xlsread('amt.xlsx');
amt=num(1,:);
temp=amt(Ntemp)*ones(1,2*J);
amt=[amt temp];
[num] = xlsread('rr.xlsx');
rr=num(1,:);
temp=rr(Ntemp)*ones(1,2*J);
rr=[rr temp];
pp=zeros(1,N);
mtr=zeros(1,N-J);
for i=1:N-J
for z=1:10000
pp=randn(1,N);
pp=mu+sig*pp;
pp=cumsum(pp);
if(i<=Ntemp)
pp=[p(1:i) pp((i+1):N)];
end
n=b(pp,tr,amt,J,N);
pp(i)=pp(i)+1;
nnew=b(pp,tr,amt,J,N);
npv=n(i);
nnewpv=nnew(i);
for j=i+1:N
r=1;
for k=i:(j-1)
r=r/(1+rr(k)/100);
end
npv=npv+n(j)*r;
nnewpv=nnewpv+nnew(j)*r;
end
mtr(i)=mtr(i)+(nnewpv-npv)*100;
end
end
mtr=mtr/10000;
years=linspace(Y,Y+N-J-1,N-J);
xlswrite('output_algo2.xlsx',years,'A1:CV1');
xlswrite('output_algo2.xlsx',mtr,'A2:CV2');
function edit3_Callback(hObject, eventdata, handles)
function edit3_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton3_Callback(hObject, eventdata, handles)
J=get(handles.edit1,'String');
J=str2double(J);
Y=get(handles.edit2,'String');
Y=str2double(Y);
JJ=get(handles.edit3,'String');
JJ=str2double(JJ);
[num] = xlsread('income.xlsx');
p=num(1,:);
Ntemp=length(p);
N=Ntemp+2*J;
p=diff(p);
mu=mean(p);
sig=std(p);
[num] = xlsread('tr.xlsx');
tr=num(1,:);
temp=tr(Ntemp)*ones(1,2*J);
tr=[tr temp];
[num] = xlsread('amt.xlsx');
amt=num(1,:);
temp=amt(Ntemp)*ones(1,2*J);
amt=[amt temp];
[num] = xlsread('rr.xlsx');
rr=num(1,:);
temp=rr(Ntemp)*ones(1,2*J);
rr=[rr temp];
p=zeros(1,N);
mtr=zeros(1,N-J);
sum=zeros(1,N-J);
for z=1:10000
p=randn(1,N);
p=mu+sig*p;
p=cumsum(p);
n=bb(p,tr,amt,J,N,JJ);
for i=1:N-J
pnew=p;
pnew(i)=pnew(i)+1;
nnew=bb(pnew,tr,amt,J,N,JJ);
npv=n(i);
nnewpv=nnew(i);
for j=i+1:N
r=1;
for k=i:(j-1)
r=r/(1+rr(k)/100);
end
npv=npv+n(j)*r;
nnewpv=nnewpv+nnew(j)*r;
end
mtr(i)=(nnewpv-npv)*100;
end
sum=sum+mtr;
end
sum=sum/10000;
years=linspace(Y,Y+N-J-1,N-J);
xlswrite('output_carryback_algo1.xlsx',years,'A1:CV1');
xlswrite('output_carryback_algo1.xlsx',sum,'A2:CV2');
function pushbutton4_Callback(hObject, eventdata, handles)
J=get(handles.edit1,'String');
J=str2double(J);
Y=get(handles.edit2,'String');
Y=str2double(Y);
JJ=get(handles.edit3,'String');
JJ=str2double(JJ);
[num] = xlsread('income.xlsx');
p=num(1,:);
Ntemp=length(p);
N=Ntemp+2*J;
pp=diff(p);
mu=mean(pp);
sig=std(pp);
[num] = xlsread('tr.xlsx');
tr=num(1,:);
temp=tr(Ntemp)*ones(1,2*J);
tr=[tr temp];
[num] = xlsread('amt.xlsx');
amt=num(1,:);
temp=amt(Ntemp)*ones(1,2*J);
amt=[amt temp];
[num] = xlsread('rr.xlsx');
rr=num(1,:);
temp=rr(Ntemp)*ones(1,2*J);
rr=[rr temp];
pp=zeros(1,N);
mtr=zeros(1,N-J);
for i=1:N-J
for z=1:10000
pp=randn(1,N);
pp=mu+sig*pp;
pp=cumsum(pp);
if(i<=Ntemp)
pp=[p(1:i) pp((i+1):N)];
end
n=bb(pp,tr,amt,J,N,JJ);
pp(i)=pp(i)+1;
nnew=bb(pp,tr,amt,J,N,JJ);
npv=n(i);
nnewpv=nnew(i);
for j=i+1:N
r=1;
for k=i:(j-1)
r=r/(1+rr(k)/100);
end
npv=npv+n(j)*r;
nnewpv=nnewpv+nnew(j)*r;
end
mtr(i)=mtr(i)+(nnewpv-npv)*100;
end
end
end
mtr=mtr/10000;
years=linspace(Y,Y+N-J-1,N-J);
xlswrite('output_carryback_algo2.xlsx',years,'A1:CV1');
xlswrite('output_carryback_algo2.xlsx',mtr,'A2:CV2');
Function for calculating tax with only carry forward losses :
function [n] = b(p,tr,amt,J,N)
v=p;
c=zeros(1,J);
l=zeros(1,N);
for i=1:N
for j=J:-1:1
c(j+1)=c(j);
end
c(1)=0;
if(v(i)<=0)
c(1)=v(i);
v(i)=0;
else
for j=J+1:-1:1
if(c(j)<0)
if(-c(j)>=v(i))
c(j)=c(j)+v(i);
if(p(i)>0)
l(i)=p(i);
end
v(i)=0;
else
v(i)=c(j)+v(i);
c(j)=0;
end
end
end
end
end
for i=1:N
if(l(i)==0 && p(i)>0)
l(i)=p(i);
end
end
v=(v.*tr)/100;
l=(l.*amt)/100;
n=max(v,l);
end
Function for calculating tax with both carry forward & backward losses :
function [n] = bb(p,tr,amt,J,N,JJ)
v=p;
c=zeros(1,J);
l=zeros(1,N);
bck=zeros(1,JJ);
for i=1:N
if(v(i)<0)
for j=1:JJ
if(-v(i)>bck(j))
v(i)=v(i)+bck(j);
bck(j)=0;
else
bck(j)=bck(j)+v(i);
v(i)=0;
end
end
end
for j=J:-1:1
c(j+1)=c(j);
end
c(1)=0;
if(v(i)<=0)
c(1)=v(i);
v(i)=0;
else
for j=J+1:-1:1
if(-c(j)>=v(i))
c(j)=c(j)+v(i);
if(p(i)>0)
l(i)=p(i);
end
v(i)=0;
else
v(i)=c(j)+v(i);
c(j)=0;
end
end
end
for j=1:(JJ-1)
bck(j)=bck(j+1);
end
if(l(i)==0 && p(i)>0)
l(i)=p(i);
end
v(i)=v(i)*tr(i)/100;
l(i)=l(i)*amt(i)/100;
n(i)=max(v(i),l(i));
if(v(i)==n(i))
bck(JJ)=100*v(i)/tr(i);
else
bck(JJ)=0;
end
end
end
댓글 수: 1
Kevin Phung
2019년 1월 29일
편집: Kevin Phung
2019년 1월 29일
'an END might be missing'
I would check my ends..or since you arent ending your functions, check to see if youve accidentally ended one of them. I believe you need to be consistent
also please dont post your entire 1000 lined function but instead attach them as files.
답변 (1개)
Luna
2019년 1월 29일
I haven't seen such a badly written code ever since in my life. How they put that in a paper?
Zero comments, too many nested functions and nested for loops. First it must needed to be understood that if b and bb functions are written nested in a purpose.
Also program.fig does not exist how do you expect to run this app?
I have deleted 3 ends in some lines in the new code attached. There are no global variables anymore.
But you still again need to check it if it works.
댓글 수: 2
Bismark
2023년 5월 26일
@Luna can please share your email with me? i need assistance to with my code please
참고 항목
카테고리
Help Center 및 File Exchange에서 Spline Postprocessing에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!