Need a tangent line in my plot like the example provided but I cannot seem to do it
    7 views (last 30 days)
  
       Show older comments
    
I am trying to make a tangent or line of best fit t this data but only from the second half of the plot on should be focused on. Below is an example from the professor
Need smething like this...

which translates to something like this...

But for some reason I keep getting this...

By using this code...
%% Calculation Problem 2
%Given Data Problems 1-4
dd = load('NEWPROB6.txt') %Data loading for airfoil
alpha = dd(:,1); %Angle of attacks (Degreed)
CL = dd(:,2); %Lift coefficient
CD = dd(:,3); %Drag coefficient
Rh = 0.75; %Turbine hub radius (m)
Rt = 15; %Turbine blade tip radius (m)
Rht = linspace(Rh,Rt,10); %r/R radius hub to tip (m)
Rr = Rht/Rt;
B = 3; %Number of blades on the turbine
TSR = 8; %Tips-speed ratio
%Calculation Problem 1
CLD = CL./CD %Lift-to-Drag Ratio
TCL = 1.0280 %Lift coefficient associated with maximum lift-to-drag ratio
Talpha = 6 %Target angle of attack (degrees)
%Calculation Problem 2
Phi = atand(2./(3*TSR*(Rr))) %Local inflow angle (degrees)
CrR = Rt*(8*pi*sind(Phi))./(3*B*TCL*TSR); %chord distribution
Beta = Phi-Talpha
subplot(2,1,1)
plot(Rht,CrR, 'b.-', 'LineWidth',2, 'MarkerSize', 20)
halfpoints = round(numel(CrR)/2)
xlabel('r/R')
ylabel('Chord Distribution (m)')
grid on
hold on
% Assume x and y are your data vectors
xline(Rht(halfpoints), 'Color', 'r')
% Get halfway index
RhtHalf = Rht(halfpoints : end)
CrRHalf = CrR(halfpoints : end)
coefficients = polyfit(RhtHalf, CrRHalf, 1)
RhtFitted = linspace(5, 10, 1)
CrRFitted = polyval(coefficients, RhtFitted);
plot(RhtFitted, CrRFitted, 'c--', 'LineWidth', 2)
grid on
legend('Original Data', 'Linear Fit (2nd Half)');
hold off
Does anyone know how I can fix this? 
3 Comments
  Walter Roberson
      
      
 on 31 May 2025
				It is not clear what the difference is between this and https://www.mathworks.com/matlabcentral/answers/2177356-how-can-i-place-a-linear-regression-line-line-of-best-fit-through-both-plots-in-this-code-but-onl ?
Answers (2)
  Star Strider
      
      
 on 31 May 2025
        Calculate the numerical derivative, find its value at the desired point on the curve, and calculate the tangent line parameters.  
Try this -- 
x = linspace(0, 15);
f = @(x) 10./(x+0.1);
y = f(x);
dfdx = gradient(y,x);
figure
plot(x, y, DisplayName='f(x)')
hold on
plot(x, dfdx, DisplayName = 'df(x)/dx')
hold off
grid
legend(Location='best')
ylim([-4 4])
title('Data & Derivative')
xpt = 7.5;
ypt = f(xpt);
slope = interp1(x, dfdx, xpt)
intercept = ypt - slope*xpt
figure
plot(x, y, DisplayName='f(x)')
hold on
plot(xpt, ypt,'sr', MarkerFaceColor='r', DisplayName='Tangent Point')
plot(x, slope*x+intercept, '--r', DisplayName='Tangent Line')
hold off
grid
legend(Location='best')
ylim([0 4])
title('Data & Tangent Line')
.
2 Comments
  Image Analyst
      
      
 on 31 May 2025
				@ryan, tangent line is the slope at a particular point, while a fit is a line through a range of points.  Make it clear what you want: the tangent or the fitted line.
  Star Strider
      
      
 on 1 Jun 2025
				
      Edited: Star Strider
      
      
 on 1 Jun 2025
  
			Using the provided data , try this --  
dd =   [0.0 0.3983 0.0066 0.0017 -0.0927 0.6330 0.6222
        0.5 0.4536 0.0066 0.0018 -0.0926 0.6172 0.6320
        1.0 0.5091 0.0068 0.0018 -0.0925 0.6013 0.6389
        1.5 0.5641 0.0069 0.0019 -0.0924 0.5857 0.6453
        2.0 0.6189 0.0070 0.0020 -0.0923 0.5699 0.6517
        2.5 0.6733 0.0072 0.0021 -0.0921 0.5540 0.6577
        3.0 0.7270 0.0073 0.0023 -0.0917 0.5358 0.6644
        3.5 0.7792 0.0075 0.0024 -0.0911 0.5135 0.6714
        4.0 0.8310 0.0078 0.0026 -0.0905 0.4921 0.6782
        4.5 0.8822 0.0080 0.0028 -0.0897 0.4682 0.6864
        5.0 0.9328 0.0083 0.0031 -0.0889 0.4464 0.6948
        5.5 0.9812 0.0086 0.0034 -0.0877 0.4199 0.7041
        6.0 1.0280 0.0090 0.0037 -0.0861 0.3896 0.7145
        6.5 1.0728 0.0094 0.0041 -0.0843 0.3581 0.7262
        7.0 1.1138 0.0100 0.0045 -0.0817 0.3214 0.7394
        7.5 1.1459 0.0107 0.0051 -0.0776 0.2766 0.7556
        8.0 1.1724 0.0117 0.0059 -0.0726 0.2228 0.7750
        8.5 1.1957 0.0128 0.0068 -0.0673 0.1745 0.7994
        9.0 1.2193 0.0139 0.0079 -0.0622 0.1382 0.8326
        9.5 1.2403 0.0149 0.0089 -0.0568 0.1102 0.9219
        10.0 1.2659 0.0161 0.0102 -0.0528 0.0907 0.9825
        10.5 1.2906 0.0175 0.0114 -0.0489 0.0728 1.0000
        11.0 1.3137 0.0191 0.0130 -0.0452 0.0602 1.0000
        11.5 1.3367 0.0208 0.0147 -0.0419 0.0518 1.0000
        12.0 1.3589 0.0226 0.0166 -0.0387 0.0458 1.0000
        12.5 1.3796 0.0247 0.0187 -0.0358 0.0412 1.0000
        13.0 1.3951 0.0273 0.0213 -0.0328 0.0368 1.0000
        13.5 1.4159 0.0297 0.0238 -0.0307 0.0345 1.0000
        14.0 1.4268 0.0330 0.0271 -0.0282 0.0316 1.0000
        14.5 1.4433 0.0360 0.0303 -0.0266 0.0300 1.0000
        15.0 1.4559 0.0396 0.0340 -0.0251 0.0282 1.0000
        15.5 1.4590 0.0443 0.0388 -0.0239 0.0264 1.0000
        16.0 1.4703 0.0485 0.0431 -0.0233 0.0253 1.0000
        16.5 1.4782 0.0532 0.0480 -0.0231 0.0241 1.0000
        17.0 1.4794 0.0590 0.0539 -0.0233 0.0230 1.0000
        17.5 1.4707 0.0663 0.0614 -0.0242 0.0220 1.0000
        18.0 1.4743 0.0723 0.0676 -0.0254 0.0214 1.0000
        18.5 1.4732 0.0792 0.0746 -0.0272 0.0208 1.0000
        19.0 1.4701 0.0867 0.0822 -0.0294 0.0201 1.0000
        19.5 1.4626 0.0950 0.0907 -0.0324 0.0196 1.0000
        20.0 1.4501 0.1043 0.1002 -0.0360 0.0190 1.0000];
alpha = dd(:,1); %Angle of attacks (Degreed)
CL = dd(:,2); %Lift coefficient
CD = dd(:,3); %Drag coefficient
Rh = 0.75; %Turbine hub radius (m)
Rt = 15; %Turbine blade tip radius (m)
Rht = linspace(Rh,Rt,10); %r/R radius hub to tip (m)
Rr = Rht/Rt;
B = 3; %Number of blades on the turbine
TSR = 8; %Tips-speed ratio
%Calculation Problem 1
CLD = CL./CD %Lift-to-Drag Ratio
TCL = 1.0280 %Lift coefficient associated with maximum lift-to-drag ratio
Talpha = 6 %Target angle of attack (degrees)
%Calculation Problem 2
Phi = atand(2./(3*TSR*(Rr))) %Local inflow angle (degrees)
CrR = Rt*(8*pi*sind(Phi))./(3*B*TCL*TSR); %chord distribution
Beta = Phi-Talpha
dydx = gradient(CrR, Rht);
xpt = Rht(round(numel(CrR)/2));
ypt = interp1(Rht, CrR, xpt);
slope = interp1(Rht, dydx, xpt)
intercept = ypt - slope*xpt
figure
subplot(2,1,1)
plot(Rht,CrR, 'b.-', 'LineWidth',2, 'MarkerSize', 20)
halfpoints = round(numel(CrR)/2)
xlabel('r/R')
ylabel('Chord Distribution (m)')
grid on
hold on
% Assume x and y are your data vectors
xline(Rht(halfpoints), 'Color', 'r')
% Get halfway index
RhtHalf = Rht(halfpoints : end)
CrRHalf = CrR(halfpoints : end)
coefficients = polyfit(RhtHalf, CrRHalf, 1)
RhtFitted = linspace(5, 10, 1)
CrRFitted = polyval(coefficients, RhtFitted);
plot(Rht, slope*Rht+intercept, '--m', DisplayName='Tangent Line', LineWidth=1.5)
plot(RhtFitted, CrRFitted, 'c--', 'LineWidth', 2)
grid on
legend('Original Data', 'Linear Fit (2nd Half)','Tangent Line');
hold off
.
EDIT -- Minor tweak.  
.
  Image Analyst
      
      
 on 1 Jun 2025
        RhtFitted = linspace(5, 10, 1)
gives only a single value, so of course no line will be plotted.  You need at least two points to plot a line.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

