我想通过如下代码,从(X0,Y0)画一条直线段到(X1,Y1),函数表达式设为y1,但是为什么y1变成了和Y1函数完全重合的曲线?

我想通过如下代码,从(X0,Y0)画一条直线段到(X1,Y1),函数表达式设为y1,但是为什么y1变成了和Y1函数完全重合的曲线?

关注引自免费微信小程序:皆我百晓生
看起来您在尝试实现等间距直线插补二次曲线,但在计算y1时出现了错误。您的目标是从点 (X0, Y0) 通过一个斜率与直线段相同的二次曲线连接到 (X1, Y1)。以下是修改后的代码:
% 输入参数
a = input('请输入二次项系数 a:');
b = input('请输入一次项系数 b:');
c = input('请输入常数项 c:');
% 定义 x 的范围
X = -10:0.5:10;
% 计算 y 函数
y = a * X.^2 + b * X + c;
% 用户输入起点坐标
x0 = input('请输入起点坐标 Xe:');
% 计算 y0 值
Y0 = a * x0.^2 + b * x0 + c;
% 计算终点坐标 (这里使用了给定的步长,例如 xd = 2)
xd = 2;
x1 = X0 + xd;
% 定义用于插补的 x 坐标范围
X1 = X0:0.1:x1;
% 计算 y1 函数(原点到 (X1, Y1) 的直线段的斜率)
dy_dx = (Y1 - Y0) / (x1 - x0);
% 计算插补曲线上的点,使用直线段的斜率和起点的 y 值
y1 = dy_dx .* X1 + Y0;
% 绘制图形
figure;
plot(X, y, 'r', 'LineWidth', 2); % 画出原始二次曲线
hold on;
plot(X1, y1, 'g', 'LineWidth', 2); % 插入直线段
plot([X0, x1], [Y0, Y1], 'k--', 'LineWidth', 2); % 显示实际直线段
plot(x0, Y0, 'ro', 'MarkerSize', 10); % 标记起点
plot(x1, Y1, 'go', 'MarkerSize', 10); % 标记终点
xlabel('x');
ylabel('y');
title('等间距直线插补二次曲线');
legend('二次曲线', '插补线段', '实际直线段', '起点', '终点');
这段代码首先计算了原始的二次曲线 y。然后根据用户输入的起点坐标 (x0, Y0) 和给定步长 xd 计算终点坐标 (x1, Y1)。接下来,我们找到直线段的斜率,并利用这个斜率和起点 (x0, Y0) 的 y 值计算插补曲线上的点 y1。最后,我们将原始二次曲线、插补线段、实际直线段以及起点和终点标记在同一个图上。
运行这段代码后,你应该能看到一个包含原始二次曲线、插补线段和实际直线段的图形。插补线段应该与实际直线段非常接近,但不会完全重合,因为它是通过保持与实际直线段相同斜率的二次曲线来实现的。