📄 ch15.h
字号:
/************************************************
Expect bugs!
Please use and enjoy, and let me know of any bugs/mods/improvements
that you have found/implemented and I will fix/incorporate them into
this file. Thank Mr. Xushiliang once again.
hujinshan@2002.11.3
Airforce Engineering University
************************************************/
/***** #include "CH15.h" 复数运算*****/
#ifndef CH15_H_
#define CH15_H_
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
//*******************************************************************
void ocmul(double a,double b,double c,double d,double* e,double* f);//复数乘法
void ocdiv(double a,double b,double c,double d,double* e,double* f);//复数除法
void opowr(double x,double y,int n,double* u,double* v);//复数乘幂
void ontrt(double x,double y,int n,double u[],double v[]);//复数的N次方根
void ocexp(double x,double y,double* u,double* v);//复数指数
void oclog(double x,double y,double* u,double* v);//复数对数
void ocsin(double x,double y,double* u,double* v);//复数正弦
void occos(double x,double y,double* u,double* v);//复数余弦
void oplot(int n,double x[],double y[],char xc,char yc,
char c,double* xd,double* yd,char str[])//复数作图--不需要
//*******************************************************************
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 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;
}
/////////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////////////////////////
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;
}
/////////////////////////////////////////////////////////////
void oplot(int n,double x[],double y[],char xc,char yc,char c,double* xd,double* yd,char str[])
{
char buffer[50];
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;
}
strcat( str, "\r\n" );
for (i=0; i<=71; i++)
{ for (j=0; j<=71; j++)
sprintf( buffer,"%c",xy[i][j]),strcat( str, buffer );
strcat( str, "\r\n" );
}
strcat( str, "\r\n" );
sprintf( buffer,"X-scale is:%13.7e\r\n",xx);strcat( str, buffer );
sprintf( buffer,"Y-scale is:%13.7e\r\n",yy);strcat( str, buffer );
strcat( str, "\r\n" );
*xd=xx; *yd=yy;
return;
}
/////////////////////////////////////////////////////////////
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -