3

私はmatlabでグラフをプロットしました:

plot(x,y)

グラフの勾配が異なる場合、各勾配に接線を描画して勾配の係数を計算するにはどうすればよいですか?

4

2 に答える 2

2

プロットされた点に対する明示的な関数がない場合は、微分を推定するために有限差分を使用できます。以下は、データ スパンの境界上にないポイントに適しています。

plot(x,y);
hold all;

% first sort the points, so x is monotonically rising
[x, sortidx] = sort(x);
y = y(sortidx);

% this is the x point for which you want to compute the slope
xslope = (x(1)+x(end))/2;

idx_a = find(x<xslope,1,'last');
idx_b = find(x>xslope,1,'first');
% or even simpler:
idx_b = idx_a+1;
% this assumes min(x)<xslope<max(x)

xa = x(idx_a);
xb = x(idx_b);
slope = (y(idx_b) - y(idx_a))/(xb - xa);

その勾配を描くと、それはあなたが望むものに依存します:ただの短い線:

yslope = interp1(x,y,xslope);
ya_sloped = yslope + (xa-xslope)*slope;
yb_sloped = yslope + (xb-xslope)*slope;
line([xa;xb],[ya_sloped;yb_sloped]);

またはより長い行

yslope = interp1(x,y,xslope);
xa = xa + 4*(xa-xslope);
xb = xb + 4*(xb-xslope);
ya_sloped = yslope + (xa-xslope)*slope;
yb_sloped = yslope + (xb-xslope)*slope;
line([xa;xb],[ya_sloped;yb_sloped]);

このコードにバグはないと確信していますが、matlab が手元にあるときにテストします ;)

于 2012-05-23T21:46:48.370 に答える
1

(y2-y1)/(x2-x1) を使用して関心のある任意の点で勾配を把握し、次に plot() を使用してその勾配を持つ直線を描画する必要があります。線を描くには y 切片が必要です。その線上の少なくとも 1 つの点 (接線を描きたい点) の座標がわかっているので、方程式 y=mx で b を解くことができます。 +b。

于 2012-05-23T21:37:58.960 に答える