Plot the slope of a parabola with only the data points being known

16 ビュー (過去 30 日間)
Ludwig Crous
Ludwig Crous 2021 年 10 月 24 日
回答済み: Sargondjani 2021 年 10 月 24 日
Deflection (in meters)
The deflection is given in the following line. The data was acquired experimentally.
Thus, no equation is available.
x = linspace(-0.5,0.5,25); %length in (meters)
def_3mm_no_grav = -[0.00 5.82e-1 1.08 1.53 1.94 2.30 2.62 2.89 3.12 3.29 3.41 3.49 3.51 3.49 3.41 3.29 3.12 2.89 2.62 2.30 1.94 1.53 1.08 5.82e-1 0.0]*(10^(-3));
Slope
I tried using polyfit, but I'm not that familiar with the function so I could be using it wrong
slope_3_no_grav = polyfit(x,def_3mm_no_grav,1)
How should I go about acquiring the values/ equation of the slope in order to plot it?

回答 (3 件)

Alan Stevens
Alan Stevens 2021 年 10 月 24 日
Like this?
x = linspace(-0.5,0.5,25); %length in (meters)
def_3mm_no_grav = -[0.00 5.82e-1 1.08 1.53 1.94 2.30 2.62 2.89 3.12 ...
3.29 3.41 3.49 3.51 3.49 3.41 3.29 3.12 2.89 2.62 2.30 1.94 1.53 ...
1.08 5.82e-1 0.0]*(10^(-3));
coeffs = polyfit(x,def_3mm_no_grav,2);
fit_3mm_no_grav = polyval(coeffs,x);
slope_coeffs = [2*coeffs(1) coeffs(2)];
slope_fit = polyval(slope_coeffs,x);
plot(x,def_3mm_no_grav,'o',x,fit_3mm_no_grav),grid
legend('data','curve fit')
xlabel('x'), ylabel('3mm no grav')
figure
plot(x,slope_fit),grid
xlabel('x'), ylabel('slope of 3mm no grav')
  1 件のコメント
Ludwig Crous
Ludwig Crous 2021 年 10 月 24 日
Thank you so much.
It is greatly appreciated.

サインインしてコメントする。


Ive J
Ive J 2021 年 10 月 24 日
Before fitting, it's a good practice to visualize your data to better understand the rough relationship between your variables. In your case, a 2nd order polynomial function seems a reasonable choice:
x = linspace(-0.5,0.5,25); %length in (meters)
y = -[0.00 5.82e-1 1.08 1.53 1.94 2.30 2.62 2.89 3.12 3.29 3.41 3.49 3.51 3.49 3.41 3.29 3.12 2.89 2.62 2.30 1.94 1.53 1.08 5.82e-1 0.0]*(10^(-3));
% fit a curve
coef = polyfit(x, y, 2); % equation would be f(x) = coef(1)*x^2 + coef(2)*x + coef(3)
% now draw the fit
newx = linspace(min(x), max(x), 100);
newy = polyval(coef, newx);
plot(x, y, 'o', newx, newy, 'linewidth', 1.5)

Sargondjani
Sargondjani 2021 年 10 月 24 日
clc;
clear all;
close all;
x = linspace(-0.5,0.5,25); %length in (meters)
def_3mm_no_grav = -[0.00 5.82e-1 1.08 1.53 1.94 2.30 2.62 2.89 3.12 3.29 3.41 3.49 3.51 3.49 3.41 3.29 3.12 2.89 2.62 2.30 1.94 1.53 1.08 5.82e-1 0.0]*(10^(-3));
pp=polyfit(x,def_3mm_no_grav,2);% fit polynomial
p_prime = polyder(pp);%take derivative of this polynomial
plot(x,def_3mm_no_grav,'LineWidth',1.5);%data
hold all;
x_acc = linspace(x(1),x(end),1000);
y_acc = polyval(pp,x_acc);
plot(x_acc,y_acc,'--','LineWidth',1.5);%fitted polynomial
%First order approximation around x1:
x1 = 0.1;
y1 = polyval(pp,x1);%function value;
slope_x1 = polyval(p_prime,x1);%slope at x1
x_dev = -0.1:0.01:0.1;
y_slope = y1+ slope_x1*x_dev;
plot(x1 + x_dev,y_slope,':','LineWidth',1.5)
legend('Data','Fitted poly.','First order approx.')

カテゴリ

Help Center および File ExchangeDigital Filter Analysis についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by