MATLAB: Tangent

mathematics

Hi,
I have x and y values which represent some sort of sin wave but I don't know the function. something like x = [1.190984579 1.15776987 1.12455516 1.096085409 1.067615658 1.034400949 1.003558719 0.975088968 0.944246738 0.911032028 0.877817319 0.846975089 0.825622776]
y = [0.526690391 0.517200474 0.519572954 0.533807829 0.550415184 0.56227758 0.552787663 0.536180308 0.521945433 0.521945433 0.524317912 0.517200474 0.495848161]
I want to draw tangent line on the point I specify. Please help me do it.
Thanks.

Best Answer

You'll need to fit a function to the data and then take its derivative. First, the fit:
plot(x,y,'.'); hold on
n = 10;
[p,~,mu] = polyfit(x,y,n); % degree 10 polynomial fit, centered and scaled
% Plot the fit with the data
xfit = linspace(min(x),max(x),100);
yfit = polyval(p,xfit,[],mu);
plot(xfit,yfit,'r')
Now you can use a numerical derivative to calculate the tangent. I recommend downloading the package Adaptive Robust Numerical Differentiation package from the File Exchange. Then you can do the following:
idx = input(['Enter index in the range ',num2str([1 length(x)]),':']);
x0 = x(idx);
f = @(x) polyval(p,x,[],mu);
df = derivest(f,x0); % Here is the derivative
% Calculate the end points of a tangent line
xt = [x0-0.05 x0+0.05];
yt = f(x0) + (xt-x0)*df;
plot(xt,yt)
(Edited to accept an index number instead of an x value).