📄 1.8 复系数多项式相除 cpdv.c
字号:
/*****************************************************
1.8 复系数多项式相除,计算P被Q除得的商多项式S(z)和余多项式R(z)
*****************************************************/
#include "math.h"
void cpdv(pr,pi,m,qr,qi,n,sr,si,k,rr,ri,l)
int m,n,k,l;
double pr[],pi[],qr[],qi[],sr[],si[],rr[],ri[];
{
int i,j,mm,ll;
double a,b,c,d,u,v;
void cmul(double,double,double,double,double *,double *);
void cdiv(double,double,double,double,double *,double *);
for (i=0; i<=k-1; i++)
{
sr[i]=0.0; si[i]=0.0;
}
d=qr[n-1]*qr[n-1]+qi[n-1]*qi[n-1];
if (d+1.0==1.0) return;
ll=m-1;
for (i=k; i>=1; i--)
{
a=pr[ll];
b=pi[ll];
c=qr[n-1];
d=qi[n-1];
cdiv(a,b,c,d,&u,&v);
sr[i-1]=u;
si[i-1]=v;
mm=ll;
for (j=1; j<=n-1; j++)
{
a=sr[i-1];
b=si[i-1];
c=qr[n-j-1];
d=qi[n-j-1];
cmul(a,b,c,d,&u,&v);
pr[mm-1]=pr[mm-1]-u;
pi[mm-1]=pi[mm-1]-v;
mm=mm-1;
}
ll=ll-1;
}
for(i=0; i<=l-1; i++)
{
rr[i]=pr[i];
ri[i]=pi[i];
}
return;
}
static void cmul(a,b,c,d,e,f)
double a,b,c,d,*e,*f;
{
double p,q,s;
p=a*c;
q=b*d;
s=(a+b)*(c+d);
*e=p-q;
*f=s-p-q;
return;
}
static void cdiv(a,b,c,d,e,f)
double a,b,c,d,*e,*f;
{
double p,q,s,w;
p=a*c;
q=-b*d; ]
s=(a+b)*(c-d);
w=c*c+d*d;
if (w+1.0==1.0)
{
*e=1.0e+35*a/fabs(a);
*f=1.0e+35*b/fabs(b);
}
else
{
*e=(p-q)/w;
*f=(s-p-q)/w;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -