将一个多项式的系数表示转换成点表示算法分析


系数表示法:储存一个多项式的系数。
点表示法:n-1阶多项式,储存不同阶的值。
算法一:将一个多项式的系数表示法转换成点表示法(复数)。
这个算法是一个很难理解的算法,这里姑且不去理解它的细节,只去利用它的结果。下面是C代码:
===============c2p.h========================
/*
 *将一个多项式的系数表示法转换成点表示法。
 */
#include
摘要由CSDN通过智能技术生成

系数表示法:储存一个多项式的系数。
点表示法:n-1阶多项式,储存不同阶的值。

算法一:将一个多项式的系数表示法转换成点表示法(复数)。
这个算法是一个很难理解的算法,这里姑且不去理解它的细节,只去利用它的结果。下面是C代码:

===============c2p.h========================
/*
 *将一个多项式的系数表示法转换成点表示法。
 */

#include<math.h>
#include"complex.h"
#include<malloc.h>


int c2p( complex *a, int n, complex *y){//a表示多项式的系数,y表示计算出来的点值,n表示系数的个数。

 //判断n是否是2的整数幂,若不是退出程序。
 int k = log(n-0.0001)/log(2) + 1;//使得2^(k-1)<n<=2^k
 int i, nn = 1;
 for(i = 0; i < k; i++){
  nn = nn << 1;
 }
 if( nn != n ){
  printf("n should be 2^k./n");
  return 0;
 }
 
 k = c2p0(a, n, y);
 return k;
}

int c2p0(complex *a, int n, complex *y){
 int i, j, k;
 complex xn, x, t;
 complex *a0, *a1, *y0, *y1;
 if(n == 1){
  y[0].rmz = a[0].rmz;
  y[0].imz = a[0].imz;
  return 1; 
 }
 k = n >> 1;
 a0 = malloc(k*sizeof(complex));
 a1 = malloc(k*sizeof(complex));
 y0 = malloc(k*sizeof(complex));
 y1 = malloc(k*sizeof(complex));

 if( (a0==NULL) || (a1==NULL) || (y0==NULL) || (y1==NULL) ){
  printf("(c2p0)memory alloc failed./n");

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值