最小の傾きを調べる方法
24 views (last 30 days)
Show older comments
plot(A,B)を使い、X座標がAデータ Y座標がBデータに対応する曲線を描きました。(図参照)
この曲線が示すデータで、X座標が40の間隔をもつ2点(例(20 2.8)と(60 2.5))を結ぶ直線のうち、
最も傾きが小さい直線を探し、それのy切片を知りたいのですが
初心者のためどのように出せばよいかわかりません。
ご教示いただけますと幸いです。
5 Comments
Accepted Answer
Atsushi Ueno
on 29 May 2021
下記の数式は回帰分析で導出したのではなく(そもそも座標データが提示されていない)、曲線がシグモイド関数に似ている事から同関数の式の係数を調整して作成しました。またこの数式は質問文と90度違っていて、xが縦軸B, y=f(x)が横軸Aです。
>X座標が40の間隔をもつ2点を結ぶ直線のうち、最も傾きが小さい直線を探し、それのy切片を知りたい
安直に隣り合う2点の傾きの最小値を探して直線の式をプロットしました。まだ質問文の求める傾きは求められていません。
f = @(x)100./(1+exp(x.*5-12));
B = 0.1:0.13:5.5;
A = f(B);
D = [0 diff(A)./diff(B)]; % 傾き=差分の割合
[minD, ind] = min(D); % 最小の傾きを求める
lA = minD * B; % 直線のB,A座標を求める
lA = lA - lA(ind) + A(ind); % 傾き最小の点を通る直線にする
% 以下はプロット
subplot(1,2,1); plot(A,B,'-o',lA,B); % B,A座標を青の○で、傾き最小の直線を橙線でプロット
title('A,B座標'); xlabel('B'); ylabel('A');
xlim([0 100]); ylim([0 6]);
subplot(1,2,2); plot(D,B,'-o'); % 傾きをプロット
title('傾き'); xlabel('B'); ylabel('A');
この質問の回答し難い点は「X座標が40の間隔をもつ2点」が必要な点です。X座標(A)が等間隔ではないと言う事ですし、上記の例でも等間隔をもつ傾きを得られていません。問題に答えるにはデータを回帰分析してフィットする数式を求める必要があります。回帰分析については下記公式回答が参考になると思います。まず座標データを回帰分析して等間隔なA座標が得られるようにしてみてください。
1 Comment
Atsushi Ueno
on 29 May 2021
Edited: Atsushi Ueno
on 29 May 2021
もう一つ必要な情報が「横方向の間隔40の2点間の傾きは、その間どこの点の傾きとするか」です。それを決めないとy切片も決まりません。自然に考えると「横方向の間隔40の真ん中20の座標を持つ点」(雑で申し訳ないですが下図参照)だと思うのですが、曲線の曲がり具合によっては必ずしもその点の微分係数と一致しないので、確認が必要です。
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!