У меня есть структура, но я не знаю, как ее использовать - PullRequest
0 голосов
/ 26 октября 2009
typedef struct Complex{
double real;
int img;
} Complex;

Я видел, как люди используют это как:

Complex sqrt( double x) {
}

как 'real' и 'img' играют роль в этом типе функции? Спасибо

Ответы [ 6 ]

4 голосов
/ 26 октября 2009

Может использоваться следующим образом:

Complex sqrt(double x) {
    Complex c = {0.0, 0.0};
    if ( x>= 0.0 )
       c.real = square_root(x);
    else
       c.img = square_root(-x);
    return c;
}

Я не знаю, если это ошибка, но Complex :: img также должен быть двойным.

(обратите внимание, что комплексные числа являются надмножеством вещественных чисел, поэтому вместо двойного можно использовать комплексное число, если его мнимая часть равна нулю)

3 голосов
/ 26 октября 2009

Вы можете использовать это так:

Complex sqrt( double x) {
    Complex r;
    r.real = f(x);
    r.img = g(x);
    return r;
}

В этом примере f(x) и g(x) будут вызовами функций, которые вычисляют действительную и мнимую часть квадратного корня из комплексного числа x. (В действительности вы, вероятно, рассчитали бы квадратный корень внутри функции sqrt(), но я просто показываю это как пример того, как использовать структуру Complex.)

Вот ссылка , которая объясняет структуры в C , которые могут быть вам полезны.

0 голосов
/ 27 октября 2009

Квадратный корень комплексного числа - это вычисление, обычно не встречающееся в вашем ручном калькуляторе ...

Ознакомьтесь с теоремой Демовра, которая используется для преобразования переменных в полярные координаты, для которых есть формула замкнутой формы для квадратного корня из комплексного числа a + ib.

Пол

0 голосов
/ 26 октября 2009

Мнимая часть тоже должна быть двойной.

Для реального (двойной х):

Sqrt(x).Real = x >= 0 : Math::Sqrt(x) : 0;
Sqrt(x).Imaginary = x < 0 : Math::Sqrt(x) : 0;

Как предложил Финннк, прочитайте немного о сложной математике.

0 голосов
/ 26 октября 2009

Я полагаю, что если подпись

Complex sqrt( double x); 

Тогда x представляет реальное значение. Таким образом, Complex.img может быть 0/1, представляя, был ли x положительным или отрицательным.

Пример (принимая x за действительное число)

//C like pseudocode
Complex sqrt(double x){
      Complex result={0,0};
      if (x==0) return result;

      if (x<0){
          result.img =1;
          real = abs(x);
      }  
      result.real= sqrt_(x);//calculates square root of a positive value.
      return result;

}

    //some other place
   double r =-4.0;

   Complex root = sqrt(r);

   //prints "Square root of -4.0 is 2i"
   printf("Square root of %.2f is %.2f%c",r,root.real,(root.img?'i':''));
0 голосов
/ 26 октября 2009

Комплексные числа имеют широкий спектр применения в математике - какая роль будет зависеть от контекста приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...