Особенности прямой одномерной задачи МТЗ

Напомним, что при решении прямой 1D задачи метода вертикального электрического зондирования (ВЭЗ) основная трудность заключается в расчете интегрального преобразования, для чего приходится применять линейные фильтры. Это обусловлено использованием в методе ВЭЗ точечных (трехмерных) источников поля. Поэтому для решения задачи в среде с плоскими границами необходимо просуммировать решения для всех пространственных частот (т.е. рассчитать интегральное преобразование). В методе МТЗ источник, как и границы слоев, плоский. Поэтому здесь решение ищется лишь на одной (нулевой) пространственной частоте, и никаких интегральных преобразований не возникает.

  ВЭЗ МТЗ ЧЗ
Интегральные преобразования + - +
Комплексные числа - + +
Табл. 1. Особенности 1D задач методов ВЭЗ, МТЗ и ЧЗ.

Основная трудность при решении прямой задачи МТЗ, в сравнении с прямой задачей ВЭЗ, заключается в необходимости работы с комплексными числами, возникающими за счет того, что поле является гармоническим. Попутно заметим, что при решении прямой 1D задачи метода частотного зондирования (ЧЗ) приходится иметь дело и с расчетом интегралов, и с комплексными числами, т.к. в этом случае источник является трехмерным, а поле - гармоническим (табл. 1).

Остановимся на вопросе программирования комплексных чисел. Как известно, в языке программирования FORTRAN комплексные числа являются его элементом, а в C++ - входят в состав стандартной библиотеки. При программировании на языках PASCAL и C потребуется создать функции для работы с комплексными числами самостоятельно.

Напомним, как выглядят основные операции с комплексными числами:

сложение

вычитание

умножение

деление

корень , где или

экспонента

#include <complex.h> void main() { complex a(1, 1), b(-1,-1); complex c = a * b; cout << "c.re = " << real(c) << " c.im = " << imag(c); }

Здесь и - реальная и мнимая части комплексного числа, и - модуль и фаза комплексного числа, связанные соотношениями: , , , .

type cmplx = record re, im: double; end; procedure c_mul(a,b: cmplx; var c: cmplx); begin c.re:= a.re * b.re - a.im * b.im; c.im:= b.re * a.im + a.re * b.im; end; var a,b,c: cmplx; begin a.re:= 1; a.im:= 1; b.re:= -1; b.im:= -1; c_mul(a,b,c); write('c.re = ',c.re,' c.im = ',c.im); end.
#include <stdio.h> struct cmplx { double re, im; }; struct cmplx c_mul(struct cmplx a, struct cmplx b) { struct cmplx c; c.re = a.re * b.re - a.im * b.im; c.im = b.re * a.im + a.re * b.im; return c; } void main(void) { struct cmplx a,b,c; a.re = 1; a.im = 1; b.re = -1; b.im = -1; c = c_mul(a,b); printf("c.re = %lf c.im = %lf",c.re,c.im); }

Ниже в качестве примера приводятся тексты программ, предназначенных для расчета произведения двух комплексных чисел, и написанных на языках Borland C++, Borland C и Borland Pascal.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: