How to plot the distance between two curves

9 ビュー (過去 30 日間)
David Sicic
David Sicic 2023 年 9 月 26 日
編集済み: Mario Malic 2023 年 9 月 26 日
Hey,
I have a question regarding the distance between two curves, i want to plot the distance between these curves like shown in the picture below
This is my code:
% Gegebene Daten
x = [29.069, 44.395, 59.528, 74.76, 90.036, 150];
y = [0.07091, 0.076187, 0.081665, 0.087588, 0.093687, 0.1197];
% Quadratische Regression
quadratic_coefficients = polyfit(x, y, 2); % Quadratisches Polynom (ax^2 + bx + c)
% Lineare Regression
linear_coefficients = polyfit(x, y, 1); % Lineare Funktion (mx + b)
% Erzeugen Sie x-Werte für die Auswertung am letzten Punkt
x_last_point = x(end);
% Berechnen Sie die y-Werte für die quadratische und lineare Anpassung am letzten Punkt
y_quadratic_last_point = polyval(quadratic_coefficients, x_last_point);
y_linear_last_point = polyval(linear_coefficients, x_last_point);
% Berechnen Sie den Abstand zwischen den beiden Kurven am letzten Punkt
distance_at_last_point = abs(y_quadratic_last_point - y_linear_last_point);
% Plot der quadratischen und linearen Anpassungen und der gegebenen Daten
x_values = linspace(min(x), max(x), 1000);
y_quadratic = polyval(quadratic_coefficients, x_values);
y_linear = polyval(linear_coefficients, x_values);
figure;
plot(x, y, 'o', 'MarkerSize', 8, 'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'b');
hold on;
plot(x_values, y_quadratic, '-r', 'LineWidth', 2);
plot(x_values, y_linear, '-g', 'LineWidth', 2);
xlabel('X-Achse');
ylabel('Y-Achse');
title('Quadratische und Lineare Anpassungen der Daten');
legend('Datenpunkte', 'Quadratische Anpassung', 'Lineare Anpassung');
grid on;
hold off;
% Quadratische Abweichung (residuale Summe der Quadrate) für die quadratische Anpassung
residuals_quadratic = y - polyval(quadratic_coefficients, x);
quadratic_deviation = sum(residuals_quadratic.^2);
% Lineare Abweichung (residuale Summe der Quadrate) für die lineare Anpassung
residuals_linear = y - polyval(linear_coefficients, x);
linear_deviation = sum(residuals_linear.^2);
% Geben Sie die quadratische und lineare Abweichung aus
fprintf('Quadratische Abweichung: %.6f\n', quadratic_deviation);
fprintf('Lineare Abweichung: %.6f\n', linear_deviation);
% Geben Sie den Abstand zwischen den beiden Kurven am letzten Punkt aus
fprintf('Abstand zwischen den Kurven am letzten Punkt: %.6f\n', distance_at_last_point);

採用された回答

Mario Malic
Mario Malic 2023 年 9 月 26 日
編集済み: Mario Malic 2023 年 9 月 26 日
% Gegebene Daten
x = [29.069, 44.395, 59.528, 74.76, 90.036, 150];
y = [0.07091, 0.076187, 0.081665, 0.087588, 0.093687, 0.1197];
% Quadratische Regression
quadratic_coefficients = polyfit(x, y, 2); % Quadratisches Polynom (ax^2 + bx + c)
% Lineare Regression
linear_coefficients = polyfit(x, y, 1); % Lineare Funktion (mx + b)
% Erzeugen Sie x-Werte für die Auswertung am letzten Punkt
x_last_point = x(end);
% Berechnen Sie die y-Werte für die quadratische und lineare Anpassung am letzten Punkt
y_quadratic_last_point = polyval(quadratic_coefficients, x_last_point);
y_linear_last_point = polyval(linear_coefficients, x_last_point);
% Berechnen Sie den Abstand zwischen den beiden Kurven am letzten Punkt
distance_at_last_point = abs(y_quadratic_last_point - y_linear_last_point);
% Plot der quadratischen und linearen Anpassungen und der gegebenen Daten
x_values = linspace(min(x), max(x), 1000);
y_quadratic = polyval(quadratic_coefficients, x_values);
y_linear = polyval(linear_coefficients, x_values);
figure;
plot(x, y, 'o', 'MarkerSize', 8, 'MarkerFaceColor', 'b', 'MarkerEdgeColor', 'b');
hold on;
plot(x_values, y_quadratic, '-r', 'LineWidth', 2);
plot(x_values, y_linear, '-g', 'LineWidth', 2);
xlabel('X-Achse');
ylabel('Y-Achse');
title('Quadratische und Lineare Anpassungen der Daten');
legend('Datenpunkte', 'Quadratische Anpassung', 'Lineare Anpassung');
grid on;
hold off;
% Quadratische Abweichung (residuale Summe der Quadrate) für die quadratische Anpassung
residuals_quadratic = y - polyval(quadratic_coefficients, x);
quadratic_deviation = sum(residuals_quadratic.^2);
% Lineare Abweichung (residuale Summe der Quadrate) für die lineare Anpassung
residuals_linear = y - polyval(linear_coefficients, x);
linear_deviation = sum(residuals_linear.^2);
% Geben Sie die quadratische und lineare Abweichung aus
fprintf('Quadratische Abweichung: %.6f\n', quadratic_deviation);
Quadratische Abweichung: 0.000000
fprintf('Lineare Abweichung: %.6f\n', linear_deviation);
Lineare Abweichung: 0.000003
% Geben Sie den Abstand zwischen den beiden Kurven am letzten Punkt aus
fprintf('Abstand zwischen den Kurven am letzten Punkt: %.6f\n', distance_at_last_point);
Abstand zwischen den Kurven am letzten Punkt: 0.000832
hold on;
plot([x_last_point, x_last_point], [y_quadratic_last_point, y_linear_last_point])
text(x_last_point, mean([y_quadratic_last_point, y_linear_last_point]), "\Delta" + num2str(abs(y_quadratic_last_point - y_linear_last_point)))
xlim([120, 160])
ylim([0.11 0.13])
  2 件のコメント
Sam Chak
Sam Chak 2023 年 9 月 26 日
Your legend is blocking it. I cannot see.
David Sicic
David Sicic 2023 年 9 月 26 日
Thank you!!

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

その他の回答 (0 件)

タグ

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by