MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply TodayTo resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Asked by Jaap de Vries on 13 Dec 2012

To whom it may concern:

It is one of those days when apparent simple tasks seem hard for some reason.

I have a continues but highly non smooth dataset of emissivity versus wavelength. I would really like to put this into a (lookup) function so the my dataset (lamda, e), i.e.,

Lamda e 0.25 0.545 0.26 0.556 0.27 0.654

…etc will turn into a function e = f(lamda). This would be very helpful since I can then create a function handle and integrate over certain wavelength regions and perform other operations.

Any suggestions???

*No products are associated with this question.*

Answer by Matt Fig on 14 Dec 2012

Accepted answer

You could use POLYFIT, or the curve fitting toolbox or a simple interpolation.

>> x = 0:.25:5; >> y = x.^2; >> f = @(z) interp1(x,y,z); % Lookup table function >> x2 = 1/8:1/8:5; % Just to compare func to data. >> plot(x,y,'sb',x2,f(x2),'*r')

Jaap de Vries on 14 Dec 2012

Perfect Matt, This solved the problem. I preferred the interp1 function since the data is to jagged for a POLYFIT would require too many coefficients. My code now reads

% Import the data from a text file. ems = importdata('Emmisivity.txt'); %the spectrally resolved emissivity data Data = ems.data; %Selects the values, neglects the headers

% create a lookup function handle for the data. specEms = @(lamda) interp1(Data(:,1), Data(:,2),lamda);

% create a function handle for the spectral exitance, a basically the Max % Planck’s law for a black body. specExbb = @(lamda, T) specexitance(lamda, T); %funtion created by me.

% create a exitance function for a selective emitter. specExSel = @(lamda, T) specExbb(lamda, T).*specEms(lamda);

% integrate over a user-specified range (lamda1-lamda2), leave the function % parameterized with respect to T. ExSel = @(lamda1, lamda2, T) integral(@(lamda) specExSel (lamda,T),lamda1,lamda2);

Thank you so much, my faith in humanity is ones again restored. Jaap

Answer by Jing on 13 Dec 2012

Hi Jaap, I can't fully understand your question. Do you mean you want a lookup table in function form? If so, you can use fitting process(The fitting highly depends on the fit type your use) to build a function, but the function may not be very accurate at each data point.

## 0 Comments