首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何正确找到多项式根?

如何正确找到多项式根?
EN

Stack Overflow用户
提问于 2016-08-31 18:46:53
回答 3查看 561关注 0票数 7

考虑一个多项式,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p = [1 -9 27 -27];

显然,真正的根是3:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
polyval(p,3)

0

同时使用roots函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q = roots([1 -9 27 -27]);

format short

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q =

   3.0000 + 0.0000i
   3.0000 + 0.0000i
   3.0000 - 0.0000i

并检查这些根是否真实:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bsxfun(@eq,ones(size(q)),isreal(q))

0
0
0

更糟糕的是,对于format long,我得到了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
roots([1 -9 27 -27])

ans =

  3.000019414068325 + 0.000000000000000i
  2.999990292965843 + 0.000016813349886i
  2.999990292965843 - 0.000016813349886i

如何正确计算多项式的根?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-31 21:13:39

这是由于浮点不准确。查看这篇文章以获得详细信息:Is floating point math broken?

你可以做的一件事就是把答案舍入小数点后的几位,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q = round(roots([1 -9 27 -27]), 4) % rounding off to 4 decimal places
票数 5
EN

Stack Overflow用户

发布于 2016-09-01 01:59:10

你可能得象征性地工作。你需要符号数学工具箱。

  1. 将多项式定义为符号函数。您可以(a)使用poly2sym从其系数生成符号多项式。或者(b)更好的是,直接使用字符串定义符号函数。这样,您就避免了将系数表示为double可能导致的准确性损失。
  2. 使用solve,它象征性地解决代数方程。

带有选项(A)的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p = [1 -9 27 -27];
ps = poly2sym(p);
rs = solve(ps);

有选项(B)的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ps = sym('x^3-9*x^2+27*x-27');
rs = solve(ps);

在任何一种情况下,结果都是象征性的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>> rs
rs =
 3
 3
 3

您可能希望使用以下方法将其转换为数值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
r = double(rs);

在您的示例中,这将给出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>> format long
>> r
r =
     3
     3
     3
票数 6
EN

Stack Overflow用户

发布于 2016-09-09 07:00:54

这是非常特定于你的多项式。通常,您必须期望多重性的根m有一个相对浮点误差为mu^(1/m),其中mu=1e-15是机器的精度。在这种情况下,多重性是m=3,因此是10^(-5)范围内的错误。这正是你结果中错误的大小。

这是matlab方法的结果,它计算了伴随矩阵的特征值,并在算法的第一步将整数矩阵转化为具有相应四舍五入误差的适当浮点矩阵。

其他算法对多重性和相关的近似根簇进行了经验检验,从而能够纠正这一错误。在这种情况下,您可以通过将每个根替换为3个根的平均值来实现这一点。

从数学上讲,你有一些多项式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p(x)=(x-a)^m*q(x)

x=a处有一个具有多重性的m根。由于浮点运算,求解器有效地“看到”一个多项式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
p(x)+e(x)

其中,e(x)系数具有一个大小,即p乘以mu系数的大小。在根a附近,这个受扰动的多项式可以被有效地替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(x-a)^m*q(a)+e(a) = 0  <==>  (x-a)^m = -e(a)/q(a)

使得解形成一个m点正多边形或以a为中心的恒星,其半径为|e(a)/q(a)|^(1/m),应该在|a|*mu^(1/m)区域内。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39261924

复制
相关文章
使用CSV模块和Pandas在Python中读取和写入CSV文件
CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据。CSV是一种紧凑,简单且通用的数据交换通用格式。许多在线服务允许其用户将网站中的表格数据导出到CSV文件中。CSV文件将在Excel中打开,几乎所有数据库都具有允许从CSV文件导入的工具。标准格式由行和列数据定义。此外,每行以换行符终止,以开始下一行。同样在行内,每列用逗号分隔。
用户7466307
2020/06/16
20.1K0
JAVA读取csv文件_java读取csv文件某一列
当读取的是一个简单的csv文件,即文件的列字段中不包含分隔符时,可以使用BufferedReader或者Scanner类去读取
全栈程序员站长
2022/11/16
3.8K0
java读取写入CSV文件
[1]使用Split函数分成一个String[]: https://blog.csdn.net/u013555719/article/details/106029538
演化计算与人工智能
2020/08/14
4.1K0
java读取写入CSV文件
python中的可变数据类型和不可变数据类型
不允许变量的值发生变化,如果变量的值变化了,那么就是新建了一个对象;对于相同值的对象,在内存中只有一个对象。
西西嘛呦
2020/08/26
6350
python中如何打开csv文件_python如何读取csv文件
python如何读取csv文件,我们这里需要用到python自带的csv模块,有了这个模块读取数据就变得非常容易了。
全栈程序员站长
2022/09/16
7.9K0
python中如何打开csv文件_python如何读取csv文件
可变、不可变数据类型
可变数据类型:在id不变的情况下,value可改变(列表和字典是可变类型,但是字典中的key值必须是不可变类型)
py3study
2020/01/20
7670
csv写入与读取
import csv #若存在文件,则打开csv文件,若不存在,则新建文件 #若不设置newline=””,则每行数据会隔一行空包行 csvfile = open(“csv_test.csv”,”w”,newline = “”) #w是覆盖形写入,a是追加写入 #将文件加载到csv对象中 writer = csv.writer(csvfile) #写入一行数据 writer.writerow([‘姓名’,’年龄’,’电话’]) #多行数据写入 data = [ (‘张三’,’18’,’0291321332′), (‘李四’,’21’,’2932131934′) ] writer.writerows(data) #关闭csv对象 csvfile.close()
kirin
2021/03/11
1.1K0
Java工具集-Csv文件读取工具类
添加依赖 <!--开源的opencsv--> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.6</version> </dependency> 代码示例 import java.io.FileInputStream; import java.io.FileNot
cwl_java
2020/05/01
2K0
在python中使用csv读写CSV 原
1.一般读写方式 # 读取csv文件 import csv with open('some.csv', 'rb') as f: # 采用b的方式处理可以省去很多问题 reader = csv.reader(f) for row in reader: # do something with row, such as row[0],row[1] import csv with open('some.csv', 'wb') as f: # 采用b的方式
晓歌
2018/08/15
1.1K0
[译] 为什么String在Java中是不可变的
String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。 本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。
haifeiWu
2020/02/10
1.3K0
jmeter读取csv文件
操作步骤: 1.读取csv文件 2.编辑httpSampler
互联网金融打杂
2018/08/02
1.5K0
jmeter读取csv文件
Tensorflow | 读取csv文件
结果好长,给出关键的部分: INFO:tensorflow:Saving evaluation summary for step 12001: accuracy = 0.966667, loss = 0.461221 Accuracy: 0.966667
努力在北京混出人样
2019/02/18
1.8K0
在python中读取和写入CSV文件(你真的会吗?)「建议收藏」
注意,打开文件时应指定格式为w, 文本写入. 打开文件时,指定不自动添加新行newline=‘’,否则每写入一行就或多一个空行。
全栈程序员站长
2022/09/16
5.2K0
在python中读取和写入CSV文件(你真的会吗?)「建议收藏」
可变与不可变数据类型
根据可变数据类型与不可变数据类型的概念,只需要在改变value值的同时,使用id()函数查看变量id值是否变化就可以知道这种数据类型是可变的还是不可变的了
全栈程序员站长
2022/07/21
4800
Java读取csv文件的三种方式
最近需要进行对数据库的数据进行导入导出,之前使用的方式是,同时接到两台数据库上,进行读写操作;
JQ实验室
2022/09/29
9K0
Java读取pkl文件_theano csv到pkl文件
my_data = genfromtxt(csvFile, delimiter=’,’, skip_header=1)
全栈程序员站长
2022/09/30
1.3K0
Java Varargs 可变参数使用
"Varargs"是 “variable number of arguments”的意思。有时候也被简单的称为 “variable arguments”。
HoneyMoose
2020/02/14
1.2K0
go语言读取CSV文件
package main import ( "encoding/csv" "fmt" "io/ioutil" "strings" ) // 游戏读取数据,读取游戏配置数据 func ReadCsv_ConfigFile_Fun(fileName string) bool { // 获取数据,按照文件 fileName = "./csv/" + fileName cntb, err := iouti
李海彬
2018/03/22
6.5K0
Python读取CSV和Excel
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列.
Minerva
2020/05/21
3.4K0
Python学习:读取csv文件
CSV是Conma Sepatrate Values(逗号分隔值)的缩写,文档的内容是由‘,’分隔的一列列数据构成的。CSV格式是电子表格和数据库最常用的导入和导出格式。 CSV模块实现了以CSV格式读取和写入表格数据,它允许程序员以Excel首选格式写入数据,或者从Excel生成的文件中读取数据。
烤粽子
2021/07/07
2.7K0
Python学习:读取csv文件

相似问题

在Java中读取csv

20

在python中读取可变列多头csv文件

21

在Java中读取CSV文件

21

在Java / Jython中读取CSV

23

在java中读取大型CSV

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文