我目前正在为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 = -1
和x = 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
是从-1
到1
的x值的域,其间隔为0.01
。我们需要使用polyval函数,该函数根据我们在区间p
u
处导出的方程组创建多项式。
最后,plot
只是在u
区间使用MATLAB的GUI绘制我们的派生多项式。
正如你所看到的,我唯一缺少的部分是我的矩阵A
中的另一行x值和矩阵y
中的一个y值我需要找到四个未知数a,b,c和d。我相信你必须使用问题中给出的两个斜率来找到每个点。我尝试使用polyder
函数来实现矩阵p
的导数,
q = polyder(p);
但我仍然对如何从那里继续感到困惑。任何帮助将不胜感激。
答案 0 :(得分:2)
我会计算多项式的导数:
dP(x) = 4ax^3 + 3bx^2 + 2cx + d
现在,您知道dP(-1)=20
和dP(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')
给出了以下情节:
您可以对衍生产品执行相同操作,并检查它是否通过积分(-1,20)
和(1,9)
。