複數運算

#include "stdafx.h"
#include "math.h"
#include "stdio.h"
#include "ComplexNumber.h"算法

//複數做圖
void oplot(int n, double x[], double y[], char xc, char yc, char c,double *xd, double *yd)
{
 int i,j,k;
 double xx,yy;
 char xy[72][72];
 for (i=0; i<=71; i++)
  for (j=0; j<=71; j++) xy[i][j]=' ';
 xy[0][35]='Y';
 for (i=1; i<=71; i++) xy[i][36]=yc;
 xy[36][71]='X';
 for (j=0; j<=70; j++) xy[36][j]=xc;
 xx=0.0;
 yy=0.0;
 for (k=0; k<=n-1; k++)
 {
  if (fabs(x[k])>xx) xx=fabs(x[k]);
  if (fabs(y[k])>yy) yy=fabs(y[k]);
 }
 xx=35.0/xx;
 yy=35.0/yy;
 for (k=0; k<=n-1; k++)
 {
  i=37.0-yy*y[k]-0.5;
  j=xx*x[k]+36.0-0.5;
  xy[i][j]=c;
 }
 printf("\n");
 for (i=0; i<=71; i++)
 {
  for (j=0; j<=71; j++)
   printf("%c",xy[i][j]);
  printf("\n");
 }
 printf("\n");
 printf("X-scale is:%13.7e\n",xx);
 printf("Y-scale is:%13.7e\n",yy);
 printf("\n");
 *xd=xx;
 *yd=yy;
 return;
}io


//複數對數
void oclog(double x, double y, double *u, double *v)
{
 double p;
 p=log(sqrt(x*x+y*y));
 *u=p;
 *v=atan2(y,x);
 return;
}程序


//複數的N次方根
void ontrt(double x, double y, int n, double u[], double v[])
{
 int k;
 double r,q,t;
 if (n<1) return;
 q=atan2(y,x);
 r=sqrt(x*x+y*y);
 if (r+1.0!=1.0)
 {
  r=(1.0/n)*log(r);
  r=exp(r);
 }
 for (k=0; k<=n-1; k++)
 {
  t=(2.0*k*3.1415926+q)/n;
  u[k]=r*cos(t);
  v[k]=r*sin(t);
 }
 return;
}語言


//複數指數
void ocexp(double x, double y, double *u, double *v)
{
 double p;
 p=exp(x);
 *u=p*cos(y);
 *v=p*sin(y);
 return;
}di


//複數正弦
void ocsin(double x, double y, double *u, double *v)
{
 double p,q;
 p=exp(y);
 q=exp(-y);
 *u=sin(x)*(p+q)/2.0;
 *v=cos(x)*(p-q)/2.0;
 return;
}co


//複數除法
void ocdiv(double a, double b, double c, double d, double *e, double *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;
}math


//複數乘冪
void opowr(double x, double y, int n, double *u, double *v)
{
 double r,q;
 q=atan2(y,x);
 r=sqrt(x*x+y*y);
 if (r+1.0!=1.0)
 {
  r=n*log(r);
  r=exp(r);
 }
 *u=r*cos(n*q);
 *v=r*sin(n*q);
 return;
}return


//複數乘法
void ocmul(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;
 return;
}void


//複數餘弦
void occos(double x, double y, double *u, double *v)
{
 double p,q;
 p=exp(y);
 q=exp(-y);
 *u=cos(x)*(p+q)/2.0;
 *v=-sin(x)*(p-q)/2.0;
 return;
}
                                    ----根據《C語言經常使用算法程序集》整理printf

<投票>
相關文章
相關標籤/搜索