Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
"Abhimanyu Arora" <abhimanyu.arora@student.kuleuven.be> |

To |
<statalist@hsphsun2.harvard.edu> |

Subject |
st: RE: RE: RE: RE: RE: RE: query regarding mata |

Date |
Sun, 11 Apr 2010 20:49:54 +0200 |

Thanks lot indeed Nick!!! I am really grateful to you and statalist for the solution to the problem. Mata being relatively recent, it is difficult to find researchers using it. Kind regards Abhimanyu -----Original Message----- From: owner-statalist@hsphsun2.harvard.edu [mailto:owner-statalist@hsphsun2.harvard.edu] On Behalf Of Nick Cox Sent: zondag 11 april 2010 20:30 To: statalist@hsphsun2.harvard.edu Subject: st: RE: RE: RE: RE: RE: query regarding mata I see. You changed more of the code than I appreciated on a quick glance. But I think your problem is of the same form: you're expecting Mata to assign v[1,1] before you've told it how big -v- is. You're better off initialising -v- too, say to J(1,5,.), _before_ the loop. Nick n.j.cox@durham.ac.uk Abhimanyu Arora Nope, while lastv is to be initialized, v is to be obtained from lastv (which is then to be set to the new value of v) until lastv and v are close to each other. A small addon- it says subscripting error. "Vector required" was when I used v[i],i=1-5 on the LHS of my equations. Nick Cox Well, in this version v appears to be undefined. Perhaps you intended to initialise v=J(1,5,0). Nick n.j.cox@durham.ac.uk Abhimanyu Arora Thanks for your reply Yes, indeed. Here is the code, when I tried to use the do-while command. But, the problem with this is that it gives,"error 3201, vector required" which is surprising. Kind regards Abhimanyu mata numeric vector fpt(real scalar x,real scalar y) { lastv=J(1,5,0) do{ v[1,1]=0.5775+ln(exp(x+0.9*lastv[2])+exp(y+0.9*lastv[1])) v[1,2]=0.5775+ln(exp(2*x+0.9*lastv[3])+exp(y+0.9*lastv[1])) v[1,3]=0.5775+ln(exp(3*x+0.9*lastv[4])+exp(y+0.9*lastv[1])) v[1,4]=0.5775+ln(exp(4*x+0.9*lastv[5])+exp(y+0.9*lastv[1])) v[1,5]=0.5775+ln(exp(5*x+0.9*lastv[5])+exp(y+0.9*lastv[1])) lastv=v }while (mreldif(v,lastv)<10^(-6)) return(v) } fpt(2,3) end Nick Cox This doesn't look complete. -mreldif(,)- will surely complain if -lastv- is not defined when it is called. Is there more code upstream of this? Conversely, my guess is that -lastv- has been defined previously, but is of different dimensions: hence the conformability message. You might try some initialisation of -lastv- to 1,1,1,1,1 before entering the loop. Nick n.j.cox@durham.ac.uk Abhimanyu Arora I am trying to use mata to find the fixed point of a contraction mapping. Basically I have 5 non-linear equations in 5 variables (all explicitly expressed in terms of the others). Since I wasn't successful with 'optimize', I tried to use the following idea-start with a vector of zeros and put the elements of vector of unknowns into the RHS of the equations till convergence is achieved (updated value 'almost equal' to previous one). Following is my code and output: clear mata . mata ------------------------------------------------- mata (type end to exit) ------------------------------------------------------------------------ ---- -------------------------- : : real vector fpt(real scalar x,real scalar y) \\x and y are the parameters of the equations > { > v=0,0,0,0,0 > > while (mreldif(v,lastv)<10^(-6)) { > > > lastv=v > > v[1,1]=0.5775+ln(exp(x+0.9*v[1,2])+exp(y+0.9*v[1,1])) > v[1,2]=0.5775+ln(exp(2*x+0.9*v[1,3])+exp(y+0.9*v[1,1])) > v[1,3]=0.5775+ln(exp(3*x+0.9*v[1,4])+exp(y+0.9*v[1,1])) > v[1,4]=0.5775+ln(exp(4*x+0.9*v[1,5])+exp(y+0.9*v[1,1])) > v[1,5]=0.5775+ln(exp(5*x+0.9*v[1,5])+exp(y+0.9*v[1,1])) > > > } > return(lastv) > } note: variable lastv may be used before set : : : fpt(2,3) mreldif(): 3200 conformability error fpt(): - function returned error <istmt>: - function returned error r(3200); : : : end ------------------------------------------------------------------------ ---- ------------------------------------------------------------------------ ---- ------------------------ The error code indicates that there is some operation that is not compatible with the matrices involved. It would be nice if you could point out the mistake. * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/ * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

**References**:**st: query regarding mata***From:*"Abhimanyu Arora" <abhimanyu.arora@student.kuleuven.be>

**st: RE: query regarding mata***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

**st: RE: RE: query regarding mata***From:*"Abhimanyu Arora" <abhimanyu.arora@student.kuleuven.be>

**st: RE: RE: RE: query regarding mata***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

**st: RE: RE: RE: RE: query regarding mata***From:*"Abhimanyu Arora" <abhimanyu.arora@student.kuleuven.be>

**st: RE: RE: RE: RE: RE: query regarding mata***From:*"Nick Cox" <n.j.cox@durham.ac.uk>

- Prev by Date:
**st: RE: RE: RE: RE: RE: query regarding mata** - Next by Date:
**st: New version of -stcmd- on SSC** - Previous by thread:
**st: RE: RE: RE: RE: RE: query regarding mata** - Next by thread:
**st: Expression too long** - Index(es):