【发布时间】: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 = -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 只是使用 MATLAB 的 GUI 在区间 u 上绘制我们导出的多项式。
如您所见,我唯一缺少的部分是矩阵 A 中的另一行 x 值和矩阵 y 中的一个 y 值,我需要找到四个未知数 a、b、 c,和d。我相信您必须使用问题中给出的两个斜率来找到每个点。我曾尝试使用polyder 函数通过做得到矩阵p 的导数,
q = polyder(p);
但我仍然对如何从那里继续感到困惑。任何帮助将不胜感激。
【问题讨论】:
-
您描述了几个步骤(其中包括确定系数和绘制结果)。您能否描述得非常清楚: 1. 您究竟在什么时候卡住了 2. 现在发生了什么以及应该发生什么。最好有例子。
标签: matlab curve polynomial-math