【问题标题】:MATLAB Curve Fitting with Slopes带斜率的 MATLAB 曲线拟合
【发布时间】:2017-07-19 10:36:32
【问题描述】:

背景

我目前正在为我的 MATLAB 工程课程做讲座,偶然发现了一个我想向全班介绍的问题。我已经做了很多不同的尝试来解决这个问题,但我的图表总是不正确。我将在下面描述这个问题以及我为解决这个问题而采取的所有步骤。

问题

求四次多项式的系数

P(x) = ax^4 + bx^3 + cx^2 + dx + e

谁的图通过点 (0, 1)(1, 1)(-1,3) 和 其在x = -1 处的斜率为20,在x = 1 处的斜率为9

目视检查你的答案。

尝试

我首先创建了一个由上述 x 值组成的矩阵,我导出如下:

A = [0^4 0^3 0^2 0 1; 1^4 1^3 1^2 1 1; (-1)^4 (-1)^3 (-1)^2 -1 1];
A = [0 0 0 0 1; 1 1 1 1 1; 1 -1 1 -1 1];

这将创建一个 5 列乘 3 行的矩阵,我可以用它来绘制多项式。

我的问题是我无法获得 x 值的最后一行,因为每一行都是方程组中的一个方程,并且方程的数量必须与未知数一样多(4:a, b、c 和 d 是未知的,但如您所见,e 始终等于 1)。

暂时忽略这个问题,我可以继续创建一个 y 值的垂直矩阵,以便我可以求解方程组。这些 y 值已经给出,所以我所要做的就是输入以下代码:

y = [1 1 3]';

再一次,应该有第四个 y 值与方程组一起使用,但我无法仅使用 x = -1x = 1 处的点的斜率推导出它。

一旦导出了 x 值和 y 值,我们就可以继续使用backslash operator (/) 来求解线性方程组 A*x = y。

p = A\y;

mldivide 是有关mldivide 功能的更多信息,供需要参考的人参考。

从现在开始,以下从这个方程组创建多项式并绘制图形的代码应该保持不变。

u = -1:.01:1;
v = polyval(p, u);
plot(u,v);

在此代码中,u 是从 -11 的 x 值域,间隔为 0.01。这是我们使用 polyval 函数所必需的,该函数从我们在 p 在区间 u 上推导出的方程组创建多项式。

最后,plot 只是使用 MATLAB 的 GUI 在区间 u 上绘制我们导出的多项式。

如您所见,我唯一缺少的部分是矩阵 A 中的另一行 x 值和矩阵 y 中的一个 y 值,我需要找到四个未知数 a、b、 c,和d。我相信您必须使用问题中给出的两个斜率来找到每个点。我曾尝试使用polyder 函数通过做得到矩阵p 的导数,

q = polyder(p);

但我仍然对如何从那里继续感到困惑。任何帮助将不胜感激。

【问题讨论】:

  • 您描述了几个步骤(其中包括确定系数和绘制结果)。您能否描述得非常清楚: 1. 您究竟在什么时候卡住了 2. 现在发生了什么以及应该发生什么。最好有例子。

标签: matlab curve polynomial-math


【解决方案1】:

我会计算多项式的导数:

dP(x) = 4ax^3 + 3bx^2 + 2cx + d

现在,您知道 dP(-1)=20dP(1)=9,所以您有 5 个方程和 5 个未知数:

e = 1
a + b + c + d + e = 1
a - b + c - d + e = 3
-4*a + 3*b - 2*c + d = 20
4*a + 3*b + 2*c + d = 9

因此您可以构造一个 5x5 矩阵并求解系统,就像您对 A\y 所做的那样。

构造这个 5x5 矩阵的代码是:

A = [0 0 0 0 1 ; 1 1 1 1 1 ; 1 -1 1 -1 1 ; -4 3 -2 1 0 ; 4 3 2 1 0];
y = [1 1 3 20 9]';

然后您可以在绘图上检查结果:

p=A\y;
u = -1:.01:1;
v = polyval(p, u);
data_pts = [0, 1; 1, 1;-1, 3]
plot(u,v,data_pts(:,1),data_pts(:,2),'rx')

它给出了以下情节:

您可以对导数执行相同的操作,并检查它是否通过点 (-1,20)(1,9)

【讨论】:

  • 我完全同意!您是否知道在 MATLAB 中计算 x = -1 和 x = 1 并从这些 x 值中获取矩阵的最简单方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 2015-03-22
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多