首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

常见算法-多项式计算(一)

2013-10-08 
常见算法-多项式计算(1)最近在学算法,做做笔记,便于以后温习。学习资源:《常用算法程序集》一。多项式求1.一维

常见算法-多项式计算(1)

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

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


一。多项式求值1.一维多项式

问题描述:计算形如常见算法-多项式计算(一)

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

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

常见算法-多项式计算(一)

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

常见算法-多项式计算(一)

常见算法-多项式计算(一)

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


下面,通过代码计算此多项式:常见算法-多项式计算(一)

的二维多项式在给定点(x,y)处的函数值


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

常见算法-多项式计算(一)

令:常见算法-多项式计算(一)

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

常见算法-多项式计算(一)

常见算法-多项式计算(一)

最后计算得到的u即si

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


下面通过代码计算此多项式常见算法-多项式计算(一)

其中,系数矩阵为:常见算法-多项式计算(一)

的复数多项式在给定复数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




热点排行