Difference between "1" and "1." makes a change in BodePlot

I thought when I define a variable using “x=1” or “x=1.”, the very difference is the resolution. But here is an interesting example bothering me.
(1) Using “1.”

T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
BodePlot[sysCL[3, 427.5, 0.285, 2*10^-3]]

(2) Using “1”

T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
BodePlot[sysCL[3, 427.5, 0.285, 2*10^-3]]

The only difference between (1) and (2) is “1.” and “1”, but the result is totally different. See

Can any one give an explanation?
[1]: /c/portal/getImageAttachment?filename=6.jpg&userId=312465

What is difference between 1 and 1. you may see in these examples:

In[100]:= 1 + 3/5

Out[100]= 8/5

And next try with 1.

In[99]:= 1. + 3/5

Out[99]= 1.6

As you see in first example Mathematica try to give EXACT result because you don’t use decimal point. When any number in an arithmetic expression is given with an explicit decimal point - as in your case 1. - you get an APPROXIMATE numerical result for the whole expression.

These APPROXIMATIONS in complex equations affect the output result just because they are approximations not exact numbers. End Result much depends what time of the complex calculations you serve your REQUEST FOR APPROXIMATION to Mathematica with some variable as “K1 = 1.;”

This topic is more like academic discussion than a simple answer.

P.s. In your concrete case I don’t see any difference when I try it!

If the result is different obviously it matters whether you define in advance any of the variables as decimal point number or not. Like these two example.

In first case if you give whole number argument of f[] result will be exact.

Clear["Global`*"]
a = 2;
b = 5;
f[c_] := (a*b)/c;

In[172]:= f[3]

Out[172]= 10/3

In second case result will be approximation because a is 2.

Clear["Global`*"]
a = 2.;
b = 5;
f[c_] := (a*b)/c;

In[191]:= f[3]

Out[191]= 3.33333

but if use instead 3 argument 3. no matter what variable a is (2 or 2.) result will be approximation in the two cases.

Clear["Global`*"]
a = 2;
b = 5;
f[c_] := (a*b)/c;

In[209]:= f[3.]

Out[209]= 3.33333

and

Clear["Global`*"]
a = 2.;
b = 5;
f[c_] := (a*b)/c;

In[223]:= f[3.]

Out[223]= 3.33333

Do you understand?

In your case difference can be only if you use variables Kpi, Kii, R, L as exact numbers

For examples this result:

T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
BodePlot[sysCL[3, 427, 2, 2*10^-3]]

will be different from this result:

T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
BodePlot[sysCL[3, 427, 2, 2*10^-3]]

Thanks for your answer.

I knew the difference between “1.” and “1” is related to the precision, like 0.3333 or 1/3.

But in the two cases, I got totally different results, more than the difference of precision. See the pic.

Can you ask your friends to try my code once more? I run the code in 2 different computers and I get the same result.

By the way, I couldn’t reply to your reply in Chrome, but it seems OK in IE.

Can you ask your friends to try my code once more?

I have no friends Seasong Zhang.

I run the code in 2 different computers and I get the same result.

I run the code in 2 different computers too - but result is the same for me, no difference.

Can you test these two codes and show me result on your system:

T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

and this:

T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

Are result like mine?

I have a filling that for some reason your system and Mathematica mess up order of calculation in code line when your K1 is 1 and 1.:

sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)

If your result is like mine - probably there is a BUG in function BodePlot - report it to Wolfram. I’m with Mathematica 8 version.

YES - Your problem is that your system and Mathematica mess up order of calculation in code line

sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)

and interprets (Kpi+Kii/s) as ((Kpi+Kii)/s)

sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*((Kpi + Kii)/s)*1/(R + L s)

I’m with Mathematica 9. But I couldn’t get your figures which could prove the calculating order problem. Instead, I got two same plots(maybe there are tiny difference. See

Report for BUG Wolfram. Make new thread in Dashboard and titled it “Calculation order BUG in Mathematica 9…” They’ll respond. Give link to these topic too.

If Mathematica 9 really have a such “calculation order bug”, they will be grateful to you - because this is such a big problem that you can not even comprehend it.

I guess this problem is related to an undefined variable s that you use in function sysCL[] in some way.

Can you please make to me these 4 examples and show me results here:

T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

and

T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*((Kpi + Kii)/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

and

T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

and

T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*((Kpi + Kii)/s)*1/(R + L s)
sysCL[3, 427.5, 0.285, 2*10^-3]

maybe there are tiny difference

No, Seasong Zhang they have no difference if you ask me. And they must have a huge difference easily visible to the eye as I show you in my computer result.

Sorry to take 3 days to reply. There was something wrong with the reply button so that I couldn’t make my reply.

Please check the pic.

There seems no bug of calculation order. However, check this. “Simplify” changes everything!!!

2.bmp (1.44 MB)

3.bmp (1.32 MB)

Result expressions look as-expected in 10.0.0, but the third BodePlot has the extra hump. Strange. I will report it.

In[1]:= $Version

Out[1]= 10.0 for Mac OS X x86 (64-bit) (June 29, 2014)

In[2]:= T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
outA = sysCL[3, 427.5, 0.285, 2*10^-3]

Out[5]= 
             427.5
     1. (3 + -----)
               s
-------------------------
      9 s             s
(1 + -----) (0.285 + ---)
     50000           500

In[6]:= T1 = 180*10^-6;
K1 = 1.;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*((Kpi + Kii)/s)*1/(R + L s)
outB = sysCL[3, 427.5, 0.285, 2*10^-3]

Out[9]= 
           430.5
---------------------------
      9 s             s
(1 + -----) (0.285 + ---) s
     50000           500

In[10]:= T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*(Kpi + Kii/s)*1/(R + L s)
outC = sysCL[3, 427.5, 0.285, 2*10^-3]

Out[13]= 
            427.5
        3 + -----
              s
-------------------------
      9 s             s
(1 + -----) (0.285 + ---)
     50000           500

In[14]:= T1 = 180*10^-6;
K1 = 1;
sysCL[Kpi_, Kii_, R_, L_] := K1/(T1 s + 1)*((Kpi + Kii)/s)*1/(R + L s)
outD = sysCL[3, 427.5, 0.285, 2*10^-3]

Out[17]= 
          430.5
---------------------------
      9 s             s
(1 + -----) (0.285 + ---) s
     50000           500

Thanks a lot. If you get any useful infomation from Wolfram, can you publish it?

The underlying cause has been found. Developers are discussing the best way to fix it.

You might try Simplify or Expand on the expression (or its numerator) before plotting.