Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

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

Convert (x,y) data into a function y => f(x)

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???

0 Comments

Jaap de Vries

Products

No products are associated with this question.

2 Answers

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')

1 Comment

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

Matt Fig
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

Jing

Contact us