MATLABはどうやって離散点の曲率の最大値を取りますか?


余計なことを言わないで、コードを見てください。

x0 = linspace(0.1,2,100);%x0,y0       ,      
y0 = 1./x0;
h1 = abs(diff(x0)) ;
h = [h1 h1(end)];
ht = h;
yapp1 = gradient(y0)./ht; %matlab    
yapp2 = del2(y0)./ht; %matlab    
k2 = abs(yapp2)./(1+yapp1.^2).^(3/2);
figure
plot(k2)
title('    ')
[~,maxFlag] = max(k2);%      
x_max = x0(maxFlag);
y_max = y0(maxFlag);
%            
figure
plot(x0,y0,'.-');
hold on;
plot(x_max,y_max,'rp')
title('       ')
xlabel('log10((norm(B*Xk-L)))')
ylabel('log10((norm(Xk)))')

補足:MATLAB補間+離散点曲率計算
考え:点が十分に密ならdiff、gradientで曲率を求め、まばらなら先に補間して曲率を計算します。
数式:

点密の場合は曲線座標(1-2)を入力し、1、2次微分(4-9)を求める。式により曲率を求める(10)

x = 0:0.01:7;
y = cos(x*0.5*pi); 
h1 = abs(diff(x));
h = [h1 h1(end)];
ht = h; 
y1 = gradient(y)./ht;
y2 = gradient(y1)./ht;
curv = abs(y2)./sqrt((1+y1.^2).^3); 
plot(x,y,'-',x,curv,'--r);
legend('Raw Data, 'Curvature','Location',"best");
grid on
画像は以下の理論値画像と同じです。
点々としている場合
1、散点座標を入力する(1-2)
2、スプライン曲線(B-Spline)などで補間して、フィット曲線(3-4)を得る。
3、diff、gradient関数は適合曲線の一、二次導関数(6-11)を求めます。
4、公式により曲率を求める(12)
例:余弦関数は8点を取って、B-Splineで補間します。

x = 0:1:7;
y = cos(x*0.5*pi);
xx = 0:0.01:7;
yy = spline(x,y,xx); 
h1 = abs(diff(xx));
h = [h1 h1(end)];
ht = h; 
yy1 = gradient(yy)./ht;
yy2 = gradient(yy1)./ht;
curv = abs(yy2)./sqrt((1+yy1.^2).^3); 
plot(xx,yy,'-',xx,curv,'--r',x,y,'o-');
legend('B-Spline', 'Curvature','Raw Data','Location',"best");
grid on

補足用法
最大曲率を求めて図に示す。

[max_val,max_ind]=max(curv);
hold on
plot(xx(max_ind),yy(max_ind),'*r');
理論値(コサイン関数曲線)と比較
曲線のコントラスト

曲率コントラスト
いくつかの補間法の対比
4つの方法を列挙して、それぞれセグメント線形補間、三次スプライン曲線(B-Spline)補間、三次Hermite補間(PCHIP)、修正Akimaセグメントの三次Hermite補間(Akima)です。
Case 1:三次元ソレノイド

三次元ソレノイド点々

補間

視線を落とす

横目を使う
Case 2:二次元台形波

二次元台形波
Case 3:三次元不規則折れ線

三次元不規則折れ線(間隔なし)
比較可能:
Case 1:B-Spline>Akima>PCHIP>Linear
Case 2:Linear>PCHIP>Akima>B-Spline
Case 3:Linear≒PCHIP≒Akima>B-Spline
なので、内挿の時は適切な計算方法を選びます。以上は個人の経験ですので、参考にしていただければと思います。よろしくお願いします。間違いがあったり、完全に考えていないところがあれば、教えてください。