0

I have this code which needs to be plotted perfectly. I'm new to python. The error is as mentioned above. Any kind of help would be appreciated.

    #Variable Initialization
    #%pylab inline
    # (a) Curie Temperature for h = 15 W/m^2
    # (b) Value of h for cure temp = 50 deg C

    import math
    import numpy
    from numpy import roots
    import matplotlib
    from matplotlib import pyplot
    Tsurr = 30+273;                                     #[K] - Temperature of surrounding
    Tf = 20+273;                                        #[K] - Temperature of Fluid Flow
    e=.5;                                               #  Emissivity of Surface
    a = .8;                                             # Absorptivity of Surface
    G = 2000;                                           #[W/m^2] - Irradiation falling on surface
    h=15;                                               #[W/m^2.k] - Thermal Convectivity from plate to air
    stfncnstt=5.67*math.pow(10,(-8));                   # [W/m^2.K^4] - Stefan Boltzmann Constant 
    T=375;                                              #[K] Value initially assumed for trial-error approach
    #Using Eq 1.3a & 1.7 and trial-and error approach of Newton Raphson 
    #calculations and results
    while(1>0):
        f=((a*G)-(h*(T-Tf)+e*stfncnstt*(T*T*T*T - Tsurr*Tsurr*Tsurr*Tsurr)));
        fd=(-h*T-4*e*stfncnstt*T*T*T);
        Tn=T-f/fd;
        if(((a*G)-(h*(Tn-Tf)+e*stfncnstt*(Tn*Tn*Tn*Tn - Tsurr*Tsurr*Tsurr*Tsurr)))<.01):
            break;
        T=Tn;

    print '%s %.2f %s' %("\n (a) Cure Temperature of Plate =",T-273.,"degC\n");
    #solution (b)
    Treq=50+273;
    #def T(h):
    #    t=375;
    #    while(1>0):
    #        f=((a*G)-(h*(t-Tf)+e*stfncnstt*(t*t*t*t - Tsurr*Tsurr*Tsurr*Tsurr)));
    #        fd=(-h*t-4*e*stfncnstt*t*t*t);
    #        Tn=t-f/fd;
    #        if((a*G)-(h*(Tn-Tf)+e*stfncnstt*(Tn*Tn*Tn*Tn - Tsurr*Tsurr*Tsurr*Tsurr))<.01):
    #           break;
    #    tnew=Tn;
    #    return tnew;
    rot=numpy.zeros(4);
    rt=0;

    def T(h):
        coeff = ([-e*stfncnstt, 0,0, -h, a*G+h*Tf+e*stfncnstt*Tsurr*Tsurr*Tsurr*Tsurr]);
        rot=numpy.roots(coeff);
        for i in range (0,3):
            if rot[i]<250 and rot[i]>0:
                rt=rot[i];
        return rt;
Error at this part. The function is not working.! What can be the error. Please suggest.     
    h = range(0,100)
    tn=range(0,100)
    for i in range (0,100):
        tn[i] = T(i) -273;

    Ti=50+273;
    hnew=((a*G)-(e*stfncnstt*(Ti*Ti*Ti*Ti - Tsurr*Tsurr*Tsurr*Tsurr)))/(Ti-Tf);

    pyplot.plot(h,tn);
    pyplot.xlabel("h (W m^2/K)");
    pyplot.ylabel("T (C)");
    pyplot.show();
    print '%s %.2f %s' %("\n (b) Air flow must provide a convection of =",hnew," W/m^2.K");
    #print '%s' %("\n The code for the graph requires more than 10 min to run. ")
    #print '%s' %("\n To run it, please remove comments. It is perfectly correct. The reason it takes such a long time")
    #print '%s' %("\n  is that it needs to calculate using Newton raphson method at 100 points. Each point itself takes a minute.")
    #END

1 Answer 1

1

it will say

UnboundLocalError: local variable 'rt' referenced before assignment

since you have assigned something to rt rt=rot[i], rt is recognized as a local variable then. If you want to make it global, make it global explicitly using global rt:

def T(h):
    global rt
    #do sth....

note that even if the assignment is not executed, the intepreter will still see assigned var as local:

In [136]: var=2
     ...: def foo():
     ...:   if False:
     ...:       var=4
     ...:   print var
     ...:  

In [137]: foo()
---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-137-624891b0d01a> in <module>()
----> 1 foo()

<ipython-input-136-ab29dd655074> in foo()
      3         if False:
      4                 var=4
----> 5         print var
      6 

UnboundLocalError: local variable 'var' referenced before assignment
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for your answer. It was very helpful. However, in the same question, the function gives 4 roots of which some are complex, how to identify the real root among them.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.