287

I'm a programmer who knows Python, Ruby and some C who is trying to decide whether to learn GNU Octave or MATLAB. I know that they have a lot in common, but it isn't clear to me how similar the syntax is or even the data structures are. The above link shows several examples where they are syntactically similar or identical. Is this true for the whole language?

I am trying to learn the language in general to do more scientific computing, possibly using some image analysis libraries.

Additionally, is MATLAB worth the cost?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
lswim
  • 3,064
  • 2
  • 15
  • 13
  • 9
    Since you're a student, it's worth checking if your school provides matlab to students for free / cheap; both my undergrad and grad schools do that, which makes it somewhat easier to decide to go with matlab. – Danica Aug 23 '12 at 03:59
  • 25
    Yes, but when he leaves university and goes to some research center, he'll have to buy it and by then will only know Matlab and not alternatives. So thinking on the long term, if you wanna make a carrer in science which seems like he wants to, you shouldn't ignore this. Not to mention that such licenses usually can't be used for clusters either. – carandraug Aug 23 '12 at 04:04
  • 3
    While you are a student you should be able to get a matlab license for around 100 bucks (USD). Granted if you want some of the other toolboxs they're an additional 29 USD per toolbox. So not knowing what toolboxes you might want/need, it's tough to justify the cost. – Ben A. Aug 23 '12 at 11:41
  • 26
    +1 I've just started learning Octave today because I'm currently studying [Machine Learning](https://www.coursera.org/course/ml) and the teacher recommended learning Octave (because it's free, because METLAB is expensive, and because the student will be much more productive getting the machine algorithm to work by first using either Octave or METLAB first, then once its working, then switch to either Java or C++) – Anthony Aug 26 '12 at 21:11
  • 7
    I'd advice you to use python+opencv – gukoff Sep 16 '13 at 13:40
  • 1
    I thought I'd mention this because I was in the same position as you and almost missed this: Matlab has a Home license option for personal use. – Stephen Jan 01 '17 at 01:15
  • 2
    A relevant wikibooks article: [Differences between Octave and MATLAB](https://en.wikibooks.org/wiki/MATLAB_Programming/Differences_between_Octave_and_MATLAB) – Sardar Usama Jun 27 '17 at 22:24
  • I would say learn Julia. But if you must you can also checkout SciLab. In my uni days when I couldn't afford Matlab I just used either GNU Octave or SciLab – xiaodai Feb 12 '18 at 04:28
  • Stack Overflow is a site for programming and development questions. This question appears to be off-topic because it is not about programming or development. See [What topics can I ask about here](http://stackoverflow.com/help/on-topic) in the Help Center. Perhaps [Super User](http://superuser.com/) or [Unix & Linux Stack Exchange](http://unix.stackexchange.com/) would be a better place to ask. – jww Jan 10 '19 at 23:21
  • 1
    @jww I don't see how this is off topic; Matlab / Octave are similar programming tools used typically in numerical programming. (I do realize the question was closed for other reasons). – StayOnTarget Mar 01 '19 at 16:01

9 Answers9

241

Rather than provide you with a complete list of differences, I'll give you my view on the matter.

If you read carefully the wiki page you provide, you'll often see sentences like "Octave supports both, while MATLAB requires the first" etc. This shows that Octave's developers try to make Octave syntax "superior" to MATLAB's.

This attitude makes Octave lose its purpose completely. The idea behind Octave is (or has become, I should say, see comments below) to have an open source alternative to run m-code. If it tries to be "better", it thus tries to be different, which is not in line with the reasons most people use it for. In my experience, running stuff developed in MATLAB doesn't ever work in one go, except for the really simple, really short stuff -- For any sizable function, I always have to translate a lot of stuff before it works in Octave, if not re-write it from scratch. How this is better, I really don't see...

Also, if you learn Octave, there's a lot of syntax allowed in Octave that's not allowed in MATLAB. Meaning -- code written in Octave often does not work in MATLAB without numerous conversions. It's also not compatible the other way around!

I could go on: The MathWorks has many toolboxes for MATLAB, there's Simulink and its related products for which there really is no equivalent in Octave (yes, you'd have to pay for all that. But often your employer/school does that anyway, and well, it at least exists), proven compliance with several industry standards, testing tools, validation tools, requirement management systems, report generation, a much larger community & user base, etc., etc., etc. MATLAB is only a small part of something much larger. Octave is...just Octave.

So, my advice:

  • Find out if your school will pay for MATLAB. Often they will.
  • If they don't, and if you can scrape together the money, buy MATLAB and learn to use it properly. In the long run it's the better decision.
  • If you really can't get the money -- use Octave, but learn MATLAB's syntax and stay away from Octave-only syntax. (see note)

Why this last point? Because in the sciences, there are often large code bases entirely written in MATLAB. There are professors, engineers, students, professional coders, lots and lots of people who know all the intricate gory details of MATLAB, and not so much of Octave.

If you get a new job, and everyone in your new office speaks Spanish, it's kind of cocky to demand of everyone that they start speaking English from then on, simply because you don't speak/like Spanish. Same with MATLAB and Octave.

Note: Octave can be run in "traditional mode" (by including the --traditional flag when starting Octave) which makes it give an error when certain Octave-only syntax is used.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Rody Oldenhuis
  • 37,726
  • 7
  • 50
  • 96
  • 27
    About the lack of JIT it has already been implemented on the development version of Octave. I don't know when that's gonna be released but I have built it and the difference is huge for loopy code. And to stay away from Octave only syntax, there's the --traditional option of Octave. I'm not saying that Matlab code always run in Octave but this is getting much much better with each release and compatibility is one of their priorities (not to mention that even different Matlab versions have enough incompatibilities between them). – carandraug Aug 23 '12 at 04:37
  • Thanks! You bring up some excellent points that I didn't really think of. I might start fiddling around with Octave but eventually move to Matlab once I get a license. – lswim Aug 23 '12 at 04:56
  • 1
    @carandraug My opinion indeed holds for the *current* version of Octave. I sure do hope that in the nearby future they finally get their act together, because the idea is one that is truly awesome (Open Source, who doesn't want it?). Can Octave do nested functions yet? The tilde-ignore-output syntax? proper handling of classes in @-directories, packages in +-directories, etc.? And why is it they keep sticking to the "superior syntax"?! all this accomplishes is breakage of compatibility the other way around, I just don't get it... – Rody Oldenhuis Aug 23 '12 at 05:02
  • @RodyOldenhuis what are you considering the current version of Octave? The current version is 3.6.2. tilde-ignore-output – carandraug Aug 23 '12 at 13:02
  • @carandraug Ah, good! I sorta got in the habit of replacing all of the tildes with trash variables...I should check more often if syntax support has changed. – Rody Oldenhuis Aug 23 '12 at 13:21
  • 4
    @RodyOldenhuis sorry, new to stackoverflow and made the comment before it was ready. Then reached the size limit. To make it shorter * tilde-ignore-output has been out since the start of 3.4 series so you must be using a 3.2.X release or something even older. * @-directory classes are implemented since 3.2 and they work for me. But many improvements were made to them since then (classdef is also being developed but I haven't tried it yet). Nested functions are implemented in the development. +-packages are not but no one seems to be complaining. Octave has packages with pkg since 2005. – carandraug Aug 23 '12 at 13:37
  • 15
    And what you call is sticking to a superior syntax... if you had the freedom to change Matlab, add extra syntax or different functions, wouldn't you? These are features that users implemented and they don't break compatibility. More often that not, new things are rejected on grounds of that. The idea is that Matlab language is a subset of Octave language. If you think the idea is awesome, then you should join because it is a community project, and has the features that community bothers to develop. – carandraug Aug 23 '12 at 13:40
  • 3
    @carandraug If I had that freedom, I'd write Python. – Rody Oldenhuis Aug 23 '12 at 13:42
  • 1
    @carandraug (5 min. limit passed) If I had that freedom, I'd write Python :) Thing is, Octave is supposed to be a Matlab clone. It's *not* a clone; it's something mutated. And convincing a whole community of that fact is far beyond the time I normally have available. – Rody Oldenhuis Aug 23 '12 at 13:47
  • 20
    @RodyOldenhuis it is not supposed to be a clone. Octave development didn't start that way, it just got more and more pushed into that direction by the users who keep submitting patches for it http://www.sciencedirect.com/science/article/pii/S0959152412000911 – carandraug Aug 23 '12 at 14:00
  • 1
    @carandraug I don't care about how it started out, I care about what most of its users use it for; Linux didn't start out as an OS for smartphones either. Look, I like a good discussion, but this is not the place for it. And how useful will that discussion be *really*? – Rody Oldenhuis Aug 23 '12 at 14:20
  • 1
    @RodyOldenhuis yes, you are right. The limit on characters should have been a hint for that :p – carandraug Aug 23 '12 at 15:00
  • 9
    Has the maker of any programming tool EVER been succesfully held responsible for a bug? – Martin Beckett Jan 24 '13 at 19:15
  • @MartinBeckett: Yes. I can name a few niche products, the makers of which have lost lawsuits over (Probably none that you would have heard of, though...) – Rody Oldenhuis Jan 14 '14 at 16:21
  • 2
    @RodyOldenhuis I am not going to edit your answer about the legal paragraph since apparently there's already been a small edit war. I will leave it up to you if you agree. Have you read Matlab's EULA? Sections 16 and 18 (limitation of liability and disclaimer of warranties) are pretty much the same as GPL discarding responsibilities which is the basis for your conclusion. Any legal interpretation one could have of Matlab's EULA to make Mathworks responsible should also apply to GPL. – carandraug Apr 01 '14 at 22:52
  • @carandraug: This answer keeps putting a smile on my face :) You are correct, and I stand corrected. Thing is, there's been 9 edits to this post. If I do one more edit, this answer becomes a *community wiki* and I lose all rep changes and notifications related to it... – Rody Oldenhuis Apr 02 '14 at 07:19
  • 6
    @carandraug: ah to hell with it. Correctness is more important than all that :) – Rody Oldenhuis Apr 02 '14 at 07:24
  • 1
    You see octave as a way of "not paying for matlab" you got it all wrong. When people with strong convictions about ethical software develop, they cannot make a blind eye to design faults, thi sis why Octave extedns matlab besides trying to keep compatibility. Also, instead of reviling a volunteer initiative that offers a huge functionality (maybe you want to check the vast amount of scientific articles written using GNU Octave https://wiki.octave.org/Publications_using_Octave), you should report troubles you found (you are not specific about the "impossibility" of using your code in Octave) – JuanPi Aug 07 '17 at 09:12
  • I have ported several matlab packages (many, of considerable size) and never found insurmountable problems as the ones you mention. Also the [GPML package](http://www.gaussianprocess.org/gpml/code/matlab/doc/), of considerable size (is this sizable for you?) is ported to Octave with no changes, except for the compilation directives. – JuanPi Aug 07 '17 at 09:21
  • @JuanPi: First, this answer stems from 2012. Things were different then, and most of my experiences were based on versions from 2007-2011. Now: "got it all wrong": I believe it's actually the most important consideration for most (potential) users. "Design faults": that's highly subjective and debatable. Moreover, it has nothing to do with ethical software development. Ubiquitous usage: not really an argument in favor of Octave; the same holds for MATLAB. – Rody Oldenhuis Aug 07 '17 at 09:42
  • @JuanPi: I've developed MATLAB code for over 10 years now. Creating a complicated function or toolbox that works on all MATLAB versions is already quite challenging; keeping compatibility also with Octave just adds to the complexity. It's not insurmountable, but it certainly isn't negligible either. – Rody Oldenhuis Aug 07 '17 at 09:45
  • @JuanPi: I've since switched to the Python ecosystem, which I believe has more potential than MATLAB or Octave ever had. – Rody Oldenhuis Aug 07 '17 at 09:46
  • 1
    "In the long run it's the better decision." is in your answer. Now you answer to @JuanPi with "First, this answer stems from 2012. Things were different then, and most of my experiences were based on versions from 2007-2011". I wish people who do not believe in open source software were not so short-sighted, especially when they address to _students_, who have their whole life to contribute to powerful open source softwares (may I add: finally releasing humanity from 20th century's view about ownership of collective production?) – Hugo Raguet Aug 07 '17 at 14:04
  • @HugoRaguet: ...whoever said I do not believe in open source software? I just don't believe in Octave and think MATLAB wins out. Frankly, it sounds like I'm not the short-sighted one here... – Rody Oldenhuis Aug 07 '17 at 14:56
  • @HugoRaguet: "who [...] contribute to powerful open source software": Correct. They also have their whole life to contribute to Microsoft, Apple, Amazon, Facebook, Google, Cisco, Oracle, IBM, et cetera. All not exactly open source, yet all very 21ˢᵗ century. It's not either/or, but mind you, only a very fortunate few get paid to develop for open source projects, yet almost everybody will eventually have families to support, mortgages to pay, ....and I think that is what students need to be prepared for: their *likely* future, not an *unlikely* perpetuation/development of their status quo. – Rody Oldenhuis Aug 07 '17 at 15:15
  • @RodyOldenhuis: this is getting too ideological and I acknowledge I am the one to blame for it (so I will spare you my views on the very first four companies you are mentioning). Important thing is: in the long run octave _will be_ better than MATLAB, but the more advices like yours are given to students, the longer it will take. This is nicely put by [SiggyF](https://stackoverflow.com/a/3535177/1267815) in another Octave vs. MATLAB situation where, just like here, the OP has more to gain trying octave than to lose. – Hugo Raguet Aug 08 '17 at 08:28
  • @HugoRaguet We can discuss this forever. Point is, I fundamentally don't agree with Octave's philosophies and don't believe it has much future because of it. I'm not "against" Octave, I just think Octave will never be "better", as claimed by so many, unless it gives up on trying to be an open source alternative for MATLAB and just gets its own identity, like SciLab or Freemat. I'm just stating that if you want to learn M code, learn MATLAB because the Mathworks owns and develops that language. Not the Octave community. And they also provide a tonne of additional stuff that Octave never will. – Rody Oldenhuis Aug 08 '17 at 09:10
  • @RodyOldenhuis the fact that you change tools doesn't change the problems your nswer brings. You do not provide specifics to allow reads to know if your problems are with older version on octave. Octave is developing pyoctave that will allow seamless use of python interpreter fomr octave or viceversa. It is not a matter of who has the biggest d***, it's a matter of freeing code (and providing a better alternative in the way). Also, numpy code is farther away from the actual math than Octave/maltab code. This is one reason I, despite using python all the time, prefer Octave for prototyping. – JuanPi Aug 09 '17 at 10:02
  • Also you statements have no basis. How do you know "Octae never will X" what ever. That's just your hope, nothing else. You can't be objective on that. Also mathworks doesn't on m-file format, indeed, nobody can own that. If users massively switch to the libre option, the community will lead the de facto standard. It seems you just do not understand libre software. – JuanPi Aug 09 '17 at 10:06
  • @JuanPi: That is why the question has been closed - one just can't be objective on this. In the end, it's a matter of taste, preference, ideologies you wish to adhere to. Given the number of up/down votes and comments my answer has attracted (much to my own surprise) is a strong indication to me that there are plenty of people on both sides -- slightly more on the MATLAB side, in fact. You know, there is a reason MATLAB has thrived since 1984. – Rody Oldenhuis Aug 09 '17 at 13:54
  • @JuanPi also: Please don't think in absolutes, it quickly leads to overgeneralization. I understand libre perfectly fine, thanks (talk about "have no basis", jeez). Richard Stallman: "The two political camps [...] are the free software movement and open source. The free software movement is a campaign for computer users' freedom; we say that a nonfree program is an injustice to its users. The open source camp declines to see the issue as a matter of justice to the users, and bases its arguments on practical benefits only." Basically, you seem to adhere more to the former, me to the latter. – Rody Oldenhuis Aug 09 '17 at 13:58
  • @JuanPi: I'm a researcher too (or at least, was and want to be again), so I completely understand the need to be completely open and transparent about *everything* as well as have the means to do so (meaning, as a researcher, free tools always have preference). On the other hand, I also understand that a magic trick is only sellable as long as it's a secret to the audience. And I can not always enjoy or agree with the guy who managed to imitate the trick, teach it to others. The Mathworks just is the better magician in my view, as well as appeal to a broader audience than Octave. – Rody Oldenhuis Aug 09 '17 at 14:31
  • @JuanPi by the way, do you have any experience with Julia? I've been wanting to get some credible views on that – Rody Oldenhuis Aug 09 '17 at 14:45
  • @JuanPi "mathworks doesn't own m-file format"..from the Wikipedia page on MATLAB: "[MATLAB is] a proprietary programming language developed by MathWorks, ..." so your assertion is false. "If users massively switch to the libre option, the community will lead the de facto standard" ...that's exactly the point I was trying to make: they would then lead *their own* standard, a *new* standard independent from and not owned by The MathWorks, which could be "better" in so many ways. They're holding themselves back with this silly compatibility philosophy, which is part of why I recommend MATLAB. – Rody Oldenhuis Aug 09 '17 at 15:06
  • @RodyOldenhuis MATLAB is owned by MathWorks, not the nm-file syntax. Otherwise Octave wouldn't be legal. On the other topic: experinece show (scilab and others you mention) that it is exactly the opposite. By freeing matlab users we ensure survival – JuanPi Aug 10 '17 at 14:57
  • On Julia: it is a great language, still very much in development stage, but is very promising. Nice to program also. Highly recommended. – JuanPi Aug 10 '17 at 14:59
  • Just to correct your metaphor: spanish is more complex than english. So it should be the other way arround – Daniel San Aug 24 '18 at 12:57
89

A more complete link to the list of differences is on the Octave's FAQ. In theory, all code that runs in Matlab should run in Octave and Octave developers treat incompatibility with Matlab as bugs. So the answer to your first question is yes in theory. Of course, all software has bugs, neither Octave or Matlab (yes, Matlab too) are safe from them. You can report them and someone will try to fix them

Octave also has extra features, most of them are extra syntax which in my opinion make the code more readable and more sense, specially if you are used to other programming languages.

But there's more to Octave than just the monetary cost. Octave is free also in the sense of freedom, it's libre, but I don't think this is the place to rant about software freedom.

I do image processing in Octave only and find that the image package suits my needs. I don't know, however, what will be yours. So my answer to if it's worth the cost is no, but certainly others will disagree.

Nicolas
  • 6,611
  • 3
  • 29
  • 73
carandraug
  • 12,938
  • 1
  • 26
  • 38
27

MATLAB is, first and foremost, a commercial offering. Therefore, everything in MATLAB pretty much works out of the box. All the core functionality is solid, and if you're working on a special project then MATLAB probably has an add-on they can sell you that adds a lot of additional domain-specific .m files for you. It isn't cheap, but it works and it will get the job done without complaint.

Octave always shows its open-source, information-wants-to-be-free roots. It's free, and it will remind you that it's free at every opportunity. It's developed by volunteers who hate Windows with a passion. Therefore Octave runs on Windows grudgingly. It's quite surprising that as many MATLAB features exist as they do.

But here's the rub. Anytime you try to do something more than trivially complex, Octave suddenly breaks in subtle and hard-to-understand ways. Oops -- the terminal driver had an overflow somewhere deep in the OpenGL layer. You can't print. Oops -- the figure plots do strange things with their fonts. Good luck figuring out why. Oops -- there's some hidden dependency between Octave and some other obscure bit of free software, so it won't compile. Good luck figuring out which it is.

And the Octave response is hey! It's free software! You have all the source code, and you can fix all those bugs yourself! Maybe if I had infinite time and resources on my hands, I could spend all my time fixing bugs in free software, but I personally don't. If I worked in academia, I might.

So at the core, the issue of whether to choose MATLAB or Octave comes down to one question. Interestingly, that question is always the same, when choosing between commercial vs. free software variants.

And the question is:

Do you have more money than time?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
johnwbyrd
  • 3,432
  • 2
  • 29
  • 25
  • 2
    Another question is: what do companies where you might end up working use? Probably Matlab for the same reasons. – user276648 Jul 19 '17 at 00:55
14

Octave is basically an open source version of MATLAB. It was written to be just that. MATLAB has a very nice GUI which makes it a bit easier to use, but the next stable release of Octave will also have a GUI, which I have tested in the unstable release, and looks fantastic. Octave is much more buggy because it was developed and maintained by a group of volunteers, where the development of MATLAB is funded by millions of dollars by industry. I'm still a student and am using a student version of MATLAB, but I am thinking of going over to Octave once the stable version with the GUI is released.

MATLAB is probably a lot more powerful than Octave, and the algorithms run faster, but for most applications, Octave is more than adequate and is, in my opinion' an amazing tool that is completely free, where Octave is completely free.

I would say use MATLAB while you can use the academic version, but the switch to Octave should be seamless as they use the exact same syntax.

Lastly, there is the issue of Simulink. If you want to do simulation or control system design (there are probably a million other uses), Simulink is fantastic and comes with MATLAB. I don't think any other comes close to this. Although Scilab is apparently a 'good' open source alternative, I haven't tried it.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Jonny
  • 1,270
  • 5
  • 19
  • 31
  • 2
    "...because it was developed and maintained by a group of volunteers, where the development of MATLAB is funded by millions of dollars by industry." Amount of money in a project is not the causality for quality and bug free. Their is perhaps not even a correlation. – gagarine Dec 20 '18 at 18:06
  • 1
    "they use the exact same syntax" No, they don't. – Cris Luengo Apr 12 '19 at 19:21
8

I just started using Octave. And I have seen people use MATLAB. And one major difference as mentioned above is that Octave has a command line interface and MATLAB has a GUI. According to me having a GUI is very good for debugging.

In Octave you have to execute commands to see what is the length of a matrix is, etc., but in MATLAB it nicely shows everything using a good interface. But Octave is free and good for the basic tasks that I do. If you are sure that you are going to do just basic stuff or you are unsure what you need right now, then go for Octave. You can pay for the MATLAB when you really feel the need.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
sachinr
  • 2,794
  • 1
  • 15
  • 12
7

The thing that makes MATLAB so popular and special is its excellent toolboxes in different disciplines. Since your main goal is to learn MATLAB, so there is not different at all if you work with Octave or MATLAB!

Just going and buying MATLAB without any cool toolbox (which basically depends on your major) is not really a reasonable expense!

You can definitely have a good start with Octave, and follow tons of tutorials on MATLAB on the Internet.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Areza
  • 5,623
  • 7
  • 48
  • 79
4

There is not much which I would like to add to Rody Oldenhuis' answer. I usually follow the strategy that all functions which I write should run in Matlab.

Some specific functions I test on both systems, for the following use cases:

a) Octave does not need a license server - e.g. if your institution does not support local licenses. I used it once in a situation where the system I used a script on had no connection to the internet and was going to run for a very long time (in a corner in the lab) and used by many different users. Remark: that is not about the license cost, but about the technical issues related.

b) Octave supports other platforms, for example, the Raspberry Pi (http://wiki.octave.org/Rasperry_Pi) - which may come in handy.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Alexander Kemp
  • 202
  • 1
  • 10
3

Nested functions and closures are now supported by many languages, including MATLAB. JavaScript promotes closures as a first class design principle.

Sadly, Octave does not support closures (nested functions with lexical scoping).

According Bug: handles to nested functions are not yet supported one might even get the impression that the developers do not want or are unable to get it right. This 2013 bug was fixed in 2020, btw.

This will break a lot of code, both ways. No workaround.

Wolfgang Kuehn
  • 12,206
  • 2
  • 33
  • 46
  • I am not sure this is accurate anymore. [Nested functions](https://octave.org/doc/interpreter/Nested-Functions.html) are implemented in Octave, and I've found them to be more versatile than Matlab's: for example, being able to declare functions (other than lambdas) inside a script, which wasn't possible with Matlab last time I tried it. – MayeulC May 03 '18 at 10:02
  • @MayeulC The _being more versatile_ part actually cuts both ways. – Wolfgang Kuehn May 04 '18 at 14:41
  • 1
    The link is broken. – Peter Mortensen Mar 28 '21 at 18:12
-1

Octave and MATLAB have many similarities. But Octave is a command line interface. You have to type each command in the command prompt, while MATLAB comes with best GUI. I recommend first you use MATLAB student version; after learning basic lessons use GNU Octave permanently.

Now GNU Octave comes with a GUI, but it is a development version now. There are some GUI front end for GNU Octave, like guioctave, xoctave (not free), DomainMath IDE, etc.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
vinu k n
  • 861
  • 1
  • 6
  • 14