【基础算法】多项式三大运算 C++实现

news2024/11/13 16:51:14

●多项式计算

一维多项式就是包含一个变量的多项式,一个一维多项式示例如下:

一维多项式求值就是对于上述多项式,计算在指定的x处的函数值。一个通用的计算多项式值的算法可以采用递推的方式,可以将上述多项式变为如下的等价形式(提公因式变形):

下面,我们按照这个算法来计算我们程序中的多项式。宏定义中已规定多项式系数的个数为7,并且在程序中我们输入系数值,则多项式如下所示:

输入的6个未知数x的值分别为,-2、-0.5、1、2、3.7、4 ,带入上式多项式则可知我们要求以下几个多项式的值:

 最后在程序中用计算多项式值的算法对其进行计算,并求得结果。

#include<iostream>
using namespace std;
#define sizea 7  //多项式系数个数
#define sizex 6  //未知数x的个数
class calculator {
public:
	double polynomials_1(double x)
	{
		result = a[sizea - 1];
		for(int i=sizea-2;i>=0;i--)
		{ 
			result = result * x + a[i];			
			//P(x)=A(n-1)*X^n-1+A(n-2)*X^n-2+...+A(1)*x+A(0)
			//P(x)=(...((A(n-1)X+A(n-2))X+A(n-3))X+...+A1)x+A(0)
		}
		return result;
	}
	double a[sizea];
	double x[sizex];
	double result;
};
void polynomials(calculator &c)
{
	for (int i = 0; i < sizex; i++)
	{
		c.polynomials_1(c.x[i]);
		cout << "x=" << c.x[i] << " " << "p(x)=" << c.result << endl;
	}
}
void text()
{
	calculator c;
	cout << "请输入系数:" << endl;
	for(int i=0;i<sizea;i++)
	{ 
		cin >> c.a[i];
	}
	cout << "请输入x的值:" << endl;
	for(int j=0;j<sizex;j++)
	{ 
		cin >> c.x[j];
	}
	polynomials(c);
}
int main()
{
	text();
}


 ●多项式乘法

多项式乘法就是将两个多项式进行相乘,最后得到一个新的多项式。如下所示:

这两个多项式相乘的结果如下:

 在下面的程序中,宏定义已确定多项式①的系数个数为6个,多项式②的系数个数为4个,则两个多项式如下所示:

 最后在程序中运用两个多项式相乘的算法公式对其进行计算,并且求得结果。

#include<iostream>
using namespace std;
#define sizea 6  //多项式①的系数个数
#define sizeb 4  //多项式②的系数个数
#define sizec 9
class calculator {
public:
	void polynomialsmull()
	{
		for(int i=0;i<sizea;i++)
		{ 
			for(int j=0;j<sizeb;j++)
			{ 
				c[i + j] += a[i] * b[j];
				/*  
                    [0]=[0]*[0]/[1]=[0]*[1]/[2]=[0]*[2]/[3]=[0]*[3]
			        [1]=[1]*[0]/[2]=[1]*[1]/[3]=[1]*[2]/[4]=[1]*[3]
			        [2]=[2]*[0]/[3]=[2]*[1]/[4]=[2]*[2]/[5]=[2]*[3]
			        ...
			    */
			}
		}
	}
	void showresult()
	{
		cout << "两多项式相乘各项的系数如下:" << endl;
		for (int k = 0; k < sizec; k++)
		{
			cout << c[k] << " ";
		}
	}
	double a[sizea];
	double b[sizeb];
	double c[sizec] = {0};  //先将该数组每项置为0
};
void text()
{
	calculator c;
	cout << "请输入多项式①的系数a:" << endl;
	for(int i=0;i<sizea;i++)
	{ 
		cin >> c.a[i];
	}
	cout << "请输入多项式②的系数b:" << endl;
	for(int j=0;j<sizeb;j++)
	{ 
		cin >> c.b[j];
	}
	c.polynomialsmull();
	c.showresult();
}
int main()
{
	text();
}


 ●多项式除法

多项式除法就是将两个多项式进行相除,最后得到一个商多项式和余多项式,如下所示得两个多项式:

通过推算我们可以知道商多项式为 r(x)的最高次数为k=m-n,余多项式的最高次数为n-2.在数学上通过综合除法来计算商多项式 r(x)和余多项式为 l(x)中的各个系数,结合程序可进行进一步的细致理解。商多项式 l(x)的各个系数由下列递推算法来求得:

               在下面的程序中,宏定义已确定多项式①的系数个数为5个,多项式②的系数个数为3个,则两个多项式如下所示:

  最后在程序中运用两个多项式相除的算法公式及其数学内容对其进行计算,并且求得结果。

#include<iostream>
using namespace std;
#define sizea 5   //多项式①的系数项个数
#define sizeb 3   //多项式②的系数项个数
#define sizer 3
#define sizel 2
class calculator {
public:
	void polynomials_div()
	{
		//计算商多项式系数和余多项式系数
		int m, n;
		n = sizea - 1;
		for(int i=sizer;i>0;i--)
		{ 
			r[i - 1] = a[n] / b[sizeb - 1];    //商
			m = n;
			for (int j = 1; j <= sizeb - 1; j++)
			{
				a[m - 1] -= r[i - 1] * b[sizeb - j - 1];  //余
				m -= 1;
			}
			n -= 1;
		}
		for (int k = 0; k < sizel; k++)
		{
			l[k] = a[k];
		}
	}
	void showresult()
	{
		cout << "请输出商多项式:" << endl;
		for (int i = 0; i < sizer; i++)
		{
			cout << r[i]<<" ";
		}
		cout << endl;
		cout << "请输出余多项式:" << endl;
		for (int i = 0; i < sizel; i++)
		{
			cout << l[i] <<" ";
		}
	}
	double a[sizea];
	double b[sizeb];
	double r[sizer] = { 0 };
	double l[sizel] = { 0 };
};
void text()
{
	calculator c;
	cout << "请输入多项式①的系数a:" << endl;
	for(int i=0;i<sizea;i++)
	{ 
		cin >> c.a[i];
	}
	cout << "请输入多项式②的系数b:" << endl;
	for(int j=0;j<sizeb;j++)
	{ 
		cin >> c.b[j];
	}
	c.polynomials_div();
	c.showresult();
}
int main()
{
	text();
}


 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

位运算 离散化 区间和算法

目录一、位运算1.1 思路1.1 例题&#xff1a;二进制中1的个数二、离散化2.1 概念2.2 例题&#xff1a;区间和三、合并区间3.1 概念3.2 例题&#xff1a;合并区间一、位运算 1.1 思路 首先知道一个概念&#xff1a;一个正整数的负数等于其按位取反后1 -x ~x 1 举个例子&…

干货——生产型企业的供应商管理系统模板

供应商管理主要是是通过提高供货产品和服务质量及交付能力&#xff0c;缩短企业采购周期和生产成本&#xff0c;从而提升产品核心竞争力。随着如今信息技术的发展&#xff0c;采用先进的信息化手段更能够提升供应商管控能力&#xff0c;实现资源的有效整合&#xff0c;从而加强…

[附源码]计算机毕业设计疫苗药品批量扫码识别追溯系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

测试服务器的udping值

测试服务器的udping值参考下载工具步骤一&#xff1a;在服务器上启动UDP Echo服务(必须)启动**UDP Echo服务**步骤二&#xff1a;在客户端下载UDPing工具步骤三&#xff1a;在客户端测试UDPing值参考 https://help.aliyun.com/document_detail/158771.html UDPing项目地址: h…

阿里资深架构师整理分享的分布式系统架构:技术栈详解与进阶文档

前言 有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台…

PyTorch 2.0 重磅发布:一行代码提速 30%

在今天的 PyTorch 2022 开发者大会上&#xff0c;PyTorch 团队发布了一个新特性torch.compile&#xff0c;这个新特性将 PyTorch 的性能推向了新高度&#xff0c;并开始将 PyTorch 的部分实现从 C 中迁移到 Python 中。他们相信这是 PyTorch 一个实质性的新方向--因此称之为 **…

(最优化理论与方法)第六章无约束优化算法-第一节:线搜索方法

文章目录一&#xff1a;无约束优化问题概述二&#xff1a;线搜索方法&#xff08;1&#xff09;概述&#xff08;2&#xff09;线搜索准则A&#xff1a;Armijo准则①&#xff1a;概述②&#xff1a;Armjio准则缺陷③&#xff1a;回退法④&#xff1a;代码B&#xff1a;Goldstei…

从固定管线到可编程管线:十段代码入门OpenGL

文章目录1. 最简单的OpenGL应用程序2. 视点系统和投影矩阵3. 深度缓冲区和深度测试4. 模型的旋转和平移5. VBO和顶点混合数组6. 纹理映射和纹理坐标7. 光照和法向量计算8. 最简单的着色器程序9. 着色器中的MVP矩阵10. 着色器中的漫反射、镜面反射和高光计算1. 最简单的OpenGL应…

【什么是区块链】

区块链技术简介前言一、区块链技术简介二、区块链的特点1.去中心化2.去信任3.不可篡改和伪造4.可溯源5.匿名性三、区块链用到的技术1.非对称密码算法2.哈希函数3.P2P网络4.安全多方计算前言 比特币与区块链的关系&#xff1a; 2008年中本聪&#xff08;Satoshi Nakamoto&…

Python中logging日志模块详解

用Python写代码的时候&#xff0c;在想看的地方写个print xx 就能在控制台上显示打印信息&#xff0c;这样子就能知道它是什么了&#xff0c;但是当我需要看大量的地方或者在一个文件中查看的时候&#xff0c;这时候print就不大方便了&#xff0c;所以Python引入了logging模块来…

104.二叉树的最大深度 | 111.二叉树的最小深度

文章目录二叉树的深度104.二叉树的最大深度题目题解111.二叉树的最小深度题目题解二叉树的深度 104.二叉树的最大深度 题目 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。…

Mac终端常用命令

1、打开窗口命令 快速打开&#xff1a;command空格&#xff08;打开查询&#xff09;&#xff0c;输入ter回车 打开多个窗口&#xff1a;commandN&#xff08;光标在终端执行此操作&#xff09; 2、目录操作 命令名 命令功能 备注 cd 打开当前目录 cd dirname pwd 显示…

Java 调用 Cpp 代码简单示例

Java 调用 Cpp 代码 前言&#xff1a;首先说明一下&#xff0c;本篇文章是干嘛的&#xff0c;简单来说就是在 Java 代码里调用 C 代码。但是呢&#xff0c;这里只做一个简单的示例&#xff0c;调用最简单的 C 代码&#xff0c;起到一个抛砖引玉的作用。如有不对之处&#xff0…

选择编码节点的最佳数量和位置研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

[附源码]计算机毕业设计校园招聘微信小程序Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

代码随想录训练营第39天|LeetCode 62.不同路径、63. 不同路径 II

参考 代码随想录 题目一&#xff1a;LeetCode 62.不同路径 相比于之前的爬楼梯&#xff0c;这题变成了二维&#xff0c;对于某个位置[i,j]&#xff0c;可以从[i-1,j]或者[i,j-1]走到[i,j]&#xff0c;因此在求解思想上其实是类似于爬楼梯的。 确定dp数组及其下标的含义 dp[…

Android Camera性能分析 - 第26讲 DequeueBuffer Latency

本讲是Android Camera性能分析专题的第26讲 ​&#xff0c;我们介绍DequeueBuffer Latency&#xff0c;包括如下内容&#xff1a; DequeueBuffer Latency是什么DequeueBuffer Latency配置DequeeuBuffer Latency实战 视频在线观看&#xff1a; 极客笔记&#xff1a;极客笔记在…

JavaScript正则表达式:正则表达式中的特殊字符

正则表达式的组成 一个正则表达式可以由简单的字符构成&#xff0c;比如 /abc/&#xff0c;也可以是简单和特殊字符的组合&#xff0c;比如 /ab*c/ 。其中特殊字符也被称为元字符&#xff0c;在正则表达式中是具有特殊意义的专用符号&#xff0c;如 ^ 、$ 、 等。 特殊字符非…

logos_HSST简要说明

HSST分为PCS和PMA&#xff0c; TX PCS&#xff1a;8b/10b编码 RX PCS TX PMA RX PMA 含1个HSST&#xff0c;有4个全双工收发LANE。 LINE和PLL的关系 PLL0可以为4个LANE提供时钟&#xff0c;PLL1只能为LANE2&3提供时钟。 PLL VCO 的转出频率范围为 2.125GHz~3.1875GHz。PLL…

【关于Linux中----文件接口、描述符、重定向、系统调用和缓冲区】

文章目录一、C文件接口中的那些事儿二、接口介绍三、文件描述符fd四、重定向五、缓冲区一、C文件接口中的那些事儿 众所周知&#xff0c;Linux是用C语言写成的&#xff0c;那在这篇文章的开头&#xff0c;自然要先对C语言中的文件操作进行一个概括&#xff01; 写文件&#x…