当前位置:首页 > 互联网百科 > 正文内容

多项式乘多项式 多项式乘多项式解析

370SEO2年前 (2023-12-31)193

多项式乘多项式 多项式乘多项式解析

1、多项式与多项式相乘,先用一个多项式的每一项与另一个多项式的每一项相乘,再把所得的积相加。

2、由多项式乘多项式法则可以得到(a+b)(c+d)=a(c+d)+b(c+d)=ac+ad+bc+bd

3、上面的运算过程,也可以表示为(a+b)(c+d)=ac+ad+bc+bd

4、多项式乘以多项式就是利用乘法分配律法则得出的。

多项式乘多项式公式 多项式乘多项式 ***

多项式乘多项式法则 是:多项式与多项式相乘,先用一个多项式的每一项与另一个多项式的每一项相乘,再把所得的积相加。

多项式乘以多项式就是利用乘法分配律法则得出的,表达公式为:( a+b) × (c+d)=ac+ad+bc+bd。

多项式乘多项式符号变化一般看每个数字或者字母前边的符号,简单来说同号为正、异号为负。例如:( -a+b) × ( a+b)=-a²-ab+ab+b²

下面分享相关内容的知识扩展:

matlab多项式加减乘除

matlab多项式加减乘除的运算,可以按下列 *** 来求解:

如f(x)=2*x³+5*x²+10x+5,g(x)=5*x³+7*x²+2x+8,则

1、多项式加法,

syms x

f(x) = 2*x^3 + 5*x^2 + 10*x + 5; g(x) = 5*x^3 + 7*x^2 + 2*x + 8;

f+g  %7*x^3 + 12*x^2 + 12*x + 13

2、多项式减法,

 f-g %- 3*x^3 - 2*x^2 + 8*x - 3

3、多项式乘法,使用conv()函数求解

p1=[2, 5,10, 5]; %f(x)的系数

p2=[5,7,2, 8];   %g(x)的系数

w = conv(p1,p2) %w为多项式系数 % 10    39    89   121    95    90    40,即

y=10 *x^6 +39*x^5 +89*x^4 +121*x^3 +95*x^2 +90*x + 40

4、多项式除法,使用deconv()函数求解

[q,r]=deconv(p1,p2) %商 为q 和余数为 r

C语言求多项式乘法

多项式乘法的实现,已知如下两个多项式
P(x)=P X + P X +...+ P X+P
Q(x)=q X +q X +...+q X+q
求它们的乘积多项式 S(x)=s X +...+s X+s 。
可以定义两个一维数组p,q,按照次数从高到低存储两个多项式的系数,定义一维数组来s来存储结果;利用函数来完成对结果多项式各项系数的计算,最后在屏幕上计算结果。
要怎么做啊,谢谢求解
/*
* 文件名: 1_3.c(选做题)
* 实验环境: Turbo C 2.0
* 完成时间: 2003年2月22日
*--------------------------------------------------------------------
* 改进说明: 可以实现多个多项式的加法、减法、乘法,并且比书中算法更加
* 合理. 例如: 连加a+b+c+d,连减a-b-c-d,连乘a*b*c*d.
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#define TRUE 1
#define FALSE 0
#define POSITIVE 1
#define NEGATIVE -1

typedef int status;
typedef struct NodeType
{
float fCoeff;
int iExpon;
struct NodeType *next;
} NodeType, *LinkType;
typedef LinkType polynomial;
typedef polynomial *PolyPointer;

status MakePolyBuff(PolyPointer *, const int);
status MakeNode(polynomial *, const float, const int);
void AppNodeToList(polynomial *, polynomial); /* 在链表尾追加结点 */
status CreatePolyn(PolyPointer, int);
status ProcStrError(const char[]); /* 检查输入的数据 */
void SortPolyn(PolyPointer, int); /* 根据iExpon域对链表进行升序排序 */
void DestroyBuff(PolyPointer, const int);
void DestroyPolyn(polynomial);
int PolynLength(const polynomial); /* 求链表的长度 */
void AddProcess(PolyPointer, const int, PolyPointer, const int);
void SubstractProcess(PolyPointer, const int, PolyPointer);
void MultiplyProcess(PolyPointer, const int, PolyPointer);
void PrintPolyn(const polynomial);
void MergePolynCoeff(PolyPointer, int); /* 在有序链表中,合并同类项 */

int main(void)
{
int iCounter,
iPolyNum; /* 多项式链表缓冲区中链表的个数 */
PolyPointer PolyBuff = NULL; /* 用户输入的多项式链表缓冲区 */
polynomial PolyAddRes = NULL, /* 存放连加结果链表 */
PolySubRes = NULL, /* 存放连减结果链表 */
PolyMulRes = NULL; /* 存放连乘结果链表 */
char strNum[10];

do
{
printf("请输入需要构造多项式的个数,至少2个: ");
gets(strNum);
iPolyNum = atoi(strNum);
} while (iPolyNum < 2);

MakePolyBuff(&PolyBuff, iPolyNum);
CreatePolyn(PolyBuff, iPolyNum);
SortPolyn(PolyBuff, iPolyNum);
MergePolynCoeff(PolyBuff, iPolyNum);
printf("\n打印用户输入并整合后的多项式:\n");
for (iCounter = 0; iCounter < iPolyNum; iCounter++)
{
printf("第%d个项式:\n", iCounter + 1);
PrintPolyn(*(PolyBuff + iCounter));
}

AddProcess(PolyBuff, iPolyNum, &PolyAddRes, POSITIVE);
printf("\n----------------连加结果-----------------\n");
PrintPolyn(PolyAddRes);

SubstractProcess(PolyBuff, iPolyNum, &PolySubRes);
printf("\n----------------连减结果-----------------\n");
PrintPolyn(PolySubRes);

MultiplyProcess(PolyBuff, iPolyNum, &PolyMulRes);
printf("\n----------------连乘结果-----------------\n");
PrintPolyn(PolyMulRes);

printf("\n运行完毕!\n");
/* 回收资源 */
DestroyBuff(PolyBuff, iPolyNum);
DestroyPolyn(PolyAddRes);
DestroyPolyn(PolySubRes);
DestroyPolyn(PolyMulRes);

getch();
return 0;
}

status MakePolyBuff(PolyPointer *polyBuffHead, const int iPolyNum)
{
int iCounter;

*polyBuffHead = (PolyPointer)
malloc(sizeof(polynomial) * iPolyNum);
if (!(*polyBuffHead))
{
printf("错误,内存溢出!\n");
return FALSE;
}
for (iCounter = 0; iCounter < iPolyNum; iCounter++)
*(*polyBuffHead + iCounter) = NULL;

return TRUE;
}

status CreatePolyn(PolyPointer PolyBuff, int iPolyNum)
{
int iCounter, iExpon;
float fCoeff;
char strNum[100], strTemp[64], *cpCurr, *cpCurrNum;
polynomial pNewNode = NULL, pInsPos = NULL;

printf("\n请输入构造多项式的系数和指数...\n");
printf("输入一个多项式的方式为: 系数, 指数; ... ; 系数, 指数;\n例如: 3, 4; 5, 6; 7, 8;\n");
for (iCounter = 0; iCounter < iPolyNum; iCounter++)
{
printf("\n请输入第%d个多项式:\n", iCounter + 1);
gets(strNum);
if(!ProcStrError(strNum)) return FALSE;
cpCurr = cpCurrNum = strNum;
while (*cpCurr != '\0')
{
if (*cpCurr == ',')
{
strncpy(strTemp, cpCurrNum, cpCurr - cpCurrNum);
strTemp[cpCurr - cpCurrNum] = '\0';
fCoeff = (float)atof(strTemp);
cpCurrNum = cpCurr + 1;
}
else if (*cpCurr == ';')
{
strncpy(strTemp, cpCurrNum, cpCurr - cpCurrNum);
strTemp[cpCurr - cpCurrNum] = '\0';
iExpon = atoi(strTemp);
MakeNode(&pNewNode, fCoeff, iExpon);
AppNodeToList(PolyBuff + iCounter, pNewNode);
cpCurrNum = cpCurr + 1;
}
cpCurr++;
}
}

return TRUE;
}

status MakeNode(LinkType *pp, const float coeff, const int expon)
{
if (!(*pp = (LinkType)malloc(sizeof(NodeType) * 1)))
{
printf("Error, the memory is overflow!\n");
return FALSE;
}
(*pp)->fCoeff = coeff;
(*pp)->iExpon = expon;
(*pp)->next = NULL;

return TRUE;
}

void AppNodeToList(polynomial *pHead, polynomial pNewNode)
{
static polynomial pCurrNode;

if (!(*pHead))
(*pHead) = pCurrNode = pNewNode;
else
{
pCurrNode->next = pNewNode;
pCurrNode = pCurrNode->next;
}
}

void SortPolyn(PolyPointer PolyBuff, int iPolyNum)
{
int iCounter;
polynomial pTemp, pTempCurrNode, /* 临时链表 */
pPrevMinExp, pCurrMinExp,/* 指向最小iExpon结点的指针 */
pCurrNode, pPrevNode;

for (iCounter = 0; iCounter < iPolyNum; iCounter++)
{
pTemp = NULL;
while (*(PolyBuff + iCounter) != NULL)
{
pPrevNode = pPrevMinExp = pCurrMinExp =
*(PolyBuff + iCounter);
pCurrNode = (*(PolyBuff + iCounter))->next;
while (pCurrNode != NULL)
{
if (pCurrMinExp->iExpon > pCurrNode->iExpon)
{
pPrevMinExp = pPrevNode;
pCurrMinExp = pCurrNode;
}
pPrevNode = pCurrNode;
pCurrNode = pCurrNode->next;
}
/* 将系数最小的结点从原链表中取出 */
if (pCurrMinExp == *(PolyBuff + iCounter))
*(PolyBuff + iCounter) = pPrevMinExp->next;
else
pPrevMinExp->next = pCurrMinExp->next;
/* 将系数最小的结点插入升序链表 */
pCurrMinExp->next = NULL;
if (!pTemp)
pTemp = pTempCurrNode = pCurrMinExp;
else
{
pTempCurrNode->next = pCurrMinExp;
pTempCurrNode = pTempCurrNode->next;
}
}

*(PolyBuff + iCounter) = pTemp;
}
}

void MergePolynCoeff(PolyPointer PolyBuff, int iPolyNum)
{
int iCounter;
float MergeCoeffRes = 0;
polynomial TempList, ResList = NULL, pCurrNode, pPreNode,
pNewNode = NULL;

for (iCounter = 0; iCounter < iPolyNum; iCounter++)
{
pPreNode = TempList= *(PolyBuff + iCounter);
MergeCoeffRes = pPreNode->fCoeff;
pCurrNode = (*(PolyBuff + iCounter))->next;
while (pCurrNode != NULL)
{
while ((pCurrNode != NULL) &&
(pCurrNode->iExpon == pPreNode->iExpon))
{
MergeCoeffRes += pCurrNode->fCoeff;
pPreNode = pCurrNode;
pCurrNode = pCurrNode->next;
}

/* 在ResList中加入新结点 */
if (MergeCoeffRes != 0)
{
MakeNode(&pNewNode, MergeCoeffRes, pPreNode->iExpon);
AppNodeToList(&ResList, pNewNode);
MergeCoeffRes = 0;
}

pPreNode = pCurrNode;
}

DestroyPolyn(TempList);
*(PolyBuff + iCounter) = ResList;
ResList = NULL;
}

}

void AddProcess(PolyPointer polyBuff, const int iPolyNum,
PolyPointer pResult, const int iSign)
{
int iCounter;
float fCoeffRes;
polynomial pNewNode, pCurrNode_1, pCurrNode_2,
pDelList = NULL, /* 下次要删除的中间结果链表 */
pResList = NULL; /* 中间结果链表 */

pCurrNode_1 = *(polyBuff);
for (iCounter = 1; iCounter < iPolyNum; iCounter++)
{
pCurrNode_2 = *(polyBuff + iCounter);
while (pCurrNode_1 != NULL && pCurrNode_2 != NULL)
{
if (pCurrNode_1->iExpon == pCurrNode_2->iExpon)
{
fCoeffRes = 0;
fCoeffRes = pCurrNode_1->fCoeff +
iSign * pCurrNode_2->fCoeff;
if (fCoeffRes != 0)
{
MakeNode(&pNewNode, fCoeffRes,
pCurrNode_1->iExpon);
AppNodeToList(&pResList, pNewNode);
}
pCurrNode_1 = pCurrNode_1->next;
pCurrNode_2 = pCurrNode_2->next;
}
else if (pCurrNode_1->iExpon < pCurrNode_2->iExpon)
{
MakeNode(&pNewNode, pCurrNode_1->fCoeff,
pCurrNode_1->iExpon);
AppNodeToList(&pResList, pNewNode);
pCurrNode_1 = pCurrNode_1->next;
}
else /* 当pCurrNode_1->iExpon > pCurrNode_2->iExpon时候 */
{
MakeNode(&pNewNode, iSign * pCurrNode_2->fCoeff,
pCurrNode_2->iExpon);
AppNodeToList(&pResList, pNewNode);
pCurrNode_2 = pCurrNode_2->next;
}
}
/* 加入余下的多项式 */
while (pCurrNode_1 != NULL)
{
MakeNode(&pNewNode, pCurrNode_1->fCoeff,
pCurrNode_1->iExpon);
AppNodeToList(&pResList, pNewNode);
pCurrNode_1 = pCurrNode_1->next;
}
while (pCurrNode_2 != NULL)
{
MakeNode(&pNewNode, iSign * pCurrNode_2->fCoeff,
pCurrNode_2->iExpon);
AppNodeToList(&pResList, pNewNode);
pCurrNode_2 = pCurrNode_2->next;
}

if (pDelList != NULL) DestroyPolyn(pDelList);
pCurrNode_1 = pResList;
pDelList = pResList;
pResList = NULL;
}

*pResult = pCurrNode_1;
}

void SubstractProcess(PolyPointer polyBuff, const int iPolyNum,
PolyPointer pResult)
{
AddProcess(polyBuff, iPolyNum, pResult , NEGATIVE);
}

void MultiplyProcess(PolyPointer polyBuff, const int iPolyNum,
PolyPointer pResult)
{
int iCounter = 1, jCounter = 0, iLength; /* 缓冲区的长度 */
PolyPointer pTemPBuff = NULL; /* 存放中间结果的缓冲区 */
polynomial pCurrNode_1, pCurrNode_2, pNewNode = NULL;

/* 初始化 */
pCurrNode_1 = polyBuff[0];
iLength = PolynLength(polyBuff[0]);
MakePolyBuff(&pTempBuff, iLength);
while (TRUE)
{
while (pCurrNode_1 != NULL)
{
pCurrNode_2 = polyBuff[iCounter];
while (pCurrNode_2 != NULL)
{
MakeNode(&pNewNode,
pCurrNode_1->fCoeff * pCurrNode_2->fCoeff,
pCurrNode_1->iExpon + pCurrNode_2->iExpon);
AppNodeToList(&pTempBuff[jCounter], pNewNode);
pCurrNode_2 = pCurrNode_2->next;
}
jCounter++;
pCurrNode_1 = pCurrNode_1->next;
}

/* 回收旧的中间结果 */
if (pResult != NULL) DestroyPolyn(*pResult);
/* 获得新的中间结果 */
AddProcess(pTempBuff, iLength, pResult , POSITIVE);
DestroyBuff(pTempBuff, iLength); /* 回收存中间结果的缓冲区 */
jCounter = 0;
if (++iCounter >= iPolyNum)
break;
else
{
iLength = PolynLength(*pResult);
MakePolyBuff(&pTempBuff, iLength);
pCurrNode_1 = *pResult;
}
}
}

void PrintPolyn(const polynomial polyList)
{
polynomial pCurrNode = polyList;

printf("多项式的长度为: %d\n", PolynLength(polyList));
while (pCurrNode != NULL)
{
printf("%.2fX^%d", pCurrNode->fCoeff, pCurrNode->iExpon);
if (pCurrNode->next != NULL)
if (pCurrNode->next->fCoeff > 0 )
printf("+");
pCurrNode = pCurrNode->next;
}
printf("\n");
}

int PolynLength(const polynomial polyList)
{
int iLength = 0;
polynomial pCurrNode = polyList;

while (pCurrNode != NULL)
{
pCurrNode = pCurrNode->next;
iLength++;
}
return iLength;
}

void DestroyBuff(PolyPointer polyBuff, const int iPolyNum)
{
int iCounter;

for (iCounter = 0; iCounter < iPolyNum; iCounter++)
DestroyPolyn(polyBuff[iCounter]);
free(polyBuff);
}

void DestroyPolyn(polynomial polyList)
{
polynomial pCurrNode;

while (polyList != NULL)
{
pCurrNode = polyList;
polyList = polyList->next;
free(pCurrNode);
}
}

status ProcStrError(const char str[])
{
const char *cpCurr = str;

if (!strlen(str))
{
printf("你没有输入数据!\n");
return FALSE;
}
while (*cpCurr != '\0')
{
if (!(*cpCurr == ' ' || *cpCurr == ',' || *cpCurr == ';'
|| *cpCurr == '-')
&& ('0' > *cpCurr || *cpCurr > '9')
|| (*(cpCurr + 1) == '\0' && *cpCurr != ';'))
{
printf("输入数据出错,请注意正确的输入方式!\n");
return FALSE;
}
cpCurr++;
}

return TRUE

怎样将多项式化成几个乘积的形式

因式分解的四种基本公式如下:

1、平方差公式:a²-b²=(a+b)(a-b)

在三角函数公式中,有一组公式被称为三角平方差公式。由于酷似平方差公式而得名,主要用于解三角形。

2、完全平方公式:a²+2ab+b²=(a+b)²

两数和(或差)的平方,等于它们的平方和,加上(或减去)它们的积的2倍即完全平方公式.

这个公式的结构特征是:左边是两个相同的二项式相乘,右边是三项式,是左边二中两项的平方和,加上(这两项相加时)或减去(这两项相减时)这两项乘积的2倍:公式中的字母可以表示具体的数(正数或负数),也可以表示单项式或多项式等代数式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文链接:http://www.370seo.com/13577.html

“多项式乘多项式 多项式乘多项式解析” 的相关文章

12星座哪个星座的男生最温柔(12星座男生该怎么对付)

12星座哪个星座的男生最温柔(12星座男生该怎么对付)

本文共计11467个文字,预计阅读时间需要38分4秒,由作者编辑整理创作于2023年08月09日 08点06分43秒。12星座哪个星座的男生最温柔   温柔一词原本是形容温和柔顺的女子,但在如今的现代社会同样可以用在男子身上,他们一般都会把如沐春风的微笑挂在嘴角,如同一个邻家的大哥哥,待人宽...

12星座男生喜欢一个人的表现(星座男生最喜欢什么礼物)

12星座男生喜欢一个人的表现(星座男生最喜欢什么礼物)

本文共计7170个文字,预计阅读时间需要23分45秒,由作者编辑整理创作于2023年08月10日 20点46分55秒。12星座男生喜欢一个人的表现 12星座男生喜欢一个人   12星座男生喜欢一个人,众所周知判定十二星座的男起初是不是喜欢你非常的简单,找到这个星座属性最最在乎的事情,看他们是不是...

teach的用法有哪些(teach的用法 动词teach的用法详解)

teach的用法有哪些(teach的用法 动词teach的用法详解)

本文共计3059个文字,预计阅读时间需要10分3秒,由作者编辑整理创作于2023年08月12日 12点00分58秒。teach的用法有哪些 teach词汇分析音标:英 [tiːtʃ]     美 [tiːtʃ] 一、释义1、teach的基本意思是以训练或授课的方式“传授知识或技能”。2、teach既...

日月星辰都是你什么意思(日月星辰是什么意思啊?)

日月星辰都是你什么意思(日月星辰是什么意思啊?)

本文共计1455个文字,预计阅读时间需要4分42秒,由作者编辑整理创作于2023年08月12日 12点29分37秒。日月星辰都是你什么意思 眼中只有你的存在。日月星辰都是你的意思是不管周围是刮风还是下雨,眼中只有你的存在。日、月、星辰是人类对宇宙行星的统称,其由来现存文字记载最早见于《山海经》。 日...

这段感情应该保持着联络是什么歌?

本文共计1151个文字,预计阅读时间需要3分41秒,由作者编辑整理创作于2023年08月12日 13点48分46秒。这段感情应该保持着联络是什么歌? 时光,会让我们为很多故事画上句号。安静的人,在时光里把心,养宜的更安稳,而烦躁的人,也会被时光打磨掉那些躁动的棱角,让心变得逐渐圆润起来。那些忧伤的...

最新男的退休是65岁还是60岁(公务员男的退休是65岁还是60岁)

最新男的退休是65岁还是60岁(公务员男的退休是65岁还是60岁)

本文共计2967个文字,预计阅读时间需要9分44秒,由作者编辑整理创作于2023年08月12日 22点03分56秒。最新男的退休是65岁还是60岁 【法律分析】:现在国家规定的退休年龄是男性满60周岁,女干部满55周岁,女职工满50周岁。男性65岁退休的规定为推迟退休年龄规定,到今天为止,没有推迟退...