Skip to main content

How to make a Dynamic Calculator to solve a quadratic equation?


Taking my first steps in the world of Mathematica Programming.


The aim of my program was to modify Wolfram's dynamic calculator
(which performs an addition subtraction and a product - in response to the user inputting two values used to perform these operations)
to now take three input and display on the three outputs:



[1] the quadratic equation to be solved
[2] the roots of this quadratic equation
[3] the discriminant of this equation


The three things (in red text) which you have to input are:


first input box is coefficient a
second input box is coefficient b
third input box is coefficient c


These coefficients represent a,b and c in the quadratic equation $ax^2 + bx +c$


So the Wolfram Demonstration & My attempt (the code below) look like this: http://www.controlmanchester.com/2013/08/01/quadratic-equation-images/


The code for the original program is available here: http://reference.wolfram.com/mathematica/example/ConstructADynamicCalculator.html



This is the code that I have written (modified really):


 DynamicModule[ 
{a = 0, b = 0, c = 0},
Deploy[
Style[
Panel[
Grid[
Transpose[
{
{

Style["input a ", Red],
Style["input b", Red],
Style["input c", Red],
"here is the equation",
"here is the value of the discriminant",
"here are the roots"},

{InputField[Dynamic[a], Number],
InputField[Dynamic[b], Number],
InputField[Dynamic[c], Number],

InputField[Dynamic[a*x^2 + b*x + c],Enabled -> False],
InputField[Dynamic[b]^2 - (4*Dynamic[a]*Dynamic[c]) , Enabled -> False],
InputField[Dynamic[a b], Enabled -> False]}
}
]
, Alignment -> Right]
, ImageMargins -> 10]
,
DefaultOptions -> {InputField -> {ContinuousAction -> True,
FieldSize -> {{5, 30}, {1, Infinity}}}}]

]
]

I have discovered, via trial and error, that within an input field I cannot simply try something like
Solve[x^2 + a x + 1 == 0, x] or Roots[ ].


I think this is where the heart of my problem lies.


At the moment the variables I put in do propagate down and show the coefficients of the quadratic, but I cannot get any further with it.


Any help, or guidance to things I should read are most welcome.


Many Thanks, David


p.s. I have seen from the answer by Mike Honeychurch that I have not described the problem as clearly as possible. I have edited the post :) I hope this makes my problem easier to understand




Answer



My first thought was this:


Manipulate[
Grid[
{
{TraditionalForm[u]},
{"Equation", Row[{u, " = 0"}]},
{"Solutions", Solve[u == 0, x]},
{"Roots", Roots[u == 0, x]},
{"Discriminant", Discriminant[u, x]}

}, Alignment -> Left],
{{u, x^2 + 2 x + 1}},
BaseStyle -> FontSize -> 16]

equationsolver


Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Adding a thick curve to a regionplot

Suppose we have the following simple RegionPlot: f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}] Now I'm trying to change the curve defined by $y=g[x]$ into a thick black curve, while leaving all other boundaries in the plot unchanged. I've tried adding the region $y=g[x]$ and playing with the plotstyle, which didn't work, and I've tried BoundaryStyle, which changed all the boundaries in the plot. Now I'm kinda out of ideas... Any help would be appreciated! Answer With f[x_] := 1 - x^2 g[x_] := 1 - 0.5 x^2 You can use Epilog to add the thick line: RegionPlot[{y < f[x], f[x] < y < g[x], y > g[x]}, {x, 0, 2}, {y, 0, 2}, PlotPoints -> 50, Epilog -> (Plot[g[x], {x, 0, 2}, PlotStyle -> {Black, Thick}][[1]]), PlotStyle -> {Directive[Yellow, Opacity[0.4]], Directive[Pink, Opacity[0.4]],