精华内容
下载资源
问答
  • 勒让德多项式计算

    千次阅读 2019-09-21 17:48:54
    计算勒让德公式可以用下面这个公式,当然是算不出来的,因为数字太大溢出了: 所以,我们用下面这个公式进行迭代: 具体代码如下: 下面是用python写的 # -*- coding: utf-8 -*- import math def claulate_...

    简单写一下这次物理大地的程序吧,其实程序比较简单,主要还是要弄懂用哪个公式。
    这是这次的作业要求:
    在这里插入图片描述
    计算勒让德公式可以用下面这个公式,当然是算不出来的,因为数字太大溢出了:在这里插入图片描述
    所以,我们用下面这个公式进行迭代:
    在这里插入图片描述
    具体代码如下:
    下面是用python写的

    # -*- coding: utf-8 -*-
    import math
    
    
    def claulate_legendre(n, sita_rad):
        P = list()
        for row in range(n+1):
            P.append([])
            for clumn in range(row+1):
                P[row].append(0)
        P[0][0] = 1
        P[1][0] = math.sqrt(3) * math.cos(sita_rad)
        P[1][1] = math.sqrt(3) * math.sin(sita_rad)
        for row in range(2, n+1):
            coefficient_1 = math.sqrt((2 * row + 1)/(2 * row))
            coefficient_2 = math.sqrt(2 * row + 1)
            P[row][row] = coefficient_1 * math.sin(sita_rad) * P[row-1][row-1]
            P[row][row-1] = coefficient_2 * math.cos(sita_rad) * P[row-1][row-1]
        for row in range(2, n+1):
            for clumn in range(0, row-1):
                coefficient_3 = math.sqrt((2 * row + 1) / (row - clumn) / (row + clumn))
                coefficient_4 = math.sqrt(2 * row - 1)
                coefficient_5 = math.sqrt((row - clumn - 1) * (row + clumn -1) / (2 * row - 3))
                P[row][clumn] = coefficient_3 * (coefficient_4 * math.cos(sita_rad) * P[row - 1][clumn]
                                                 - coefficient_5 * P[row - 2][clumn])
        return P
    
    
    def write_file(out_filename, P_data, n):
        lines = list()
        header_line = "degree order value\n"
        lines.append(header_line)
        for m in range(0, n+1):
            line = "{:<7d}{:<6d}{:.16f}\n".format(n, m, P_data[n][m])
            lines.append(line)
        with open(out_filename, 'w') as fopen:
            fopen.writelines(lines)
    
    
    def main():
        id_number = 293
        n = id_number
        sita = [75, 25]
        out_filename = ["C:\\Users\\王阳\\Desktop\\2017301610293_75.txt", "C:\\Users\\王阳\\Desktop\\2017301610293_25.txt"]
        for i in range(2):
            sita_rad = math.radians(sita[i])
            P_data = claulate_legendre(n, sita_rad)
            write_file(out_filename[i], P_data, n)
    
    
    if __name__ == "__main__":
        main()
    
    

    下面是用C++写的,结果是一样的

    #include<iostream>
    #include<fstream>
    #include<iomanip>
    using namespace std;
    #define PI 4*atan(1.0)
    
    void test(int n,double sita,string filename)
    {
    	double sita_rad=sita*PI/180;
    	double **P=new double* [n+1];
    	for(int i=0;i<n+1;i++)
    	{
    		P[i]=new double[n+1];
    	}
    	P[0][0]=1;
    	P[1][0]=sqrt(3.0)*cos(sita_rad);
    	P[1][1]=sqrt(3.0)*sin(sita_rad);
    	for(int i=2;i<=n;i++)
    	{
    		P[i][i]=sqrt((2*i+1.0)/(2*i))*sin(sita_rad)*P[i-1][i-1];
    		P[i][i-1]=sqrt(2*i+1.0)*cos(sita_rad)*P[i-1][i-1];
    	}
    	for(int i=2;i<=n;i++)
    	{
    		for(int j=0;j<=i-2;j++)
    		{
    			double f3=sqrt((2*i+1.0)/(i-j)/(i+j));
    			double f4=sqrt(2*i-1.0);
    			double f5=sqrt((i-j-1)*(i+j-1)/(2*i-3.0));
    			P[i][j]=f3*(f4*cos(sita_rad)*P[i-1][j]-f5*P[i-2][j]);
    		}
    	}
    
    	ofstream ofile;
    	ofile.open(filename);
    	ofile<<"degree order value"<<endl;
    	for(int i=0;i<n+1;i++)
    	{
    		ofile<<setprecision(16)<<setiosflags(ios::left);
    		ofile<<setw(7)<<n<<setw(6)<<i<<setw(16)<<P[n][i]<<endl;
    	}
    	ofile.close();
    }
    
    int main(void)
    {
    	string filename="C:\\Users\\王阳\\Desktop\\2017301610293_75.txt";
    	int id_number=293;
    	int n=id_number;
    	double sita = 75;
    	test(n,sita,filename);
    	system("pause");
    	return 0;
    }
    
    展开全文
  • 写程序计算给定多项式在定点处的值 普通写法 double f(int n, double a[], double x) { int i; double p = a[0]; for(i=1; i<=n; i++) p +=(a[i] * pow(x,i)); return p; } 秦九韶公式 double f(int n, ...

    写程序计算给定多项式在定点处的值在这里插入图片描述
    普通写法

    double f(int n, double a[], double x)
    {
    	int i;
    	double p = a[0];
    	for(i=1; i<=n; i++)
    		p +=(a[i] * pow(x,i));
    	return p;
    }
    

    秦九韶公式
    每项提出一个x

    double f(int n, double a[], double x)
    {
    	int i;
    	double p=a[n]; //令p从a[n]开始
    	for (i=n; i>0; i--)
    		p = a[i-1] + x*p;
    	return p;
    }
    
    展开全文
  • 常见算法-多项式计算(1)

    万次阅读 多人点赞 2013-09-02 21:21:14
    最近在学算法,做做笔记,便于以后温习。 学习资源:《常用算法程序集》 一。多项式求值 1.一维多项式 ...其递推计算公式如下: 最后得到的u即多项式值。 下面,通过代码计算此多项式: #include /*

    最近在学算法,做做笔记,便于以后温习。

    学习资源:《常用算法程序集》


    一。多项式求值

    1.一维多项式

    问题描述:计算形如

    的多项式在指定点x处的函数值。

    问题分析:首先,将多项式表述成如下嵌套形式:


    然后从里往外一层一层地进行计算。其递推计算公式如下:



    最后得到的u即多项式值。


    下面,通过代码计算此多项式:

    #include <stdio.h>
    
    /*  polynome_one函数介绍
     功能:计算并返回一维多项式在指定点x处的函数值
     参数:           int n:多项式的项数
                  double x:指定的自变量的值
     double *modulus_array:存放n-1次多项式的n个系数的数组
     */
    double polynome_one(int n, double x, double *modulus_array)
    {
        int i;
        double result_;     //利用推导出的递推公式进行计算
        result_ = modulus_array[n-1];
        
        for (i=n-2; i>=0; i--)
        {
            result_ = result_ * x + modulus_array[i];
        }
        
        return result_;  //返回多项式值
    }
    int main()
    {
        int i;
        double modulus_array[7] = {-20.0, 7.0, -7.0, 1.0, 3.0, -5.0, 2.0}; //初始化系数数组
        double x[6] = {0.9, -0.9, 1.1, -1.1, 1.3, -1.3};  //初始化自变量x数组
        
        for (i=0; i<=5; i++) //打印每次x对应的结果。 
        {
            printf("x(%d) = %5.2lf   p(x(%d)) = %13.7e\n", i, x[i], i, polynome_one(7, x[i], modulus_array));
        }
        return 0;
    }
    
    //注:%e 是表示输出的数字以科学计数显示      如:7.234568e+003(即 7.234568*10^(+003) )
    
    /* 
     ****************结果*******************
     x(0) =  0.90   p(x(0)) = -1.8562268e+01
     x(1) = -0.90   p(x(1)) = -2.6715368e+01
     x(2) =  1.10   p(x(2)) = -1.9556128e+01
     x(3) = -1.10   p(x(3)) = -2.1513028e+01
     x(4) =  1.30   p(x(4)) = -2.0875732e+01
     x(5) = -1.30   p(x(5)) = -6.3404320e+00
    */




    2.二维多项式

    问题描述: 计算形如的二维多项式在给定点(x,y)处的函数值


    问题分析: 将二维多项式变形如下:


    令:

    则计算si的递推公式如下:



    最后计算得到的u即si

    最后再将所有的si累加,即可得到最后的解。


    下面通过代码计算此多项式

    其中,系数矩阵为:

    #include <stdio.h>
    
    /*  polynome_two函数介绍
     功能:计算并返回二维多项式在指定点x处的函数值
     参数:           int n:自变量y的最高次数为n-1
                     int m:自变量x的最高次数为m-1
                  double x:指定的自变量x的值
                  double y:指定的自变量y的值
     double *modulus_array:存放二维多项式的系数
     */
    double polynome_two(double *modulus_array, int m, int n, double x, double y)
    {
        int i, j;
        double result_, each_si, now_xi;
        result_ = 0.0;
        now_xi = 1.0;
        
        for (i=0; i<=m-1; i++)
        {
            each_si = modulus_array[i*n+n-1] * now_xi;
            for (j=n-2; j>=0; j--)
            {
                each_si = each_si * y + modulus_array[i*n+j] * now_xi;
            }
            
            result_ += each_si;
            now_xi = now_xi * x;
        }
        return  result_;
    }
    int main()
    {
        double result_;
        double modulus_array[4][5] = {{1.0, 2.0, 3.0, 4.0, 5.0},
                                    {6.0, 7.0, 8.0, 9.0, 10.0},
                                    {11.0, 12.0, 13.0, 14.0, 15.0},
                                    {16.0, 17.0, 18.0, 19.0, 20.0}};
        
        result_ = polynome_two(modulus_array, 4, 5, 0.6, -1.3);
        printf("p(0.6, -1.3) = %13.7e\n", result_);
        
    }
    
    //注:%e 是表示输出的数字以科学计数显示      如:7.234568e+003(即 7.234568*10^(+003) )
    
    /* 
     ****************结果*******************
    

    p(0.6, -1.3) = 3.9665544e+01

    */



    3.复数多项式

    问题描述:计算形如

    的复数多项式在给定复数z时的值。


    问题分析:和上面的多项式分析一样,嵌套进行,就不多重复了。关键在于cmul对每组复数相乘的计算过程。


    下面通过代码,计算

    在z=1+j时的函数值

    #include <stdio.h>
    
    /*  cuml函数介绍
     功能:计算两个复数乘积   即(a+bj)*(c+dj) = e+fj
     参数: 对应复数中的各个值
     结果: 对e,f分别计算求得值
    */
    
    void cmul(double a, double b, double c, double d, double *e, double *f)
    {
        double p, q, s;
        p = a * c;
        q = b * d;
        s = (a+b) * (c+d);
        
        *e = p - q;
        *f = s - p - q;
    }
    
    /*  polynome_z函数介绍
     功能:计算复数多项式在给定复数z(x+yj)时的函数值
     参数: double *modulus_r: 存放多项式的实部
          double *modulus_r: 存放多项式的虚部
                   double x: 给定复数z的实部
                   double y: 给定复数z的虚部
                  double *u: 返回多项式值的实部
                  double *v: 返回多项式值的虚部
     */
    void polynome_z(double *modulus_r, double *modulus_i, int n, double x, double y, double *u, double *v)
    {
        int i;
        double now_r, now_i;
        double p, q;
        now_r = modulus_r[n-1];
        now_i = modulus_i[n-1];
        for (i=n-2; i>=0; i--)
        {
            cmul(now_r, now_i, x, y, &p, &q);
            now_r = p + modulus_r[i];
            now_i = q +  modulus_i[i];
        }
        
        *u = now_r;
        *v = now_i;
    }
    
    
    int main()
    {
        double x, y, u, v;
        double modulus_r[4] = {2.0, 2.0, 1.0, 2.0};
        double modulus_i[4] = {1.0, 1.0, 1.0, 2.0};
        
        x = 1.0;
        y = 1.0;
        polynome_z(modulus_r, modulus_i, 4, x, y, &u, &v);
        printf("p(1.0+j) = %10.7lf+%10.7lfj", u, v);
        
    }
    
    //注:%e 是表示输出的数字以科学计数显示      如:7.234568e+003(即 7.234568*10^(+003) )
    
    //计算结果:  p(1.0+j) = -7.0000000+ 6.0000000j



    二。多项式乘法


    1.多项式相乘(实数)


    算法本身没什么难度,两个循环,遍历p,q两个多项式各个项的系数相乘,所得结果加到对应结果项上。

    下面通过代码计算



    #include <stdio.h>
    
    /* ***********polynome_mul函数功能介绍*************/
    /* 函数功能:计算两个多项式相乘                      */
    /* 参数说明:*polynome_first,第一个多项式系数数组     */
    /*         *polynome_second,第二个多项式系数数组    */
    /*         *polynome_result,相乘结果多项式系数数组   */
    /* num_first,num_second,num_result分别对应多项式项数*/
    /* ******************************************** */
    void polynome_mul(double *polynome_first, double *polynome_second, double *polynome_result, int num_first, int num_second, int num_result)
    {
        int i, j;
        
        for (i=0; i<num_result; i++)  //先初始化为0,(下面加法要用到,不初始化出错)
        {
            polynome_result[i] = 0.0;
        }
        for (i=0; i<num_first; i++)
        {
            for (j=0; j<num_second; j++)   //S(i+j) = S(i+j) + P(i)*p(j) 算法核心
            {
                polynome_result[i+j] = polynome_result[i+j] + polynome_first[i] * polynome_second[j];
            }
        }
    }
    
    int main()
    {
        int i;
        double polynome_first[6] = {4.0, -6.0, 5.0, 2.0, -1.0, 3.0};
        double polynome_second[4] = {2.0, 3.0, -6.0, 2.0};
        
        double polynome_result[9];  // 6+4-1
        polynome_mul(polynome_first, polynome_second, polynome_result, 6, 4, 9);
    
        for (i=0; i<9; i++)
        {
            printf("S(%d) = %13.7e\n", i, polynome_result[i]); //打印结果为各个项的系数
        }
    }
    
    //注:%e 是表示输出的数字以科学计数显示      如:7.234568e+003(即 7.234568*10^(+003) )
    
    /*计算结果:
     S(0) = 8.0000000e+00
     S(1) = 0.0000000e+00
     S(2) = -3.2000000e+01
     S(3) = 6.3000000e+01
     S(4) = -3.8000000e+01
     S(5) = 1.0000000e+00
     S(6) = 1.9000000e+01
     S(7) = -2.0000000e+01
     S(8) = 6.0000000e+00
     */
    



    展开全文
  • std(A,flag,dim) 当flag=0时,按s1所列公式计算样本标准差,当flag=1时,按s2所列公式计算总体标准差。dim=1时计算每一列,dim=2时计算每一行 例题: 代码: 相关系数计算函数: corrcoef() 相关系数计算函数 ...

    计算标准差函数:
    std(X) 计算向量X的标准差
    std(A) 计算矩阵A各列的标准差
    std(A,flag,dim) 当flag=0时,按s1所列公式计算样本标准差,当flag=1时,按s2所列公式计算总体标准差。dim=1时计算每一列,dim=2时计算每一行
    例题:
    在这里插入图片描述
    代码:
    在这里插入图片描述
    相关系数计算函数:
    corrcoef() 相关系数计算函数
    corrcoef(A) 返回由矩阵A所形成的相关系数矩阵,其中,第i行第j列的元素表示原矩阵A中第i列和第j列的相关系数
    corrcoef(A,B) 求向量A,B的相关系数

    多项式的计算:
    n次多项式用长度为n+1的行向量表示
    多项式相乘:
    conv(P1,P2):多项式相乘的函数。在这里,P1,P2是两个多项式系数向量
    多项式除法:
    [Q,R] = deconv(P1,P2) Q返回多项式P1除以P2的商式,R返回P1除以P2的余式,Q和R仍是多项式系数向量
    P1 = conv(Q,P2)+R
    多项式的求导:
    p=ployder§ 求多项式P的导函数
    p=ployder(P,Q) 求P*Q的导函数
    [p,q]=ployder(P,Q)求P/Q的导函数,导函数的分子存入p,分母存入q
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    多项式求根:
    root§ 多项式求根函数,其中p为多项式的系数向量
    在这里插入图片描述
    如果已知多项式的全部根,则可以用poly函数建立起该多项式,其调用格式为:
    p=poly(x)

    数据插值:
    interp1函数 interp1(x,y,x1,method); x1为插值的x轴取值,method是计算方法,具体方法如下:
    在这里插入图片描述
    在这里插入图片描述
    interp2函数进行二维插值
    interp2(X,Y,Z,X1,Y1,method) X,Y是两个向量,表示两个参数的采样点,Z是采样点对应的函数值。X1,Y1是两个标量或向量,表示要插值的点

    曲线拟合:
    ployfit(x,y,z) x和y是已知数据,z是拟合曲线的方程的次数
    例:人口预测
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 从插值多项式到泰勒公式,朱圣芝,, 利用泰勒公式对函数在局部进行多项式逼近是微分学的基本思想和基本工具. 在历史上,泰勒公式起源于有限差分计算 , 因此,从牛顿内插�
  • 泽尼克多项式计算和推导 经过验证所得结果与理论公式一致
  • 【写于2016-10-11,现在从...hexo博客配置有一些问题,mathjax公式一直不能正常加载,可以访问我在cmdmarkdown上发布的版本 here 这几天看了一些博客,发现它纯粹在数学上需要功底。FFT,NTT的题目中,简单的那部分...
  • 源代码:n=int(input("请输入n的值(n为多项式的最高次幂)")) a=[] print("依次输入",n+1,"个数,这些数是多项式各项的系数,且最前面输入的数是最小次项前的系数")i=0 while i a.append(int(input())) i=i+1 x=int...
  • 矩阵特征多项式的系数公式

    万次阅读 2019-05-17 11:33:43
    用‘分’来计算时间的人比用‘小时’来计算时间的人时间多59倍。 ——雷巴柯夫 关于nnn阶矩阵的特征多项式,书上只给出了最高次项、次高次项和常数项: ∣λE−A∣=λn−(trA)λn−1+⋯+(−1)n∣A∣.(1)|\...
  • 计算多项式用直接算和秦九韶公式

    千次阅读 2016-12-24 21:06:24
    因为程序计算太快,所以clock函数捕捉不到区别。 由最后这张图知道秦九韶公式计算多项式更快。duration2比duration1快一个数量级
  • FFT多项式计算傅里叶变换是一个很大的概念,里面包含太多太多东西,整篇在傅里叶变换中只是一个小应用而已。就我的理解,描述快速傅里叶变换优化多项式乘法的原理和具体实践。傅里叶变换傅里叶变换是一种线性积分...
  • 计算多项式系数

    2020-05-31 11:41:33
    给定一个多项式(ax+by)k(ax+by)^k(ax+by)k,求anbma^nb^manbm系数 输入格式 共一行,包含5个整数,分别为a,b,k,n,m每两个整数之间用一个空格隔开. 输出格式 出共1行,包含一个整数,表示所求的系数,这个系数可能很大,...
  • 使用秦九韶公式,还能测程序的运行时间 #include <stdio.h> #include <time.h> #include <math.h> clock_t start, stop; double duration; #define MAXN 10 /* 多项式最大项数,即多项式阶数+1 */...
  • 在数值积分推导辛普森公式时就是将函数插值成为多项式形式,原因在于多项式的简洁。任何初等函数都可以用泰勒公式展开成多项式的形式,然后在多项式的基础上作求导运算。也可以用别的插值方法,比如拉格朗日插值,...
  • 多项式计算问题描述 条件:已知函数在{x0,x1…xn}上的值,估计函数在x(n+1)处的值 算法: 假设 f(x) = f[x0] + f[x0,x1](x1-x0)+f[x2,x1,x0](x2-x0) + .... +f[x0,x1...xn](xn-x0)该式称为牛顿插值公式 当x=x0x = x_...
  • 题目描述: ...多项式公式值=a*x*x*x+b*x*x+c*x+d 输入格式: 输入仅一行,包含5个实数,分别是x,及参数a、b、c、d的值,每个数都是绝对值不超过100的双精度浮点数。数与数之间以一个空格分开。   ...
  • 假设x=2,那么a的数组有几个, 那n就是根据索引来的 假设数组【1, 2, 3, 4, 5】 n就是0, 1, 2,,3, 4 f = 1 + 2(2 + 2(3 + 2(4 + 2(5)))) f = 1 + 2(2 + 2(3 + 2(4 + 10)) ...f = 1 + ...
  • 长除法计算公式

    千次阅读 2020-05-31 12:45:40
    本文研究了长除法运算的问题,通过对长除法计算过程进行详细演算和深入分析,得出了计算长除法结果的一般性规律,利用多项式除法中分子分母多项式的各项系数直接计算出结果。
  • 在轨迹规划中,有一个类别是多项式轨迹规划:抛物线、三次多项式、五次多项式、七次多项式、N次多项式。在这篇中,我们去掉最低,去掉最高,主要讲三次...多项式中四个常量参数的计算公式为: 该公式中,q0是起始点...
  • 今天的“得到”: 1、求出e的值(op299) (1)套公式:sum += 1.0/f; (2)初始值:sum = 1; 2、计算多项式的值(op361) 一次性AC!!!
  • 霍纳法则--计算多项式的值

    千次阅读 2016-06-14 00:04:04
    先来个实例: 计算x=7时p(x)的值. 解法1:我们想到的就是直接...对于第二行,除了第一个单元格直接填写系数外,其他单元格的值的计算方式都是: x的值* 前一单元格的值+本单元格对应于公式的系数(比如第二个单元格: 7* 2
  • 首先我们有cos36∘=5√+14,可以利用顶角为36∘ 的等腰三角形求出,它... 利用二倍角公式cos2x=2cos2x−1 迭代两次,求出cos9∘ 满足的多项式,可以发现它是一个关于cos29∘ 的多项式,因此我们可以求出sin29∘ 满足...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 495
精华内容 198
关键字:

多项式计算公式