forked from torresalonso/compleja
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcomplex.h
More file actions
143 lines (123 loc) · 3.35 KB
/
Copy pathcomplex.h
File metadata and controls
143 lines (123 loc) · 3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
typedef struct {double a; double b;} numcomplex;
double cplx_mod(numcomplex z);
numcomplex cplx_conj(numcomplex z);
numcomplex cplx_sum(numcomplex z1, numcomplex z2);
numcomplex cplx_dif(numcomplex z1, numcomplex z2);
numcomplex cplx_prod(numcomplex z1, numcomplex z2);
numcomplex cplx_div(numcomplex z1, numcomplex z2);
numcomplex cplx_pow(numcomplex z1, int n);
numcomplex cplx_raiz(numcomplex z1, double n);
numcomplex raices_nesimas(numcomplex z1, int n);
int main() {
numcomplex z1, z2;
z1.a=1;
z1.b=2;
z2.a=3;
z2.b=4;
//std::cout << "z1= (" <<z1.a<<","<<z1.b<<")\n";
numcomplex z;
cout << "modulo: z1" << cplx_mod(z)<< '\n';
cout<<"Sum";
z = cplx_sum(z1,z2);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Dif";
z = cplx_dif(z1,z2);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Prod";
z = cplx_prod(z1,z2);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Div";
z = cplx_div(z1,z2);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Conj";
z = cplx_conj(z1);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Potencia (z1^2):";
z = cplx_pow( z1, 2);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Raiz(z1^1/2):";
z = cplx_raiz( z1, 0.5);
cout << "("<<z.a<<","<<z.b<<")" << '\n';
cout<<"Raices n-esimas(z1, 3):";
numcomplex *z_raices;
z_raices = raices_nesimas(z1, 3);
for(int k=0; k<=3; k++)
cout << "\n("<<z_raices[k].a<<","<<z_raices[k].b<<")" << '\n';
return 0;
}
double cplx_mod(numcomplex z){
double modulo=0;
modulo = sqrt(pow(z.a,2)+pow(z.b,2));
return modulo;
}
double cplx_fase(numcomplex z){
if(z.b==0){
return (z.a>0?(M_PI/2):(-M_PI/2));
}
else
return atan(z.b/z.a);
}
numcomplex cplx_conj(numcomplex z){
numcomplex zconj;
zconj = z;
zconj.b = -zconj.b;
return zconj;
}
numcomplex cplx_sum(numcomplex z1, numcomplex z2){
numcomplex z;
z.a = z1.a+z2.a;
z.b = z1.b+z2.b;
return z;
}
numcomplex cplx_dif(numcomplex z1, numcomplex z2){
numcomplex z;
z.a = z1.a-z2.a;
z.b = z1.b-z2.b;
return z;
}
numcomplex cplx_prod(numcomplex z1, numcomplex z2){
numcomplex z;
//(a,b)(c,d)=(ac-bd,ad+bc)
z.a = z1.a*z2.a - z1.b*z2.b;
z.b = z1.a*z2.b + z1.b*z2.a;
return z;
}
numcomplex cplx_div(numcomplex z1, numcomplex z2){
numcomplex zconj;
numcomplex z;
zconj = cplx_conj(z2);
// z1/z2=(z1*z2')/|z2|
z = cplx_prod(z1,zconj);
z.a = z.a/pow(cplx_mod(z2),2);
z.b = z.b/pow(cplx_mod(z2),2);
return z;
}
//sobrecarga de funciones para potencias y raíces n-esimas
numcomplex cplx_pow(numcomplex z1, int n){
numcomplex z;
z.a=pow(cplx_mod(z1),n)*cos(n*cplx_fase(z1));
z.b=pow(cplx_mod(z1),n)*sin(n*cplx_fase(z1));
return z;
}
numcomplex cplx_raiz(numcomplex z1, double n){
numcomplex z;
//numcomplex array[(int)n];
//int k=0;
//for(k = 0; k < n; k++){
//array[k].a=pow(cplx_mod(z1),n)*cos(n*cplx_fase(z1));
//array[k].b=pow(cplx_mod(z1),n)*sin(n*cplx_fase(z1));
z.a=pow(cplx_mod(z1),n)*cos(n*cplx_fase(z1));
z.b=pow(cplx_mod(z1),n)*sin(n*cplx_fase(z1));
//cout << "("<<array[k].a<<","<<array[k].b<<")" << '\n';
//}
return z;
}
numcomplex * raices_nesimas(numcomplex arr[], numcomplex z1, int n){
numcomplex array[n];
int k=0;
for(k = 0; k < n; k++){
array[k].a=pow(cplx_mod(z1),1/(double)n)*cos((cplx_fase(z1)+2*k*M_PI)/n);
array[k].b=pow(cplx_mod(z1),1/(double)n)*sin((cplx_fase(z1)+2*k*M_PI)/n);
}
return array;
}