15,849,829 members
See more:
Hi All,

I have a matlab program in which i have to calculate values of an expression containing complex numbers.

I have to convert the same program to C language so as to calculate the enegry estimate using another software.

Now the bone of contention here for me is how can i change the complex number expression in MATLAB to that of the equivalent in C .

Thanks,
Chandra.
Posted

## Solution 4

Poorly speaking, complex numbers are just an ordered pair of real ones, following certain rules. Hence you may code them this way:
C
```typedef struct tagComplex
{
double re; // real part
double im; // imaginary part
} Complex;```

Then you may define the functions acting on them (and enabling you to solve expressions).
For instance,

setu.dixit19 wrote:
Qen[n1]=exp(j*(n1-1)*(vv0[k]-vv0[l]))

It looks you need the complex `exp` function

C
```void complex_exp(Complex * pOperand, Complex * pResult)
{
double er = exp(pOperand->re);
pResult->re = er * cos( pOperand->im);
pResult->im = er * sin( pOperand->im);
}
```

## Solution 1

The most basic way would be to create a struct defining each component of the number. Assuming you are only working in 1 dimension then your complex number will be of the form `ai+b`, and so your struct would look like
```typedef struct {
float a; //The "imaginary" part. Might be a int instead
float b; //The real part. Might be a int instead
} ComplexNumber;```

Could you please provide the equation and indicate weather it needs to work on other similar equations or only this exact one and the operations that you are wanting to perform.
If it is a relatively simple equation like sqrt(-1) then there can be a simple answer without having to implement a complex numbers system.
```ComplexNumber ComplexSqrt(float nNumber) {
ComplexNumber cnRes = { 0, 0 };
if (nNumber < 0) { //nNumber is negative. Result will be complex
cnRes.a = sqrt(-nNumber);
} else { //nNumber is positive. Result will be real
cnRes.b = sqrt(nNumber);
}
return cnRes;
}```

## Solution 2

However the equation that i am reffering to as given below:

"Qen[n1]=exp(j*(n1-1)*(vv0[k]-vv0[l]))"

This expression is the one that i need to calculate and the concern is how to remove the 'j' part from the equation.

Looking forward to your further replies ..

cheers
Setu

## Solution 3

If you consider the complex number in the form of a+bi and like to look a code in C# then here it is. You can use operator overloading to perform arithmatic operations with complex numbers

C#
```class ComplexNumber
{
public double Number1{ get; set;}
public double Number2{ get; set;}
public double ImaginaryUnit { get; set; }
public ComplexNumber()
{

}
public ComplexNumber(double number1, double number2, double imaginaryUnit)
{
this.Number1 = number1;
this.Number2 = number2;
this.ImaginaryUnit = imaginaryUnit;
}

public static ComplexNumber operator +(ComplexNumber Number1, ComplexNumber Number2)
{
ComplexNumber number = new ComplexNumber();
number.Number1 = Number1.Number1 + Number2.Number1 ;
number.Number2 = Number1.Number2 + Number2.Number2;
number.ImaginaryUnit = Number1.ImaginaryUnit;
return number;
}

public static ComplexNumber operator -(ComplexNumber Number1, ComplexNumber Number2)
{
ComplexNumber number = new ComplexNumber();
number.Number1 = Number1.Number1 - Number2.Number1;
number.Number2 = Number1.Number2 - Number2.Number2;
number.ImaginaryUnit = Number1.ImaginaryUnit;
return number;
}
public static ComplexNumber operator *(ComplexNumber Number1, ComplexNumber Number2)
{
double ac = Number1.Number1 * Number2.Number1;
double bd = Number1.Number2 * Number2.Number2;
double bc = Number1.Number2 * Number2.Number1;
double ad = Number1.Number1 * Number2.Number2;
double result = (ac - bd) + ((bc + ad) * Number1.ImaginaryUnit);
ComplexNumber number = new ComplexNumber();
number.Number1 = ac-bd;
number.ImaginaryUnit = Number1.ImaginaryUnit;
return number;
}

public static ComplexNumber operator /(ComplexNumber Number1, ComplexNumber Number2)
{
double square = 2;
double ac=Number1.Number1 * Number2.Number1;
double bd=Number1.Number2 * Number2.Number2;
double bc=Number1.Number2 * Number2.Number1;

double c2=System.Math.Pow(Number2.Number1, square);
double d2=System.Math.Pow(Number2.Number2, square);
ComplexNumber number = new ComplexNumber();
number.Number1 = (ac + bd) / (c2 + d2);
number.Number2 = (bc - ad) / (c2 + d2);
number.ImaginaryUnit = Number1.ImaginaryUnit;
return number;
}
}
```