MATLAB Answers


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

Jaap de Vries さんによって質問されました 2012 年 12 月 13 日
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 件のコメント

サインイン to comment.

2 件の回答

Matt Fig
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 件のコメント

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 =; %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

サインイン to comment.

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 件のコメント

サインイン to comment.

Translated by