Tangent at a given point to a nonlinear curve

5 ビュー (過去 30 日間)
Jan Adamkiewicz
Jan Adamkiewicz 2019 年 1 月 20 日
コメント済み: John D'Errico 2019 年 1 月 20 日
Hello,
I have a problem with caltulating and plotting a tangent to a specified point from data given by two arrays. I know i'm supposed to use spline function to estimate the function of the data points I have and then calculate the derivative and slope to plot a tangent, but unfortunately i'm not very experienced with MATLAB. I would greatly appreciate any help of how to get from teoretical idea to matlab code. So far, i have created a script that uses movmean function to filter any noise i got from the source of the data and got a plot like shown below:
load trzy.csv
A=zeros(1906,2);
A=trzy;
x=A(:,2)*1000;
B=zeros(1906,1);
C=zeros(1906,1);
B(:,1)=movmean(A(:,1),7);
A(:,1)=B(:,1);
C(:,1)=movmean(x,7);
for k = 2:20
B(:,k)=movmean(B(:,k-1),7) ;
end
for y = 2:20
C(:,y)=movmean(C(:,y-1),7);
end
plot(B(:,20),C(:,20))

採用された回答

Sargondjani
Sargondjani 2019 年 1 月 20 日
編集済み: Sargondjani 2019 年 1 月 20 日
I think you need to be a bit more precise in what you want: you have data with errors in them, and you want to fit a curve that approximates those points, and then get the slope of the curve?
If you want to fit a spline that goes through all data points (of 1D function), and get the slope one simply way to do it is to use interp1:
POL = interp1(xx,yy,'spline','pp');
dPOL = fnder(POL);
dydx = ppval(dPOL,xi);
where xi are your query points. Something like that.
  1 件のコメント
Jan Adamkiewicz
Jan Adamkiewicz 2019 年 1 月 20 日
Hi !
The situation is as follows:
I have a curve plotted using two arrays of data ( one is voltage, the other is time) and i have to draw a tangent to a particular point on this curve. I just don't know how to do it.

サインインしてコメントする。

その他の回答 (1 件)

John D'Errico
John D'Errico 2019 年 1 月 20 日
Why not try using a spline? Actually, given that slope discontinuity at the beginning of your curve, you would use pchip. That is as simple as
spl = pchip(B(:,20),C(:,20));
You can differentiate the spline usingfnder (if you have the curve fitting toolbox.) And then evaluate
splder = fnder(spl);
Now you can evaluate the function in spl or the derivative function in splder using fnval or ppval.
So try these tools.
  2 件のコメント
Jan Adamkiewicz
Jan Adamkiewicz 2019 年 1 月 20 日
Thank you very much ! I get the idea and it seems to be working :) Have a lovely day
John D'Errico
John D'Errico 2019 年 1 月 20 日
fnplt(spl)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpline Postprocessing についてさらに検索

タグ

製品


リリース

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by