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

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

370SEO1年前 (2023-12-31)175

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

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星座男生对女生好的表现?

本文共计5875个文字,预计阅读时间需要19分26秒,由作者编辑整理创作于2023年08月09日 05点01分07秒。12星座男生对女生好的表现? 每个人对别人好的方式不一样,每个男生对女生好的方式也各有差别,那么十二星座男生对女生好的表现又会是什么样子呢?可能你认为并不是很好的东西,对于他们来说却...

12星座萌图片卡通 12星座动漫图片可爱呆萌(12星座都是动漫里的谁)

本文共计3294个文字,预计阅读时间需要10分50秒,由作者编辑整理创作于2023年08月10日 01点17分34秒。12星座萌图片卡通 12星座动漫图片可爱呆萌 12星座萌图片卡通 金牛座 双子座 巨蟹座 狮子座 处女座 天秤座 天蝎座 射手...

哪些星座女容易喜欢穷男生(十二星座里面最容易追的星座女)

哪些星座女容易喜欢穷男生(十二星座里面最容易追的星座女)

本文共计8244个文字,预计阅读时间需要27分19秒,由作者编辑整理创作于2023年08月10日 04点09分01秒。哪些星座女容易喜欢穷男生 哪些星座女容易喜欢穷男生 巨蟹女 巨蟹女很清楚自己要的是什么,也很清楚自己的付出用在哪里,如果这一辈子没有遇到动心的人时,那么她会挑一个有钱人来嫁,可...

12星座男生的性格12星座中的男生有哪些性格特点?

12星座男生的性格12星座中的男生有哪些性格特点?

本文共计5741个文字,预计阅读时间需要18分59秒,由作者编辑整理创作于2023年08月10日 23点15分59秒。12星座男生的性格12星座中的男生有哪些性格特点? 每个星座都有自己的性格,不同的性格也决定了看待事物和思想的差异,我们的未来也和我们的看法有着千丝万缕的联系。我们之所以独特,是因为...

十二星座男生的表白指南(十二星座哪个男生最容易表白)

十二星座男生的表白指南(十二星座哪个男生最容易表白)

本文共计4026个文字,预计阅读时间需要13分16秒,由作者编辑整理创作于2023年08月11日 17点33分05秒。十二星座男生的表白指南   毕业季,表白季,在毕业即将到来的时候,暗恋很久的男生终于会趁着聚餐,写纪念册等等时机,表白自己心动已久的恋情。下面我们来给大家看一下十二星座男生的表白指...

摩羯座男生容易受伤吗?为什么天蝎座的男生容易受伤?

摩羯座男生容易受伤吗?为什么天蝎座的男生容易受伤?

本文共计10792个文字,预计阅读时间需要35分49秒,由作者编辑整理创作于2023年08月11日 19点05分24秒。摩羯座男生容易受伤吗?容易 这是星座占卜上说的 其实我也不相信!为什么天蝎座的男生容易受伤?经典的天蝎男可以这样来勾画他的轮廓:  思维清晰敏捷,策略而大胆。      事业上...