Different Values, Constanst Results in Mathematica

  • Context: Mathematica 
  • Thread starter Thread starter EngWiPy
  • Start date Start date
  • Tags Tags
    Mathematica
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
6 replies · 2K views
EngWiPy
Messages
1,361
Reaction score
61
Hello,

I have the following piece of code in Mathematica:

Code:
Na =.;
Q =.;
A = 23;
Q = 15;
Na = 21;
MGF[s_, gC_] := 1/(1 - gC*s);
a[n_] := If[n == 0, 2, 1];
For[SNRdB = 0, SNRdB <= 40, SNRdB = SNRdB + 2, SNR = 10^(SNRdB/10);
 gC = 0.5*SNR;
 
 Print[SetPrecision[Pout = ((2^-Q*E^(A/2))/SNR*\!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]Binomial[Q, q]*\(
\*UnderoverscriptBox[\(\[Sum]\), \(n = 0\), \(Na + q\)]
FractionBox[
SuperscriptBox[\((\(-1\))\), \(n\)], \(a[n]\)] Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]\), gC]\), 
FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]]]\)\)) + (E^-A/(
       1 - E^-A) + (E^(A/2)*2^-Q)/SNR \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]
\*SuperscriptBox[\((\(-1\))\), \(Na + q + 1\)]*Binomial[Q, q]*Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I \((Na + q + 1)\))\)\), \(2*SNR\)]\), 
             gC]\), 
FractionBox[\(A + 2*Pi*I \((Na + q + 1)\)\), \(2*SNR\)]]]\)), 10]]]

Despite the variable "SNR" changed in each iteration of the for loop, the printed result is the same in all iterations. Why is this?

Thanks in advance
 
Physics news on Phys.org
DaleSpam said:
That is correct. The formula you posted does in fact give the same value for different values of SNRdB.

Thank you DaleSpam, your answer made me double check and think about the problem, and the problem was a logical one. Some parameters must be fixed and others must be changed, while what I did was that I changed all variables altogether.

Best regards
 
Ahh, ok. One thing you might think of doing is setting up a function that takes all of the parameters. That makes evaluating it at different values much easier.
 
DaleSpam said:
Ahh, ok. One thing you might think of doing is setting up a function that takes all of the parameters. That makes evaluating it at different values much easier.

Execuse me, I didn't get you. Can you elaborate please.
 
For example:

Code:
f[n_, Q_, q_, A_, gC_, Na_, SNR_] := 
(-1)^n/a[n] ((2^-Q*E^(A/2))/SNR*\!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]\(Binomial[Q, q]*\(
\*UnderoverscriptBox[\(\[Sum]\), \(n = 0\), \(Na + q\)]
FractionBox[
SuperscriptBox[\((\(-1\))\), \(n\)], \(a[n]\)] Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]\), gC]\), 
FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]]]\)\)\)) + (E^-A/( 
      1 - E^-A) + (E^(A/2)*2^-Q)/SNR \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]\(
\*SuperscriptBox[\((\(-1\))\), \(Na + q + 1\)]*Binomial[Q, q]*Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I \((Na + q + 1)\))\)\), \(2*SNR\)]\), 
          gC]\), 
FractionBox[\(A + 2*Pi*I \((Na + q + 1)\)\), \(2*SNR\)]]]\)\))

Then your for loop is cleaner and easier to debug since you just call f in each iteration with different values for the arguments.
 
DaleSpam said:
For example:

Code:
f[n_, Q_, q_, A_, gC_, Na_, SNR_] := 
(-1)^n/a[n] ((2^-Q*E^(A/2))/SNR*\!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]\(Binomial[Q, q]*\(
\*UnderoverscriptBox[\(\[Sum]\), \(n = 0\), \(Na + q\)]
FractionBox[
SuperscriptBox[\((\(-1\))\), \(n\)], \(a[n]\)] Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]\), gC]\), 
FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]]]\)\)\)) + (E^-A/( 
      1 - E^-A) + (E^(A/2)*2^-Q)/SNR \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]\(
\*SuperscriptBox[\((\(-1\))\), \(Na + q + 1\)]*Binomial[Q, q]*Re[
\*FractionBox[\(MGF[\(-
\*FractionBox[\(A + \((2*Pi*I \((Na + q + 1)\))\)\), \(2*SNR\)]\), 
          gC]\), 
FractionBox[\(A + 2*Pi*I \((Na + q + 1)\)\), \(2*SNR\)]]]\)\))

Then your for loop is cleaner and easier to debug since you just call f in each iteration with different values for the arguments.

Yes, you are right. I will try do this. Thanks