Equation Evaluation Problem in Mathematica

  • Context: Mathematica 
  • Thread starter Thread starter EngWiPy
  • Start date Start date
  • Tags Tags
    Mathematica
Click For Summary

Discussion Overview

The discussion revolves around evaluating equations in Mathematica, particularly focusing on issues related to the output being constant for varying values of the signal-to-noise ratio (SNR). Participants explore the implications of their code and the definitions of variables involved in the calculations.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant reports that the output remains constant for different SNR values, despite A, Q, and Ne being constants.
  • Another participant requests examples of values for A, Q, and Ne, and asks for clarification on the function Meq.
  • Several participants suggest specific values for A, Q, and Ne, and provide definitions for Meq and a[n].
  • Concerns are raised about clearing variables in Mathematica to avoid conflicts, with suggestions to restart the kernel.
  • A participant describes a different code snippet and questions why the second part of their output remains constant, despite being dependent on SNR.
  • One participant suggests modifying the loop conditions to ensure proper summation indices, indicating that the current setup leads to no summation occurring.
  • Another participant claims they receive different outputs for varying SNR values, prompting further inquiry into the code structure.
  • Further analysis reveals that the summation indices may not be correctly defined, leading to zero results in certain cases.
  • One participant shares modified code that produces expected results, but later encounters similar issues with a more complex code setup.

Areas of Agreement / Disagreement

Participants express differing experiences regarding the output of their Mathematica code when varying SNR. While some claim to see changes in output, others assert that their results remain constant, indicating unresolved discrepancies in understanding or implementation.

Contextual Notes

Participants mention the importance of correctly defining summation indices and clearing variables, but there are unresolved issues regarding the mathematical setup and the implications of certain parameter values on the output.

EngWiPy
Messages
1,361
Reaction score
61
Hello,

I have the following line in Mathematica:

Code:
Print[Pout = (2^-Q*E^(A/2))/SNR \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(q = 0\), \(Q\)]Binomial[Q, q] \(
\*UnderoverscriptBox[\(\[Sum]\), \(n = 0\), \(Ne + q\)]
FractionBox[
SuperscriptBox[\((\(-1\))\), \(n\)], \(a[n]\)] Re[
\*FractionBox[\(Meq[\(-
\*FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]\)]\), 
FractionBox[\(A + \((2*Pi*I*n)\)\), \(2*SNR\)]]]\)\)]

But the problem is that for different values of SNR, the result will be the same all the time. Why is that happening? A, Q, and Ne are all constants.

Thanks in advance
 
Physics news on Phys.org
What are some examples of what A Q and Ne are so i can try it?
and what is meq?
 
Hepth said:
What are some examples of what A Q and Ne are so i can try it?
and what is meq?

Try these expressions:
Code:
A=23
Q=15
Ne=21
Meq[s_]:=1/(1-s)

Regards
 
and also, the a[n] function or array?

but before that make sure youre clearing any variables youre reusing.
restarting the kernel does that.
 
Hepth said:
and also, the a[n] function or array?

but before that make sure youre clearing any variables youre reusing.
restarting the kernel does that.

Assume
Code:
a[n]=1
How clear all variables? I have many of them.

Regards
 
I have the same problem again in the following code:

Code:
gA = 10;
M = 1;
Ne = 1;
If[M >= 1, m = M, m = 0];
For[SNRdB = 0, SNRdB <= 10, SNRdB++,
 SNR = 10^(SNRdB/10);
 Print[F1 = \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(r = m\), \(M\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(i = 0\), \(M - r\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(j = 0\), \(r + i\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(k = 0\), \(j*\((Ne - 1)\)\)]
\*SuperscriptBox[\((\(-1\))\), \(i + j\)]*Binomial[M, r]*
        Binomial[M - r, i]*Binomial[r + i, j]*
\*SuperscriptBox[\(E\), 
FractionBox[\(\(-j\)*SNR\), \(gA\)]]*
\*SuperscriptBox[\((
\*FractionBox[\(SNR\), \(g\)])\), \(k\)]\)\)\)\)]]
For[SNRdB = 0, SNRdB <= 10, SNRdB++,
 SNR = 10^(SNRdB/10);
 Print[F2 = 1 - \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(r1 = m\), \(M - 1\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(i1 = 1\), \(M - r1\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(j1 = 1\), \(r1 + i1\)]\(
\*UnderoverscriptBox[\(\[Sum]\), \(k1 = 0\), \(j1*\((Ne - 1)\)\)]
\*SuperscriptBox[\((\(-1\))\), \(i1 + j1\)]*Binomial[M, r1]*
         Binomial[M - r1, i1]*Binomial[r1 + i1, j1]*
\*SuperscriptBox[\(E\), 
FractionBox[\(\(-j1\)*SNR\), \(gA\)]]*
\*SuperscriptBox[\((
\*FractionBox[\(SNR\), \(g\)])\), \(k1\)]\)\)\)\)]]

1-1/\[ExponentialE]^(1/10)

1-\[ExponentialE]^-1/10^(9/10)

1-\[ExponentialE]^-1/10^(4/5)

1-\[ExponentialE]^-1/10^(7/10)

1-\[ExponentialE]^-1/10^(3/5)

1-\[ExponentialE]^-1/Sqrt[10]

1-\[ExponentialE]^-1/10^(2/5)

1-\[ExponentialE]^-1/10^(3/10)

1-\[ExponentialE]^-1/10^(1/5)

1-\[ExponentialE]^-1/10^(1/10)

1-1/\[ExponentialE]

1

1

1

1

1

1

1

1

1

1

1

Why is the second part constant, even though it is a dependent on SNR?

Regards
 
Because of your sums and their indices. To fix this, add:

If[M > 1, m = M, m = 0];

before the second For loop. It changes the greater than equal to to just a greater than. That way the second sum in the second for loop doesn't go from 1 to 0 (1 to M-r1 == M-m==0)
 
As for your first question, I DO get something different each time I change SNR.
 
Hepth said:
As for your first question, I DO get something different each time I change SNR.

Really? How is that? Try to put the SNR in a For[] loop, and tell me what will happen. Because I am using a For[] loop actually.

Regarding your previous post, I have doubts that I have something wrong in the mathematical equations. So, I will double check them and see what happen then.

Thank you
 
  • #10
FOR:
Code:
A = 23;
Q = 15;
Ne = 21;
Meq[s_] := 1/(1 - s)
a[n_] = 1;
For[SNRdB = 0, SNRdB <= 10, SNRdB++,
  SNR = 10^(SNRdB/10);
Print[
   Pout =
          Refine[(1.0) (2^-Q*E^(A/2))/SNR
<br /> \left.\left.\left.\sum _{q=0}^Q \text{Binomial}[Q,q]\sum _{n=0}^{\text{Ne}+q} \frac{(-1)^n}{a[n]}\text{Re}\left[\frac{\text{Meq}\left[-\frac{A+(2*\text{Pi}*I*n)}{2*\text{SNR}}\right]}{\frac{A+(2*\text{Pi}*I*n)}{2*\text{SNR}}}\right]\right]\right]\right]<br />

The changes I made were adding the Refine to simplify the complex stuff, and multiplying by 1.0 to give me a real value.
I also added the SNR changing in the for loop. Looks like it changes when SNR does. Or did I do something wrong?

EDIT: oops, here's my output:
343.991

424.207

520.658

635.431

770.336

926.63

1104.7

1303.75

1521.56

1754.43

1997.27
 
Last edited:
  • #11
S_David said:
Regarding your previous post, I have doubts that I have something wrong in the mathematical equations. So, I will double check them and see what happen then.

Thank you

What I mean is that for your given values, you have a sum over
<br /> \sum _{\text{r1}=m}^{M-1} \sum _{\text{i1}=1}^{M-\text{r1}} \sum _{\text{j1}=1}^{\text{r1}+\text{i1}} \sum _{\text{k1}=0}^{\text{j1}*(\text{Ne}-1)} <br />
but you have defined :
If[M >= 1, m = M, m = 0];
and M IS 1, so m=M=1;
Then in your sum
<br /> \sum _{\text{r1}=m}^{M-1} \sum _{\text{i1}=1}^{M-\text{r1}} <br />
you have:
r1 from {m to M-1} which is r1 from {1 to (1-1)} or {1 to 0}
then you have i1 from {1 to M-r1} which is {1 to (1-1)} or {1 to 0}

So it doesn't sum anything.
see :
<br /> M=1;m=1;\sum _{\text{r1}=m}^{M-1} \sum _{\text{i1}=1}^{M-\text{r1}} 1==0<br />
 
  • #12
Yes, now the fake code is working. I said fake because I gave you fake parameters, so the values you got are not the expected one, because there are not in the range between 0 and 1 as it must be by definition. When I did a slight change toward the real parameters I got the expected results as following:

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

0.142877

0.246246

0.390748

0.564677

0.738295

0.875494

0.956523

0.989842

0.998584

0.999898

0.999997

But when I turn my attention to my real, relatively long code, I faced with the same problem again, although I used the same procedure as you described. I don't know why.

Best Regards
 

Similar threads

  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 3 ·
Replies
3
Views
5K
Replies
10
Views
3K
  • · Replies 4 ·
Replies
4
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K