带斜率的MATLAB曲线拟合

时间:2017-07-19 10:36:33

标签: matlab curve polynomial-math

背景

我目前正在为MATLAB课程中的工程设计讲座,偶然发现了一个我想向课堂提出的问题。我已经做了很多不同尝试来解决这个问题,但我的图表不断出现错误。我将描述下面的问题以及我尝试解决此问题的所有步骤。

问题

求出四次多项式的系数

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

其图表遍历点(0, 1)(1, 1)(-1,3)和 其x = -1的斜率为20x = 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;

mldividemldivide函数的更多信息,适用于需要参考的任何人。

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

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

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

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

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

q = polyder(p);

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

1 个答案:

答案 0 :(得分:2)

我会计算多项式的导数:

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

现在,您知道dP(-1)=20dP(1)=9,因此您有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')

给出了以下情节:

enter image description here

您可以对衍生产品执行相同操作,并检查它是否通过积分(-1,20)(1,9)