Not enough input arguments
2 views (last 30 days)
Show older comments
I have the error for line15 as foollows
Error in knifEdge (line 15)
NormalizedPower = TransmittedPower./max(TransmittedPower); % Normalizing Power
the code is as follows:
function [w, x0, fitresult, gof] = knifEdge(x, TransmittedPower)
% knifEdge(x,NormalizedPower)
% Knife edge method: Calculation of beam waist and center of the beam
%
% Input :
% X Input : Knife position (eg. in mm)
% Y Output: Power for each of the x position.
% Output:
% w = beam waist
% x0 = center of the beam
% fitresult : a fit object representing the fit.
% gof : structure with goodness-of fit info.
%% Fit: ‘Error Function Fitting’.
NormalizedPower = TransmittedPower./max(TransmittedPower); % Normalizing Power
x = x-min(x);
lincoeff = polyfit(x, NormalizedPower, 1);
a = lincoeff(1);
[xData, yData] = prepareCurveData( x, NormalizedPower );
% Fit Type
if a<0
ft = fittype( '0.5*(1-erf(sqrt(2).*(x-x0)./w))', 'independent', 'x', 'dependent', 'y' );
else
ft = fittype( '0.5*(1+erf(sqrt(2).*(x-x0)./w))', 'independent', 'x', 'dependent', 'y' );
end
opts = fitoptions( Method, 'NonlinearLeastSquares' );
opts.Display = Off;
opts.StartPoint = [0.913375856139019 0.63235924622541];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( Name, 'Error Function Fitting' );
h = plot( fitresult, xData, yData );
legend( h, 'x vs Normalized Power' , 'Error Function Fitting', 'Location', 'NorthEast' );
w = fitresult.w;
x0 = fitresult.x0;
% Label axes
xlabel x
ylabel NormalizedPower
grid on
I have data from the experiment for x and power transmitted. I imported it into matlab as .mat format and defined x and transmittedpower from the table. But its not working . I dont know what i am missing.
2 Comments
Answers (1)
Walter Roberson
on 1 May 2021
You are trying to execute knifEdge by name or by pressing the green Run button. You need to go to the command line and invoke it passing in the appropriate values (or do the same thing in a line of code.)
When you run a function it is not enough to have variables in the workspace that have the same names as the variables used in the function; you must pass the values in to the function.
6 Comments
Walter Roberson
on 1 May 2021
You need to pass numeric TransmittedPower but you are passing a table instead. You need to extract the numeric data from the table.
See Also
Categories
Find more on Data Distribution Plots 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!