English 中文(简体)
Matlab - 如何在曲线上绘制正切值
原标题:Matlab - how to draw tangent on curve
  • 时间:2012-05-23 21:22:08
  •  标签:
  • matlab

我在壁炉上绘制了一张图图,用:

plot(x,y)

我的图表有不同的斜坡, 我如何在每一个斜坡上绘制正切点, 并计算斜坡的系数?

最佳回答

如果您没有为绘图点设定明确的函数, 您可以使用 < a href=" http:// en.wikipedia.org/wiki/Finite_ difference" rel=“ nofollow” >unite difference 来估计衍生物。 以下是适合数据范围以外的点 :

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]);

我敢肯定,在这个代码里没有虫子, 但我会测试出来,当我周围有木板的时候;)

问题回答

您将需要在任何您有兴趣使用的点( y2-y1) / (x2- x1) 找到斜度, 然后用绘图() 绘制一条有该斜度的直线。 要绘制这条线, 您需要 y 拦截, 并且因为您知道该线上至少一个点的坐标( 这是您想要绘制正切点), 您可以在 y=mx+b 中为 b 解析 。





相关问题
MATLAB Solving equations problem

I want to solve these equations using MATLAB and I am sure there is a non zero solution. The equations are: 0.7071*x + 0.7071*z = x -0.5*x + 0.7071*y + 0.5*z = y -0.5*x - 0.7071*y +...

Difference between MATLAB s matrix notations

How do you read the following MATLAB codes? #1 K>> [p,d]=eig(A) // Not sure about the syntax. p = 0.5257 -0.8507 -0.8507 -0.5257 d = ...

preventing data from being freed when vector goes out of scope

Is there a way to transfer ownership of the data contained in a std::vector (pointed to by, say T*data) into another construct, preventing having "data" become a dangling pointer after the vector goes ...

Divide two polynomials using MATLAB

I want to divide p(x) by q(x) given that: p(x)=-5x^4+3x^2-6x q(x)=x^2+1 I tried: p=inline( -5*(x^4)+3*(x^2) , x ) p = Inline function: p(x) = -5*(x^4)+3*(x^2) q=inline( x^2+1 , x ) q = ...

matlab deals with Fibbonacci

The Fibonacci series is given as follows: 1, 2, 3, 5, 8, 13, 21, ... How can I write a script which calculates and prints the n-th Fibonacci term (for n>2), where n is inputed by the user. This ...

How do I plot lines between all points in a vector?

I have a vector containing some points in 2-D space. I want MATLAB to plot these points with lines drawn from every point to every other point. Basically, I want a graph with all vertices connected. ...

How do I create a string using a loop variable in MATLAB?

I have a loop like this: for i=1:no %some calculations fid = fopen( c:\out.txt , wt ); %write something to the file fclose(fid); end I want data to be written to different files like ...

热门标签