精华内容
下载资源
问答
  • 矩阵多项式方程根的求解问题,贾野,曾樊慧,本文研究了在f(x)为矩阵多项式的情况下,矩阵多项式方程f(x)=A(A为矩阵)的求解问题。本文利用高等代数中复数域上有关矩阵相�
  • 运用多项式方程根的性质理论及著名的 牛顿公式, 解决 了牛 领公 式用于多项式方程 时迭 代初值的选取, 并求出多项式方程的所有实根 。 同时给 出了算例。
  • 先说明一下多项式方程的特点,对于n次多项式方程,实数的可能情况包括(此处只说明实数): 1、有n个不同实; 2、的数量小于n,大于0,即有多个相同实; 3、无实数,即方程所表示的曲线与X轴无交点...

    对于一个多项式方程:a0+a1x+a2x2+...+anxn=0a_0+a_1x+a_2x^2+...+a^nx^n=0而言,想要准确求得解析解是一件比较困难的事,特别是次数比较高的时候,一般我们可以利用数值方法求得数值解。

    先说明一下多项式方程的根的特点,对于n次多项式方程,实数根的可能情况包括(此处只说明实数根):
    1、有n个不同实根;
    2、根的数量小于n,大于0,即有多个相同实根;
    3、无实数根,即方程所表示的曲线与X轴无交点;

    在OpenCV中提供了cv::sovlePoly函数可以用来求解多项式方程的数值解,非常方便。
    官方文档中给出了定义:
    在这里插入图片描述

    输入为系数矩阵,从0次到n次排布,
    输出为一个列数为2的矩阵,每一行是一个根,由实部和虚部组成,从这也能看出这个函数能够求出方程所有的根,包括虚根。
    返回值为误差值。

    直接上测试代码:

    #include <iostream>
    #include <opencv2/opencv.hpp>
    #include <cmath>
    using std::cout;
    using std::endl;
    
    int main() {
        std::vector<double> coefs = {1, 0, 0};
        std::vector<double> coefs1 = {1, 5, 4};
        std::vector<double> coefs2 = {0, 0, 4};
        std::vector<double> coefs3 = {0, 0, 0};
        std::vector<double> roots;
        cv::Mat rots;
        auto ret = cv::solvePoly(coefs3, rots);
        cout<<rots.type()<<" "<<CV_64FC1<<endl;
        cout<<ret<<endl;
    
        cout<<rots<<endl;
    
        return 0;
    }
    

    注意区分使用不同的系数时求得的根的结果的不同。

    【参考】
    1、OpenCV:solvePoly多项式方程求解函数

    展开全文
  • 多项式方程

    2021-05-25 09:55:42
    的特征值就是的. 使用Eigen进行多项式的求解: #include <iostream> #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include <Eigen/Dense> using namespace std; int main...

    参考别人的博客,顺便借鉴过来作个笔记.

    一.使用多项式的伴随矩阵进行求解

    多项式:  P(x)=x^{n} + c_{n-1}x^{n-1}+c_{n-2}x^{n-2}+...+c_{1}x+c_{0}

    多项式的伴随矩阵:

    M_{x} =\begin{bmatrix} 0& 0& ...& 0&-c_{0}\\ 1& 0& ...& 0& -c_{1}\\ 0& 1& ...& 0& -c_{2}\\ 0& 0& ...& ...&... \\ 0& 0& ...& 1& -c_{n-1} \end{bmatrix}

    的特征值就是P(x)的根.

    Ay = \lambda y

    其中A是个方阵,y是个列向量,\lambda是个常量,其中y是矩阵A的特征向量,\lambda是矩阵A的特征值.

    使用Eigen进行多项式的求解:

    #include <iostream>
    #include <Eigen/Core>
    // 稠密矩阵的代数运算(逆,特征值等)
    #include <Eigen/Dense>
    using namespace std;
    
    int main( int argc, char** argv )
    {
    
        Eigen::Matrix<double, 4, 4> matrix_44;
        //复数动态矩阵
        //P(x) = x^4 + 2*x^3 +3*x^2 +4*x + 5;
    	Eigen::Matrix<complex<double>, Eigen::Dynamic, Eigen::Dynamic> matrix_eigenvalues;
    	//同样测试 12345
        matrix_44 <<                 0, 0, 0, -5,
    				 1, 0, 0, -4,
    				 0, 1, 0, -3,
    				 0, 0, 1, -2;
    
    	std::cout<<"matrix_44: "<<std::endl<<matrix_44<<std::endl<<std::endl;
    
    	matrix_eigenvalues = matrix_44.eigenvalues();
    	//std::cout<<"matrix_44.eigenvalues: "<<std::endl<<matrix_44.eigenvalues()<<std::endl;
    	std::cout<<"matrix_eigenvalues: "<<std::endl<<matrix_eigenvalues<<std::endl;
    	return 0;
    }
    
    
    

    或者使用Eigen多项式

    #include<iostream>
    #include <Eigen/Eigen>
    #include <unsupported/Eigen/Polynomials>
    using namespace std;
    
    int main()
    {
        Eigen::PolynomialSolver<double,Eigen::Dynamic> solver; //多项式求根
        Eigen::VectorXd coeff(5);
        coeff[0] = 5;
        coeff[1] = 4;
        coeff[2] = 3;
        coeff[3] = 2;
        coeff[4] = 1;
        solver.compute(coeff);  //compute()计算多项式复数根
        const Eigen::PolynomialSolver<double,Eigen::Dynamic>::RootsType& r = solver.roots();  //roots()返回多项式复数根
        std::vector<double> real_root;
        for (int i = 0; i< r.rows();++i)
        {
            if (r[i].imag() != 0.0)
            {
                continue;
            }
            real_root.push_back(r[i].real());
        }
       
    for(int i=0;i<real_root.size();++i)
    {
      cout<<"多项式方程的实根:"<<real_root[i]<<std::endl;
    }
    return 0;
      
    }

    参看链接:

    https://blog.csdn.net/fb_941219/article/details/102984587

    http://eigen.tuxfamily.org/dox-devel/unsupported/classEigen_1_1PolynomialSolverBase.html#a07bcd5339be5eacdf7e566d07d81bedb

    展开全文
  • 本研究提出了一种求解多项式方程的新方法。 描述了基于最近开发的用于求解三次方程的新方法的两种求解四次方程的技术。 高阶多项式方程是通过... 建议在规定的条件下,提出的方法提供了寻找多项式方程根的有效技术。
  • OpenCV2.2求解多项式方程

    千次阅读 2012-04-05 16:48:01
     这两天遇到了一个难题,就是多项式方程的求解,因为自己比较懒,不想自己去写一个方程求解的程序,所以想在网上找找,没想到OpenCV2.2种就有(以前只用过OpenCV1.1)一个函数solvePoly就是求解多项式方程的。...

              最近一直在编写C++的算法程序,因为以前使用过OpenCV,觉得OpenCV当中的矩阵运算做的很不错,所以就拿来用用。

            这两天遇到了一个难题,就是多项式方程的根的求解,因为自己比较懒,不想自己去写一个方程求解的程序,所以想在网上找找,没想到OpenCV2.2种就有(以前只用过OpenCV1.1)一个函数solvePoly就是求解多项式方程的。

            可是这一用问题就有来了,使用之后发现该函数的求解结构和用Matlab求解的结构相差很大,于是乎和往常一样上网查询,可是网上关于较高版本的OpenCV的说明基本上没有,对于OpenCV矩阵操作的一些介绍也都只是停留在简单的矩阵操作上,关于solvePoly函数的唯一的可用资料就是:


            万般无奈之下,一个偶然的机会看到了OpenCV2.4的操作说明(差别在于多项式的系数与矩阵排列的方式):


            于是欣喜若狂,终于找到问题的所在了。我用一个数组[4.0,3.0,2.0,1.0]来进行验证,果然OpenCV和Matlab的计算结果是一样的。还没来得及高兴,问题就有来了:[40.0,30.0,20.0,10.0]求解得到的多项式的根居然跟上面的不一样!而Matlab计算结果却是正确的。刚刚燃起的一点希望就此破灭了,生活的痛苦就是当你看到希望到来时却得到了绝望。

    求解多项式方程的根并不是什么复杂的计算啊,难道OpenCV会把这个求解的过程弄错?通过研究OpenCV函数solvePoly的源代码和反复的实验计算,我终于解决了这个问题——不是函数写的有问题,而是函数的使用说明有问题。要想得到正确的求解结果,可以对原始的系数矩阵(用于Matlab计算)做如下两步变换:

    1.将矩阵向量的顺序进行倒转(参看OpenCV2.4的操作说明和Matlab函数roots的说明);

    2.经矩阵当中每一个值都除以矩阵的最后一个元素(也就是说矩阵的最后一个元素必须是1,不知道为什么OpenCV的函数说明里面没有说清楚)。


    展开全文
  • 幂法求多项式方程的模最大matlab实现 要求:利用maab编写通用子程序,利用幂法求多项式方程的解: 思想 首先要将多项式转化成矩阵形式通过老师上课讲的内容将上述多项式转化成为如家格式的矩阵 此矩阵的特征值就是...
  • 用于计算方法的课程设计,求解非线性方程的所以,如求解高次方程
  • //用Graeffe法求解多项式方程单实 #include #include #include using namespace std; class graeffe { private:  int flag, i, iteration, iteration_max, k, n;  double eps, pp, pm, root, sum, ...

    //用Graeffe法求解多项式方程单实根
    #include <iostream>
    #include <math.h>
    #include <process.h>

    using namespace std;

    class graeffe
    {
    private:
     int flag, i, iteration, iteration_max, k, n;
     double eps, pp, pm, root, sum, upper_limit, lower_limit, val, *a, *b, *c;

    public:
     graeffe()
     {
      iteration = 0;
      flag = 0;
      iteration_max = 100;
      upper_limit = 1e35;
      lower_limit = 1e-35;
     }
     void solution();
     ~graeffe()
     {
      delete[] a, b, c;
     }
    };

    void main()
    {
     graeffe roots;
     roots.solution();
    }

    void graeffe::solution()
    {
     cout << "\n输入多项式阶数:";
     cin >> n;
     a = new double[n+1];
     b = new double[n+1];
     c = new double[n+1];
     for (i = 0; i <= n; i++)
     {
      cout << "\n输入a[" << i << "] = ";
      cin >> a[i];
     }
     cout << "\n输入可以认为多项式值为0的量:";
     cin >> eps;
     for (i = 1; i <= n; i++)
     {
      a[i] /= a[0];
      c[i] = a[i];
     }
     a[0] = 1.0;
     b[0] = 1.0;
     c[0] = 1.0;
     do
     {
      iteration++;
      for (i = 1; i <= n; i++)
      {
       sum = 0.0;
       for (k = 1; k <= i; k++)
       {
        if ((i + k) <= n)
        {
         sum += pow((-1.0), k) * c[i+k] * c[i-k];
        }
       }
       b[i] = pow((-1.0), i) * (c[i] * c[i] + 2 * sum);
      }
      for (i = 0; i <= n; i++)
      {
       if (b[i] != 0)
       {
        if ((fabs(b[i]) > upper_limit) || (fabs(b[i]) < lower_limit))
        {
         flag = 1;
        }
       }
      }
      if (flag != 1)
      {
       for (i = 1; i <= n; i++)
       {
        c[i] = b[i];
       }
      }
      if (iteration > iteration_max)
      {
       cout << "\n经过" << iteration_max << "次迭代没有找到根。";
       exit(0);
      }
     }while (flag == 0);
     cout << "\n迭代次数 = " << iteration << endl;
     for (i = 1; i <= n; i++)
     {
      if (b[i] == 0)
      {
       cout << "\n错误,A[" << i << "] = 0" << endl;
       exit(0);
      }
     }
     for (i = 1; i <= n; i++)
     {
      root = pow(fabs(b[i] / b[i-1]), pow(2.0, (-iteration)));
      pp = 1.0;
      pm = 1.0;
      for (k = 1; k <= n; k++)
      {
       pp = pp * root + a[k];
       pm = pm * (-root) + a[k];
      }
      if (fabs(pp) > fabs(pm))
      {
       root = -root;
       val = pm;
      }
      else
      {
       val = pp;
      }
      if (fabs(val) < eps)
      {
       cout << "\n找到了根,根 = " << root << endl;
      }
      else
      {
       cout << "\n可能没有根,根的值 = " << root << "。多项式的值 = " << val << endl;
      }
     }
    }

    展开全文
  • 求解一元高次多项式方程的所有实数的算法 一元高次多项式的形式可以表示为: f(x)=c0+c1x+c2x2+c3x3+...+cnxn=0 f(x) =c _0+c_1x+c_2x^2+c_3x^3+...+c_nx^n=0 f(x)=c0​+c1​x+c2​x2+c3​x3+...+cn​xn=0 ...
  • 多项式方程

    千次阅读 2005-03-16 18:06:00
    //2005.3 杭州#ifndef PolyEquation_Header#define PolyEquation_Header #include #include #include #include #define MAXRESULT 1e10#define MINRESULT -1e10#define EPSILON 1e-6 using namespace std;...
  • 目录展开与分解因式expand()factor()转化符号x的多项式为数值向量多项式四则运算加减法乘法除法多项式根多项式微分n*d的导数n/d的导数 在MATLAB中创建符号变量x,输入以下多项式。 n=(x+1)(x−2)(x+4)d=(x+3)(x+5)...
  • 使用Regula Falsi方法查找给定多项式方程。 在这里,如果方程是二次方程,则采用f(x)= a x 2 + b x + c的形式。 Example: f(x) = x2-25 例如:f(x)= x 2 -25 In this method, we need to assume 2 numbers ...
  • 多项式方程的实或复根。 C++: double solvePoly ( InputArray coeffs, OutputArray roots, int maxIters=300 ) 参数说明: coeffs - 多项式系数数组, coeffs 是从常数项到最高阶。 roots - 输出(复数)...
  • Matlab多项式运算与方程对各种多项式运算给出实列和方法
  • 二分法解多项式方程C语言实现

    千次阅读 2019-03-22 22:50:06
    7-18二分法求多项式单根 (20 分) 二分法求函数的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个r,即f®=0。 二分法的步骤为: 检查区间长度,如果...
  • 用C++实现实系数多项式的求,采用QR分解,可求出方程的复根
  • 牛顿迭代法又称牛顿-拉夫逊方法(Newton-Raphson method),是牛顿在17世纪提出的一种在实数...最大优点是在方程f(x)=0的单根附近具有平方收敛,该方法可以用来求方程的重、复根。 计算公式如下: 设r是f(x)=0...
  • Matlab多项式运算与方程 Matlab多项式运算 多项式四则运算 多项式四则运算续 多项式的导数polyder 多项式求值 多项式求值续 多项式 注以上多项式运算中使用的都是多项式 的 系数向量不涉及符号计算 * * 在 ...
  • Matlab 多项式求解 分享一下通过多种不同的方法计算多项式。 数值 使用代换法求 特定区间内的 符号 数值 roots函数用于计算系数向量表示的单变量多项式。 例如,创建...
  • 前一阵子(几个月前)在学习轨迹方程,想要写出画轨迹的代码,却无论如何都画不出来.因为教材上的轨迹的法则是用来直到人类的,而不是直到机器画的.但是matlab却可以画轨迹. 前一阵子,看到一篇关于分布式3D无人机...
  • 多项式原理

    2020-08-30 18:05:34
    多项式: 若整数系数多项式 是要一个整系数多项式,若r/s是它的一个有理,其中r,s互素;那么必有s|an,r|a0。(s|an表示s整除于an) 证明: 因为 r/s 是f(x)的一个有理, 因此 (x-r/s)|f(x) 等价于 (sx-r)|f...
  • 文章目录MATLAB的roots函数GSL库的gsl_poly_complex_solve求解器参考来源 ...包含带有非负指数的单一变量的多项式方程。 对方程 x 4 −1=0 求解。 创建一个向量,用它来代表多项式,然后计算多项式的
  • 题目:用二分法求方程x3-x-1=0在[1,2]内的近拟解,要求误差不超过0.001。 要求,用matlab写出编码, x_up = 2; x_down = 1; error = 0.001; res_down = x_down^3 - x_down - 1; res_up = x_up^3 - x_up - 1; ...
  • 10] B = 5 10 >> X=lsqnonneg(A,B) X = 0 2.8571 0.7143 >> A\B ans = 0 2.8571 0.7143 >> p=[1 -7 10] %表示x^2-7x+10 p = 1 -7 10 >> r=roots(p) r = 5 2 >> p=poly(r)%由创建多项式 p = 1 -7 10 >> A=ones(3),...
  • 在PnL方法求相机位姿,Point—to—Line方法的点云匹配问题中,会将其中某一个参数的求解建模成求一个多项式。如下式所示: 要将矩阵的特征值和多项式联系起来,我们可以假设此时多项式就是矩阵 也...
  • pal_tongtong数学的美丽...而其他的整系数二次多项式系数的组成了所谓的metal number也许六次多项式会更美~可惜我们没有机会看到了…biohu赞叹………………地下室的也很好。ykzls能提供源程序吗?我也运行几天试试....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,383
精华内容 2,953
关键字:

多项式方程的根