Me han planeado una gráfica en matlab con:

plot(x,y)

y mi gráfica tiene pendientes diferentes, ¿cómo puedo dibujar tangentes en cada pendiente y calcular el coeficiente de la pendiente?

2 Comentarios

  1. 2

    Si usted no tiene una función explícita de los puntos graficados, puede utilizar diferencias finitas para la estimación de la derivada. El siguiente es adecuado para los puntos que no están en la frontera de los datos abarcan:

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

    Ahora dibujo que la pendiente, depende de lo que quieras: sólo una línea corta:

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

    o una línea más larga

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

    Estoy bastante seguro de que no hay errores en este código, pero voy a probarlo cuando me han matlab todo 😉

  2. 1

    Tendrás que averiguar la pendiente en cualquiera de los puntos que usted está interesado en el uso de (y2-y1)/(x2-x1) y, a continuación, utilizar plot() para dibujar una línea recta que tiene pendiente. Para dibujar la línea, usted necesita la intersección, y ya que usted sabe las coordenadas de al menos un punto en esa línea (que es el punto que se desea dibujar la recta tangente a), se puede resolver para b en la ecuación y=mx+b.

    • Me contador repped esta respuesta hasta 0. No es la mejor respuesta y no te da la visión de código de matlab, pero que conceptualmente es el sonido, así que no creo que se merece un -1
    • Estoy de acuerdo con este enfoque, pero me gustaría añadir que dependiendo de la resolución horizontal de la gráfica (la cantidad de puntos que tiene a la trama), es posible que desee considerar la interpolación de primera para obtener un resultado más exacto. Ver interp() en matlab, es bastante simple.
    • Estoy con Xurtio ^^

Dejar respuesta

Please enter your comment!
Please enter your name here