{"id":87,"date":"2010-02-21T16:45:00","date_gmt":"2010-02-21T16:45:00","guid":{"rendered":"https:\/\/sandrock.co.za\/carl\/2010\/02\/21\/equation-solving-interface\/"},"modified":"2010-02-21T16:45:00","modified_gmt":"2010-02-21T16:45:00","slug":"equation-solving-interface","status":"publish","type":"post","link":"https:\/\/sandrock.co.za\/carl\/2010\/02\/equation-solving-interface\/","title":{"rendered":"Equation solving interface"},"content":{"rendered":"<p>In  moment of clarity I realised today that many of the things that I want to create as GUI applications can be generalised to a single application: An equation solving interface.  I have played around with various equation solving environments like <a href=\"http:\/\/www.mhhe.com\/engcs\/mech\/ees\/\">EES<\/a> and <a href=\"http:\/\/www.polymath-software.com\/\">PolyMath<\/a>, also math environments like Mathcad but none of them work like the thing I am starting to see in my head.<\/p>\n<div><\/div>\n<div>The idea is like this: You set up a set of variables and constraints, which may be equalities or inequalities.  You give the variables names and dimensions (length, time, etc).  So far so normal.  Traditionally you would now start to specify your problem, perhaps with the tool checking when there were enough specifications to solve the problem.  In my vision, you get an interface consisting of entry boxes for each of the variables.  You can enter values in any box, and as more information becomes available, the other boxes are filled.  Some colour coding helps you to see which values you filled in recently and which ones have just been calculated.  Hovering over a variable highlights the values that are linked to it, perhaps with an overall and direct distinction, perhaps with a drillable menu.  <\/div>\n<div><\/div>\n<div>So the first mode of operation allows you to start typing the information you have and the unknowns are calculated as they can be.  Now you can play with the values, and select which calculated values should stay the same and which should be recalculated (perhaps using that drill-down menu).  You can select some variables to be &#8220;Fixed&#8221;. You can elect to change some of the text boxes to sliders, which allows you to &#8220;play&#8221; with the solution.  You can change some of the boxes to ranges, which will use <a href=\"http:\/\/en.wikipedia.org\/wiki\/Interval_arithmetic\">interval arithmetic<\/a> to calculate ranges on the other variables.  You can change some of the variables to Min or Max, if you select more than one you get multiobjective optimisation.  From the same interface, you can see visualisations of the current position in the design space and the constraints that you have placed via the equation setup and via the ranges you have imposed on the other variables.  When you find a nice combo, you save it and it gets added to a list of tagged points in the plot views.<\/div>\n<div><\/div>\n<div>Other nice things you can do: automatic <a href=\"http:\/\/en.wikipedia.org\/wiki\/Nondimensionalization\">nondimensionalisation<\/a>, perhaps with plotting of variables and implied boundraries (that&#8217;s why you specify dimensions on the variables instead of units).<\/div>\n<div><\/div>\n<div>This generalises problems like doing brewing calculations, designing equipment and many of the things people use spreadsheets for.<\/div>\n<div><\/div>\n<div>A final note about why spreadsheets and programming languages aren&#8217;t right for this job.  It all has to do with the directionality of equations.  Equations go both ways.  In fact, a set of equations is like a graph connecting all the variables in it.  On spreadsheets and in most programming languages, equations are one-way &#8212; a cell can contain a value or a formula, not both.  In some constraint programming languages, it&#8217;s easier to be declarative, but most of them enforce complete specification and don&#8217;t even try to calculate values if the whole problem hasn&#8217;t been correctly specified.  They also don&#8217;t provide direct interaction that allows one to play with the solution.  <\/div>\n<div><\/div>\n<div>Perhaps I&#8217;m missing something, but I haven&#8217;t found anything like I&#8217;ve just described.  I really want something like this, so perhaps this should the project that I finally break my GUI programming block on.  If you have any information or comments, please pipe up!<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In moment of clarity I realised today that many of the things that I want to create as GUI applications can be generalised to a single application: An equation solving interface. I have played around with various equation solving environments like EES and PolyMath, also math environments like Mathcad but none of them work like [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-87","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts\/87","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/comments?post=87"}],"version-history":[{"count":0,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/posts\/87\/revisions"}],"wp:attachment":[{"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/media?parent=87"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/categories?post=87"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sandrock.co.za\/carl\/wp-json\/wp\/v2\/tags?post=87"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}