Function input and outputs , variable error, concatenation

3 views (last 30 days)
I am relatively new to MATLAB and I am having some issues with using a function. I am including the code below and will direct you step by step "in parentheses".
"I want my function to work on many files from a folder set of data I have."\
wd='C:\Users\jcb212\Desktop\Pair 3\';
IVlist=dir([wd '*IV*.mat']);
temp=[]; bigarray=[];
for i = 1:length(IVlist)
LD=load([wd IVlist(i).name]);
data=LD.data;
temp=onerunoneIV;
bigarray=[bigarray;temp];
end
"I want each file (i) to be loaded into the loop and run with the function I created. Then I am trying to concatenate all the outputs to an array that I can plot (bigarray) To save on space and reading I will only include the beginning and end of my function."
function [CC12x,CC21x,Rrest1x,Rrest2x,Rin1x,Rin2x,V_rest1x,V_rest2x]=onerunoneIV(i)
output= vertcat (CC12x,CC21x,Rrest1x,Rrest2x,Rin1x,Rin2x,V_rest1x,V_rest2x);
end
"I define all outputs within my function. The error message it gives me = Undefined function or variable "data". I thought I had already named this variable just before I called the function. The variable data is a 22000x4x16 array and I want to call on it in the function. If i need to call it in the function then how to I call my IVlist(i)....any help would be great!"

Answers (2)

Walter Roberson
Walter Roberson on 10 Jun 2013
Your function onerunoneIV expects to be passed a value "i". However because you do not use "i" inside the code, the fact that you do not pass "i" in your call to the function will not cause any error in practice.
Your function onerunoneIV expects to use 8 different variables. Unfortunately it does not create those variables and does not have them passed in, and they are not in any nested scope, so the program will crash when it tries to do the vertcat().
If, somehow, the vertcat() succeeded, you would create a variable named "output". That is not one of the variables listed on the left-hand side of the "=" for the "function" line, so that variable would be discarded when the function returned.
Your function onerunoneIV expects to create 8 different output variables. Unfortunately it does not create those variables and does not have them passed in, so they will not be available to return any value so the function would crash upon trying to return.
You define 8 different output variables for the function, but you only use a single output variable, which you call "temp". That is legal in MATLAB, but in your case indicates that you do not understand function outputs. Outputs are positional, so "temp" (outside the function) would get assigned the first output from the function, "CC12x"
  1 Comment
Joe
Joe on 10 Jun 2013
Here is my function:
function [CC12, CC21, Rrest1, Rrest2, Rin1, Rin2, V_rest1,... V_rest2, MeanWidth1, MeanWidth2, MeanHeight1, MeanHeight2, ... BurstNum1, BurstNum2]=onerunoneIV(i)
set(gcf,'paperpositionmode','manual') set(gcf,'Paperposition',[.25 .25 8 10.5]) set(gcf,'name','JB Pair Summary')
a17=axes('position',[.1 .10 .3 .8]);% right a18=axes('position',[.5 .10 .3 .8]);% left a19=axes('position',[.1 .87 .38 .13],'visible','off');%top right text(.4,.5,{'Cell 1'},'Fontsize',15); a20=axes('position',[.5 .87 .38 .13],'visible','off');%top right text(.4,.5,{'Cell 2'},'Fontsize',15); a21=axes('position',[.01 .9 .58 .12],'visible','off');%Title text(.4,.7,{'5-16-13, Pair 3 ,JB, Age P10, ST- 0715'},'Fontsize',15);
%load data
%time arrays
dt=50e-6; %50 microseconds
t2=dt*(1:size(data,1));% size(takes how many rows are in the data set), 1:(size) = makes a list of numbers starting from one and counting up to the number of rows. Dt* numbers = 1*dt, 2*dt, 3*dt...
clear vr1 va1 vr2 va2 ir1 ia1 ir2 ia2
Vraw1=mean(data(:,1,1:2:end),3);
vr1= mean(Vraw1(1:975));%average voltage for the first 300 time points (rest). cell 1
va1= mean(Vraw1(end/5:end/5+7800));%average voltage starting at 1/3+300 time points cell 1
Vraw2=mean(data(:,3,2:2:end),3);
vr2= mean(Vraw2(1:975));%average voltage for the first 300 time points (rest). cell 2
va2= mean(Vraw2(end/5:end/5+7800));%average voltage starting at 1/3+300 time points cell 2
Iraw1=mean(data(:,2,1:2:end),3);
ir1= mean(Iraw1(1:975));%average current for the first 300 time points (rest). cell 1
ia1= mean(Iraw1(end/5:end/5+7800));%average current starting at 1/3+300 time points cell 1
Iraw2=mean(data(:,4,2:2:end),3);
ir2= mean(Iraw2(1:975));%average current for the first 300 time points (rest). cell 2
ia2= mean(Iraw2(end/5:end/5+7800));%average current starting at 1/3+300 time points cell 2
deltaV1=mean(vr1)-mean(va1); %change in voltage cell 1
deltaV2=mean(vr2)-mean(va2); %change in voltage cell 2
deltaI1=mean(ir1)-mean(ia1); %Change in current cell 1
deltaI2=mean(ir2)-mean(ia2); %change in current cell 2
Vraw1work=mean(data(:,1,1:2:end)); %active working voltage data points cell 1
Vraw1pass=mean(data(:,1,2:2:end)); %Passive voltage data points cell 1
Vraw2work=mean(data(:,3,2:2:end)); %active voltage data points cell 2
Vraw2pass=mean(data(:,3,1:2:end)); %passive voltage data points cell 2
v1w_deflect=mean(mean(data(end/5:end/5+7800,1,1:2:end)))-mean(mean(data(1:975,1,1:2:end)));
v1p_deflect=mean(mean(data(end/5:end/5+7800,1,2:2:end)))-mean(mean(data(1:975,1,2:2:end)));
v2w_deflect=mean(mean(data(end/5:end/5+7800,3,2:2:end)))-mean(mean(data(1:975,3,2:2:end)));
v2p_deflect=mean(mean(data(end/5:end/5+7800,3,1:2:end)))-mean(mean(data(1:975,3,1:2:end)));
%coupling coefficient
CC12=v2p_deflect/v1w_deflect;
CC21=v1p_deflect/v2w_deflect;
%Resting resistance cell1 and 2
Rrest1=round(vr1/ir1);
Rrest2=round(vr2/ir2);
%Resistance in cell 1 and 2
Rin1=(1000*(deltaV1(deltaV1>1))/(deltaI1(deltaI1>1)));
Rin2=(1000*(deltaV2(deltaV1>2))/(deltaI2(deltaI1>2)));
%Resting voltage
V_rest1=vr1-ir1;
V_rest2=vr2-ir2;
%plotting Cell 1
axes(a17)
plot(a17,t2,squeeze(data(:,1,:))); hold on
%plotting resting V bar plot([dt*1;dt*975],[mean(vr1);mean(vr1)],'k-','markersize',10,... 'linewidth',10); hold on; xlabel (a17, 'Time (ms)') ylabel (a17, 'Voltage (mV)')
a24=axes('position',[.25 .4 .2 .3],'visible', 'off'); hold on; text(.15, .73, [ 'Average V_R_E_S_T = ' num2str(mean(round(V_rest1))) 'mV'],'fontsize',8, 'Color','k'); hold on; text(.15, .61, ['Average R_R_E_S_T = ' num2str(mean(round(Rin1))) 'M\Omega'],'fontsize',8, 'color','k'); hold on;
%cell 2 axes(a18) plot(a18,t2,squeeze(data(:,3,:))); hold on %plotting resting V bar plot([dt*1;dt*975],[mean(vr2);mean(vr2)],'k-','markersize',10,... 'linewidth',10); hold on; xlabel (a18, 'Time (ms)')
a25=axes('position',[.65 .41 .2 .3],'visible', 'off'); hold on; text(.15, .73, [ 'Average V_R_E_S_T = ' num2str(mean(round(V_rest2))) 'mV'],'fontsize',8, 'Color','k'); hold on; text(.15, .61, ['Average R_R_E_S_T = ' num2str(mean(round(Rin2))) 'M\Omega'],'fontsize',8, 'color','k'); hold on;
BurstNum1=[]; BurstNum2=[]; BstNmbr1=[]; BstNmbr2=[]; Firing1=[]; Firing2=[]; Rate1=[]; Rate2=[]; deltaI1=[]; deltaI2=[]; Width1=[]; Width2 = []; Height1=[]; Height2 =[];
for reps = 1:2: size(data,3) %Burst Number, Firing Rate, Width, Height
clear VA Ia Ia0 Ia2 VB Ib Ib0 Ib2 OF OF2 CF CF2 ...
OpenFire OpenFire2 CeaseFire CeaseFire2 HalfHeightA ...
HalfHeightB SpikeWidths SpikeWidths2
Vraw1 = data(:,1,reps);
Vraw2 = data(:,3,reps+1);
Iraw1 = data(:,2,reps);
Iraw2 = data(:,4,reps+1);
Ir1 = mean(Iraw1(1:975));
Ir2 = mean(Iraw2(1:975));
Ia1 = mean(Iraw1((end/5):(end/3+7800)));
Ia2 = mean(Iraw2((end/5):(end/5+7800)));
deltaI1(reps) = Ia1 - Ir1;
deltaI2(reps) = Ia2 - Ir2;
xoo = (Vraw1(1:end-1) < -20 & Vraw1(2:end) >= -20);
Spiketimes=dt*(find(xoo));
zoo = (Vraw2(1:end-1) < -20 & Vraw2(2:end) >= -20);
Spiketimes2=dt*(find(zoo));
BurstNum1(reps) = sum(diff(Spiketimes)<0.01);
BurstNum2(reps) = sum(diff(Spiketimes2)<0.01);
%Count a tick every time the spikes are 10 ms distant
if BurstNum1(reps)>0
BstNmbr1(reps)= BurstNum1(reps)+1; %Burst Number, Cell 1
end
if BurstNum2(reps)>0
BstNmbr2(reps)= BurstNum2(reps)+1; %Burst Number, Cell 2
end
Firing1(reps)= sum (Vraw1(1:end-1) < -20 & Vraw1(2:end) >= -20);
%minor issue because times don't match. works for this though.
Firing2(reps)= sum (Vraw2(1:end-1) < -20 & Vraw2(2:end) >= -20);
%whenever voltage passes 0, count it as 1 tick.
%plot the number of ticks per rep against the change in current
if Firing1(reps)>0 & BurstNum1(reps)>0;
Rate1(reps) = Firing1(reps) - BurstNum1(reps) - 1; %Firing Rate, Cell 1
end
if Firing2(reps)>0 & BurstNum2(reps)>0;
Rate2(reps) = Firing2(reps) - BurstNum2(reps) - 1; %Firing Rate, Cell 2
end
if max(Vraw1)>-10 %Spike Width/Height Loop
%Getting Half-height of the spikes
Vraw1max = max(Vraw1);
Vraw1mean = mean(Vraw1((end/6):(end/6+6000)));
HalfHeight1 = ((Vraw1max - Vraw1mean)/2 + Vraw1mean);
Vraw2max = max(Vraw2);
Vraw2mean = mean(Vraw2((end/6):(end/6+6000)));
HalfHeight2 = ((Vraw2max - Vraw2mean)/2 + Vraw2mean);
Upfire1 = (Vraw1(1:1:end-1) < HalfHeight1 & Vraw1(2:1:end) >= HalfHeight1);
%minor issue because times don't match. works for this though.
Downfire1 = (Vraw1(1:1:end-1)>HalfHeight1 & Vraw1(2:1:end)<HalfHeight1);
Upfire2 = (Vraw2(1:end-1) <HalfHeight2 & Vraw2(2:end) >= HalfHeight2);
Downfire2= (Vraw2(1:end-1)>HalfHeight2 & Vraw2(2:end)<HalfHeight2);
UF1 = dt*(find (Upfire1));
UF2 = dt*(find (Upfire2));
DF = dt*(find(Downfire1));
DF2 = dt*(find(Downfire2));
SpikeWidths = (DF - UF1);
SpikeWidths2 = (DF2 - UF2);
Width1(reps) = 1000*mean(SpikeWidths);
Width2(reps) = 1000*mean(SpikeWidths2);
Height1(reps)= Vraw1max - Vraw1mean;
Height2(reps)= Vraw2max - Vraw2mean;
MeanWidth1(reps)= mean(Width1);
MeanWidth2(reps)=mean(Width2);
MeanHeight1(reps)=mean(Height1);
MeanHeight2(reps)=mean(Height2);
else
Width1(reps)=0;
Width2(reps)=0;
Height1(reps)=0;
Height2(reps)=0;
end
end
a23=axes('position',[.25 .4 .30 .48], 'visible', 'off');hold on; %cell 1 text(.1, .85, ['Spike W: ' num2str(mean(round(Width1)),3) ' ms'], 'FontSize', 9, 'Color', 'k'); text(.1, .75, ['Spike H: ' num2str(mean(round(Height1)),3) 'mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .65, ['Average Burst: ' num2str(mean(round(BstNmbr1)),3) ' mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .55, ['Average Rate: ' num2str(mean(round(Rate1)),3) ' mV'], 'FontSize', 9, 'Color', 'k');
a22=axes('position',[.65 .65 .30 .48], 'visible', 'off'); hold on;
%cell2 text(.1, .35, ['Spike W: ' num2str(mean(round(Width2)),3) 'ms'], 'FontSize', 9, 'Color', 'k'); text(.1, .25, ['Spike H: ' num2str(mean(round(Height2)),3) ' mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .15, ['Average Burst: ' num2str(mean(round(BstNmbr2)),3)], 'FontSize', 9, 'Color', 'k'); text(.1, .05, ['Average Rate: ' num2str(mean(round(Rate2(Rate2>0))),3)], 'FontSize', 9, 'Color', 'k');
end

Sign in to comment.


Joe
Joe on 10 Jun 2013
Here is my function:
function output=onerunoneIV(CC12, CC21, Rrest1,Rrest2, Rin1, Rin2, V_rest1,... V_rest2, MeanWidth1, MeanWidth2, MeanHeight1, MeanHeight2, ... BurstNum1, BurstNum2)
set(gcf,'paperpositionmode','manual') set(gcf,'Paperposition',[.25 .25 8 10.5]) set(gcf,'name','JB Pair Summary')
a17=axes('position',[.1 .10 .3 .8]);% right a18=axes('position',[.5 .10 .3 .8]);% left a19=axes('position',[.1 .87 .38 .13],'visible','off');%top right text(.4,.5,{'Cell 1'},'Fontsize',15); a20=axes('position',[.5 .87 .38 .13],'visible','off');%top right text(.4,.5,{'Cell 2'},'Fontsize',15); a21=axes('position',[.01 .9 .58 .12],'visible','off');%Title text(.4,.7,{'5-16-13, Pair 3 ,JB, Age P10, ST- 0715'},'Fontsize',15);
%load data
d=load([wd IVlist(i).name]);
data = d.data;
%time arrays
dt=50e-6; %50 microseconds
t2=dt*(1:size(data,1));
clear vr1 va1 vr2 va2 ir1 ia1 ir2 ia2
Vraw1=mean(data(:,1,1:2:end),3);
vr1= mean(Vraw1(1:975));
va1= mean(Vraw1(end/5:end/5+7800));
Vraw2=mean(data(:,3,2:2:end),3);
vr2= mean(Vraw2(1:975));
va2= mean(Vraw2(end/5:end/5+7800));
Iraw1=mean(data(:,2,1:2:end),3);
ir1= mean(Iraw1(1:975));
ia1= mean(Iraw1(end/5:end/5+7800));
Iraw2=mean(data(:,4,2:2:end),3);
ir2= mean(Iraw2(1:975));
ia2= mean(Iraw2(end/5:end/5+7800));
deltaV1=mean(vr1)-mean(va1); %change in voltage cell 1
deltaV2=mean(vr2)-mean(va2); %change in voltage cell 2
deltaI1=mean(ir1)-mean(ia1); %Change in current cell 1
deltaI2=mean(ir2)-mean(ia2); %change in current cell 2
Vraw1work=mean(data(:,1,1:2:end));
Vraw1pass=mean(data(:,1,2:2:end));
Vraw2work=mean(data(:,3,2:2:end));
Vraw2pass=mean(data(:,3,1:2:end));
v1w_deflect=mean(mean(data(end/5:end/5+7800,1,1:2:end)))-mean(mean(data(1:975,1,1:2:end)));
v1p_deflect=mean(mean(data(end/5:end/5+7800,1,2:2:end)))-mean(mean(data(1:975,1,2:2:end)));
v2w_deflect=mean(mean(data(end/5:end/5+7800,3,2:2:end)))-mean(mean(data(1:975,3,2:2:end)));
v2p_deflect=mean(mean(data(end/5:end/5+7800,3,1:2:end)))-mean(mean(data(1:975,3,1:2:end)));
%coupling coefficient
CC12=v2p_deflect/v1w_deflect;
CC21=v1p_deflect/v2w_deflect;
%Resting resistance cell1 and 2
Rrest1=round(vr1/ir1);
Rrest2=round(vr2/ir2);
%Resistance in cell 1 and 2
Rin1=(1000*(deltaV1(deltaV1>1))/(deltaI1(deltaI1>1)));
Rin2=(1000*(deltaV2(deltaV1>2))/(deltaI2(deltaI1>2)));
%Resting voltage
V_rest1=vr1-ir1;
V_rest2=vr2-ir2;
%plotting Cell 1
axes(a17)
plot(a17,t2,squeeze(data(:,1,:))); hold on
%plotting resting V bar
plot([dt*1;dt*975],[mean(vr1);mean(vr1)],'k-','markersize',10,...
'linewidth',10); hold on;
xlabel (a17, 'Time (ms)')
ylabel (a17, 'Voltage (mV)')
a24=axes('position',[.25 .4 .2 .3],'visible', 'off'); hold on; text(.15, .73, [ 'Average V_R_E_S_T = ' num2str(mean(round(V_rest1))) 'mV'],'fontsize',8, 'Color','k'); hold on; text(.15, .61, ['Average R_R_E_S_T = ' num2str(mean(round(Rin1))) 'M\Omega'],'fontsize',8, 'color','k'); hold on;
%cell 2
axes(a18)
plot(a18,t2,squeeze(data(:,3,:))); hold on
%plotting resting V bar
plot([dt*1;dt*975],[mean(vr2);mean(vr2)],'k-','markersize',10,...
'linewidth',10); hold on;
xlabel (a18, 'Time (ms)')
a25=axes('position',[.65 .41 .2 .3],'visible', 'off'); hold on; text(.15, .73, [ 'Average V_R_E_S_T = ' num2str(mean(round(V_rest2))) 'mV'],'fontsize',8, 'Color','k'); hold on; text(.15, .61, ['Average R_R_E_S_T = ' num2str(mean(round(Rin2))) 'M\Omega'],'fontsize',8, 'color','k'); hold on;
BurstNum1=[]; BurstNum2=[]; BstNmbr1=[]; BstNmbr2=[]; Firing1=[]; Firing2=[]; Rate1=[]; Rate2=[]; deltaI1=[]; deltaI2=[]; Width1=[]; Width2 = []; Height1=[]; Height2 =[];
for reps = 1:2: size(data,3) %Burst Number, Firing Rate, Width, Height
clear VA Ia Ia0 Ia2 VB Ib Ib0 Ib2 OF OF2 CF CF2 ...
OpenFire OpenFire2 CeaseFire CeaseFire2 HalfHeightA ...
HalfHeightB SpikeWidths SpikeWidths2
Vraw1 = data(:,1,reps);
Vraw2 = data(:,3,reps+1);
Iraw1 = data(:,2,reps);
Iraw2 = data(:,4,reps+1);
Ir1 = mean(Iraw1(1:975));
Ir2 = mean(Iraw2(1:975));
Ia1 = mean(Iraw1((end/5):(end/3+7800)));
Ia2 = mean(Iraw2((end/5):(end/5+7800)));
deltaI1(reps) = Ia1 - Ir1;
deltaI2(reps) = Ia2 - Ir2;
xoo = (Vraw1(1:end-1) < -20 & Vraw1(2:end) >= -20);
Spiketimes=dt*(find(xoo));
zoo = (Vraw2(1:end-1) < -20 & Vraw2(2:end) >= -20);
Spiketimes2=dt*(find(zoo));
BurstNum1(reps) = sum(diff(Spiketimes)<0.01);
BurstNum2(reps) = sum(diff(Spiketimes2)<0.01);
if BurstNum1(reps)>0
BstNmbr1(reps)= BurstNum1(reps)+1; %Burst Number, Cell 1
end
if BurstNum2(reps)>0
BstNmbr2(reps)= BurstNum2(reps)+1; %Burst Number, Cell 2
end
Firing1(reps)= sum (Vraw1(1:end-1) < -20 & Vraw1(2:end) >= -20);
%minor issue because times don't match. works for this though.
Firing2(reps)= sum (Vraw2(1:end-1) < -20 & Vraw2(2:end) >= -20);
if Firing1(reps)>0 & BurstNum1(reps)>0;
Rate1(reps) = Firing1(reps) - BurstNum1(reps) - 1;
end
if Firing2(reps)>0 & BurstNum2(reps)>0;
Rate2(reps) = Firing2(reps) - BurstNum2(reps) - 1;
end
if max(Vraw1)>-10
%Getting Half-height of the spikes
Vraw1max = max(Vraw1);
Vraw1mean = mean(Vraw1((end/6):(end/6+6000)));
HalfHeight1 = ((Vraw1max - Vraw1mean)/2 + Vraw1mean);
Vraw2max = max(Vraw2);
Vraw2mean = mean(Vraw2((end/6):(end/6+6000)));
HalfHeight2 = ((Vraw2max - Vraw2mean)/2 + Vraw2mean);
Upfire1 = (Vraw1(1:1:end-1) < HalfHeight1 & Vraw1(2:1:end) >= HalfHeight1);
%minor issue because times don't match. works for this though.
Downfire1 = (Vraw1(1:1:end-1)>HalfHeight1 & Vraw1(2:1:end)<HalfHeight1);
Upfire2 = (Vraw2(1:end-1) <HalfHeight2 & Vraw2(2:end) >= HalfHeight2);
Downfire2= (Vraw2(1:end-1)>HalfHeight2 & Vraw2(2:end)<HalfHeight2);
UF1 = dt*(find (Upfire1));
UF2 = dt*(find (Upfire2));
DF = dt*(find(Downfire1));
DF2 = dt*(find(Downfire2));
SpikeWidths = (DF - UF1);
SpikeWidths2 = (DF2 - UF2);
Width1(reps) = 1000*mean(SpikeWidths);
Width2(reps) = 1000*mean(SpikeWidths2);
Height1(reps)= Vraw1max - Vraw1mean;
Height2(reps)= Vraw2max - Vraw2mean;
MeanWidth1(reps)= mean(Width1);
MeanWidth2(reps)=mean(Width2);
MeanHeight1(reps)=mean(Height1);
MeanHeight2(reps)=mean(Height2);
else
Width1(reps)=0;
Width2(reps)=0;
Height1(reps)=0;
Height2(reps)=0;
end
end
a23=axes('position',[.25 .4 .30 .48], 'visible', 'off');hold on; %cell 1 text(.1, .85, ['Spike W: ' num2str(mean(round(Width1)),3) ' ms'], 'FontSize', 9, 'Color', 'k'); text(.1, .75, ['Spike H: ' num2str(mean(round(Height1)),3) 'mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .65, ['Average Burst: ' num2str(mean(round(BstNmbr1)),3) ' mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .55, ['Average Rate: ' num2str(mean(round(Rate1)),3) ' mV'], 'FontSize', 9, 'Color', 'k');
a22=axes('position',[.65 .65 .30 .48], 'visible', 'off'); hold on;
%cell2 text(.1, .35, ['Spike W: ' num2str(mean(round(Width2)),3) 'ms'], 'FontSize', 9, 'Color', 'k'); text(.1, .25, ['Spike H: ' num2str(mean(round(Height2)),3) ' mV'], 'FontSize', 9, 'Color', 'k'); text(.1, .15, ['Average Burst: ' num2str(mean(round(BstNmbr2)),3)], 'FontSize', 9, 'Color', 'k'); text(.1, .05, ['Average Rate: ' num2str(mean(round(Rate2(Rate2>0))),3)], 'FontSize', 9, 'Color', 'k');
output=[CC12;CC21;Rrest1;Rrest2;Rin1;Rin2;V_rest1;V_rest2;...
MeanWidth1; MeanWidth2; MeanHeight1; MeanHeight2; BurstNum1; ...
BurstNum2];
end

Categories

Find more on Matrix Computations in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!