Here's my solution. I used Newton's method to quickly find the zero of the = NPV function.=0A=0AUnfortunately, my calculus book failed to mention that N= ewton's method will fail to converge when the function enters a horizontal = asymptote if it's moving toward y=3D0 as it does so, which happens in this = function at deeply negative values of IRR. Thus, my solution can be a bit u= nreliable, especially for negative values of IRR.=0A=0AAnyway, here's the c= ode:=0A=0ADX =3D 1e-4=0AEPSILON =3D 1e-7=0A=0Adef nderiv(f)=0A lambda {|x|= (f[x+DX]-f[x-DX])/(2*DX)}=0Aend=0A=0AMAX_ITERATIONS =3D 500=0Adef find_zer= o(f, start)=0A iterations =3D 0=0A f_prime =3D nderiv(f)=0A x =3D start= =0A until f[x].abs < EPSILON or (iterations+=3D1) > MAX_ITERATIONS=0A x= =3D x - f[x]/f_prime[x]=0A end=0A if iterations > MAX_ITERATIONS=0A n= il=0A else=0A x=0A end=0Aend=0A=0Adef irr(cash_flows)=0A net_value = =3D lambda do |irr|=0A (0...cash_flows.length).to_a.inject(0) do |s,t|= =0A s+cash_flows[t]/((1+irr)**t)=0A end=0A end=0A =0A find_zero(= net_value,0.1) or find_zero(net_value,-0.1)=0Aend=0A=0A----- Original Messa= ge ----=0AFrom: Ruby Quiz <james / grayproductions.net>=0ATo: ruby-talk ML <r= uby-talk / ruby-lang.org>=0ASent: Friday, February 8, 2008 8:01:13 AM=0ASubje= ct: [QUIZ] Internal Rate of Return (#156)=0A=0A=0AThe =0Athree =0Arules =0A= of =0ARuby =0AQuiz:=0A=0A1. =0APlease =0Ado =0Anot =0Apost =0Aany =0Asolut= ions =0Aor =0Aspoiler =0Adiscussion =0Afor =0Athis =0Aquiz =0Auntil=0A48 = =0Ahours =0Ahave =0Apassed =0Afrom =0Athe =0Atime =0Aon =0Athis =0Amessage.= =0A=0A2. =0ASupport =0ARuby =0AQuiz =0Aby =0Asubmitting =0Aideas =0Aas =0A= often =0Aas =0Ayou =0Acan:=0A=0Ahttp://www.rubyquiz.com/=0A=0A3. =0AEnjoy!= =0A=0ASuggestion: =0AA =0A[QUIZ] =0Ain =0Athe =0Asubject =0Aof =0Aemails = =0Aabout =0Athe =0Aproblem =0Ahelps =0Aeveryone=0Aon =0ARuby =0ATalk =0Afol= low =0Athe =0Adiscussion. =0APlease =0Areply =0Ato =0Athe =0Aoriginal =0Aq= uiz =0Amessage,=0Aif =0Ayou =0Acan.=0A=0A-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-= =3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D= -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D=0A=0Aby =0AHarrison = =0AReiser=0A=0AInternal =0ARate =0Aof =0AReturn =0A(IRR =0A=E2=80=93=0Ahttp= ://en.wikipedia.org/wiki/Internal_rate_of_return) =0Ais =0Aa =0Acommon =0Af= inancial=0Ametric, =0Aused =0Aby =0Ainvestment =0Afirms =0Ato =0Apredict = =0Athe =0Aprofitability =0Aof =0Aa =0Acompany =0Aor=0Aproject. =0AFinding = =0Athe =0AIRR =0Aof =0Aa =0Acompany =0Aamounts =0Ato =0Asolving =0Afor =0Ai= t =0Ain =0Athe =0Aequation=0Afor =0ANet =0APresent =0AValue =0A(NPV =0A=E2= =80=93 =0Ahttp://en.wikipedia.org/wiki/Net_present_value),=0Aanother =0Aval= uable =0Adecision-making =0Ametric:=0A=0A =0A =0A =0A =0A =0AN =0A = =0A =0AC_t=0A =0ANPV =0A=3D =0A=CE=A3 =0A------------=0A =0A =0A = =0A =0At=3D0 =0A(1 =0A+ =0AIRR)**t=0A=0AThis =0Aweek's =0Aquiz =0Ais =0At= o =0Acalculate =0Athe =0AIRR =0Afor =0Aany =0Agiven =0Avariable-length =0Al= ist =0Aof=0Anumbers, =0Awhich =0Arepresent =0Ayearly =0Acash =0Aflows, =0At= he =0AC_t's =0Ain =0Athe =0Aformula =0Aabove: =0AC_0,=0AC_1, =0Aetc. =0A(C_= 0 =0Ais =0Atypically =0Aa =0Anegative =0Avalue, =0Acorresponding =0Ato =0At= he =0Ainitial=0Ainvestment =0Ainto =0Athe =0Aproject.) =0AFrom =0Athe =0Aex= ample =0Ain =0Athe =0AWikipedia =0Aarticle=0A(http://en.wikipedia.org/wiki/= Internal_rate_of_return), =0Afor =0Ainstance, =0Ayou =0Ashould=0Abe =0Aable= =0Ato =0Aproduce =0Aa =0Arate =0Aof =0A17.09% =0A(to =0Afour =0Adecimal = =0Aplaces, =0Alet's =0Asay) =0Afrom=0Athis =0Aor =0Aa =0Asimilar =0Acommand= :=0A=0A =0Airr([-100,+30,+35,+40,+45])=0A =0A=3D> =0A0.1709...=0A=0AK= eep =0Ain =0Amind =0Athat =0Aan =0AIRR =0Agreater =0Athan =0A100% =0Ais =0A= possible. =0AExtra =0Acredit =0Aif =0Ayou =0Acan=0Aalso =0Acorrectly =0Ahan= dle =0Ainput =0Athat =0Aproduces =0Anegative =0Arates, =0Adisregarding =0At= he =0Afact=0Athat =0Athey =0Amake =0Ano =0Asense.=0A=0A=0A=0A=0A=0A=0A = __________________________________________________________________________= __________=0ABe a better friend, newshound, and =0Aknow-it-all with Yahoo! = Mobile. Try it now. http://mobile.yahoo.com/;_ylt=3DAhu06i62sR8HDtDypao8W= cj9tAcJ =0A