44 # define strrchr rindex
97 name = n ? strdup (n) : NULL;
109 r >= 0 && r < rows && c >= 0 && c <
cols);
117 assert (r >= 0 && r < rows && c >= 0 && c <
cols);
129 static char str[256];
130 sprintf (str,
"%s[%d,%d]", n, r + 1, c + 1);
138 static char str[256];
139 sprintf (str,
"%c[%d,%d]", n, r + 1, c + 1);
150 if (n == NULL)
return NULL;
151 if ((p =
strchr (n,
'[')) != NULL) {
152 r = atoi (p + 1) - 1;
153 if ((p =
strchr (p,
',')) != NULL) {
154 c = atoi (p + 1) - 1;
155 if ((p =
strchr (p,
']')) != NULL) {
158 if ((len =
strchr (n,
'[') - n) > 0) {
159 p = (
char *) malloc (len + 1);
175 int& rs,
int& cs,
int& ss) {
184 if (strstr (vn, name) == vn) {
210 if (rs >= 0 && cs >= 0 && ss > 0) {
217 if (strstr (vn, name) == vn) {
233 idx >= 0 && idx <
size);
240 assert (idx >= 0 && idx <
size);
247 assert (a.getRows () == b.getRows () && a.getCols () == b.getCols () &&
248 a.getSize () == b.getSize ());
249 matvec res (a.getSize (), a.getRows (), a.getCols ());
250 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) + b.get (
i),
i);
256 assert (a.getRows () == b.getRows () && a.getCols () == b.getCols ());
257 matvec res (a.getSize (), a.getRows (), a.getCols ());
258 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) + b,
i);
264 assert (a.getSize () == b.
getSize ());
265 matvec res (a.getSize (), a.getRows (), a.getCols ());
266 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) + b.
get (
i),
i);
282 matvec res (a.getSize (), a.getRows (), a.getCols ());
283 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) + z,
i);
289 matvec res (a.getSize (), a.getRows (), a.getCols ());
290 for (
int i = 0;
i < a.getSize ();
i++) res.
set (z + a.get (
i),
i);
296 matvec res (a.getSize (), a.getRows (), a.getCols ());
297 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) +
d,
i);
303 matvec res (a.getSize (), a.getRows (), a.getCols ());
304 for (
int i = 0;
i < a.getSize ();
i++) res.
set (d + a.get (
i),
i);
310 matvec res (a.getSize (), a.getRows (), a.getCols ());
311 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) - z,
i);
317 matvec res (a.getSize (), a.getRows (), a.getCols ());
318 for (
int i = 0;
i < a.getSize ();
i++) res.
set (z - a.get (
i),
i);
324 matvec res (a.getSize (), a.getRows (), a.getCols ());
325 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) -
d,
i);
331 matvec res (a.getSize (), a.getRows (), a.getCols ());
332 for (
int i = 0;
i < a.getSize ();
i++) res.
set (d - a.get (
i),
i);
346 assert (a.getRows () == b.getRows () && a.getCols () == b.getCols () &&
347 a.getSize () == b.getSize ());
348 matvec res (a.getSize (), a.getRows (), a.getCols ());
349 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) - b.get (
i),
i);
355 assert (a.getRows () == b.getRows () && a.getCols () == b.getCols ());
356 matvec res (a.getSize (), a.getRows (), a.getCols ());
357 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) - b,
i);
393 matvec res (a.getSize (), a.getRows (), a.getCols ());
394 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) * z,
i);
405 matvec res (a.getSize (), a.getRows (), a.getCols ());
406 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) *
d,
i);
417 assert (a.getSize () == b.
getSize ());
418 matvec res (a.getSize (), a.getRows (), a.getCols ());
419 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) * b.
get (
i),
i);
430 matvec res (a.getSize (), a.getRows (), a.getCols ());
431 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) / z,
i);
437 matvec res (a.getSize (), a.getRows (), a.getCols ());
438 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) /
d,
i);
444 assert (a.getSize () == b.
getSize ());
445 matvec res (a.getSize (), a.getRows (), a.getCols ());
446 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) / b.
get (
i),
i);
452 assert (a.getCols () == b.getRows () && a.getSize () == b.getSize ());
453 matvec res (a.getSize (), a.getRows (), b.getCols ());
454 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) * b.get (
i),
i);
460 assert (a.getCols () == b.getRows ());
461 matvec res (a.getSize (), a.getRows (), b.getCols ());
462 for (
int i = 0;
i < a.getSize ();
i++) res.
set (a.get (
i) * b,
i);
474 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
det (a.get (
i)),
i);
480 matvec res (a.getSize (), a.getRows (), a.getCols ());
481 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
inverse (a.get (
i)),
i);
492 matvec res (a.getSize (), a.getRows (), a.getCols ());
493 for (
int i = 0;
i < a.getSize ();
i++) res.set (
pow (a.get (
i),
n),
i);
499 assert (a.getSize () == v.
getSize ());
500 matvec res (a.getSize (), a.getRows (), a.getCols ());
501 for (
int i = 0;
i < a.getSize ();
i++)
508 matvec res (a.getSize (), a.getRows (), a.getCols ());
509 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
conj (a.get (
i)),
i);
515 matvec res (a.getSize (), a.getRows (), a.getCols ());
516 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
abs (a.get (
i)),
i);
521 matvec
dB (matvec a) {
522 matvec res (a.getSize (), a.getRows (), a.getCols ());
523 for (
int i = 0;
i < a.getSize ();
i++) res.set (
dB (a.get (
i)),
i);
529 matvec res (a.getSize (), a.getRows (), a.getCols ());
530 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
arg (a.get (
i)),
i);
536 matvec res (a.getSize (), a.getRows (), a.getCols ());
537 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
real (a.get (
i)),
i);
543 matvec res (a.getSize (), a.getRows (), a.getCols ());
544 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
imag (a.get (
i)),
i);
551 matvec res (a.getSize (), a.getRows (), a.getCols ());
552 for (
int i = 0;
i < a.getSize ();
i++) res.
set (
adjoint (a.get (
i)),
i);
558 matvec res (a.getSize (), a.getCols (), a.getRows ());
566 assert (s.getCols () == s.getRows () &&
567 s.getCols () == zref.
getSize () && s.getCols () == z0.
getSize ());
568 matvec res (s.getSize (), s.getCols (), s.getRows ());
569 for (
int i = 0;
i < s.getSize ();
i++)
575 int d = s.getRows ();
579 matvec
stos (matvec
s, nr_double_t
zref, nr_double_t z0) {
593 assert (s.getCols () == s.getRows () && s.getCols () == z0.
getSize ());
594 matvec res (s.getSize (), s.getCols (), s.getRows ());
595 for (
int i = 0;
i < s.getSize ();
i++) res.
set (
stoy (s.get (
i), z0),
i);
605 assert (y.getCols () == y.getRows () && y.getCols () == z0.
getSize ());
606 matvec res (y.getSize (), y.getCols (), y.getRows ());
607 for (
int i = 0;
i < y.getSize ();
i++) res.
set (
ytos (y.get (
i), z0),
i);
617 assert (s.getCols () == s.getRows () && s.getCols () == z0.
getSize ());
618 matvec res (s.getSize (), s.getCols (), s.getRows ());
619 for (
int i = 0;
i < s.getSize ();
i++) res.
set (
stoz (s.get (
i), z0),
i);
629 assert (z.getCols () == z.getRows () && z.getCols () == z0.
getSize ());
630 matvec res (z.getSize (), z.getCols (), z.getRows ());
631 for (
int i = 0;
i < z.getSize ();
i++) res.
set (
ztos (z.get (
i), z0),
i);
641 assert (z.getCols () == z.getRows ());
642 matvec res (z.getSize (), z.getCols (), z.getRows ());
643 for (
int i = 0;
i < z.getSize ();
i++) res.
set (
ztoy (z.get (
i)),
i);
649 assert (y.getCols () == y.getRows ());
650 matvec res (y.getSize (), y.getCols (), y.getRows ());
651 for (
int i = 0;
i < y.getSize ();
i++) res.
set (
ytoz (y.get (
i)),
i);
658 matvec
twoport (matvec m,
char in,
char out) {
659 assert (m.getCols () >= 2 && m.getRows () >= 2);
660 matvec res (m.getSize (), 2, 2);
661 for (
int i = 0;
i < m.getSize ();
i++)
669 assert (m.getCols () >= 2 && m.getRows () >= 2);
671 for (
int i = 0;
i < m.getSize ();
i++) res.
set (
rollet (m.get (
i)),
i);
678 assert (m.getCols () >= 2 && m.getRows () >= 2);
680 for (
int i = 0;
i < m.getSize ();
i++) res.
set (
b1 (m.get (
i)),
i);
qucs::vector get(int, int)
matrix inverse(matrix a)
Compute inverse matrix.
std::complex< nr_double_t > nr_complex_t
matrix adjoint(matrix a)
adjoint matrix
matrix ytos(matrix y, qucs::vector z0)
Admittance matrix to scattering parameters.
matrix real(matrix a)
Real part matrix.
matrix abs(matrix a)
Computes magnitude of each matrix element.
nr_complex_t get(int, int)
Returns the matrix element at the given row and column.
matrix ytoz(matrix y)
Convert admittance matrix to impedance matrix.
matrix operator*(matrix a, nr_complex_t z)
Matrix scaling complex version.
nr_complex_t pow(const nr_complex_t z, const nr_double_t d)
Compute power function with real exponent.
matrix stos(matrix s, qucs::vector zref, qucs::vector z0)
S params to S params.
matrix twoport(matrix m, char in, char out)
Generic conversion matrix.
nr_double_t rollet(matrix)
void setName(const char *)
nr_complex_t sqr(const nr_complex_t z)
Square of complex number.
matrix imag(matrix a)
Imaginary part matrix.
matrix operator-(matrix a, matrix b)
Matrix subtraction.
static matvec * getMatrixVector(qucs::vector *, char *)
matrix stoy(matrix s, qucs::vector z0)
Scattering parameters to admittance matrix.
void setName(const char *)
matvec operator+=(matvec)
matvec operator-=(matvec)
nr_double_t dB(const nr_complex_t z)
Magnitude in dB Compute .
matrix ztos(matrix z, qucs::vector z0)
Convert impedance matrix scattering parameters.
matrix operator/(matrix a, nr_complex_t z)
Matrix scaling division by complex version.
void set(nr_double_t, int)
nr_complex_t det(matrix a)
Compute determinant of the given matrix.
void set(int, int, nr_complex_t)
Sets the matrix element at the given row and column.
matrix transpose(matrix a)
Matrix transposition.
Dense matrix class header file.
matrix operator+(matrix a, matrix b)
Matrix addition.
Dense complex matrix class This class defines a matrix object with its methods, operators and operati...
matrix stoz(matrix s, qucs::vector z0)
Scattering parameters to impedance matrix.
void set(qucs::vector, int, int)
matrix conj(matrix a)
Conjugate complex matrix.
matrix ztoy(matrix z)
impedance matrix to admittance matrix.
static void getMatrixVectorSize(qucs::vector *, char *, int &, int &, int &)
matrix arg(matrix a)
Computes the argument of each matrix element.
static char * isMatrixVector(char *, int &, int &)
static char * createMatrixString(const char *, int, int)