Re: Differentiation and Polynomial questions
- To: mathgroup at smc.vnet.net
- Subject: [mg20718] Re: Differentiation and Polynomial questions
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Wed, 10 Nov 1999 00:17:37 -0500
- References: <805vjq$ddu@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Danny: Answers to you first two questions are in the following notebook. To see it properly formatted, -- copy from "Notebook" down to the final "]" (just short of the line of stars) -- open up a Mathematica Notebook -- past into the notebook ( a new notebook will be generated from the copied code) Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 Notebook[{ Cell[CellGroupData[{ Cell["Step by Step Differentiation", "Subtitle"], Cell[TextData[{ "As you note, ", Cell[BoxData[ RowBox[{"RunD", "[", RowBox[{ FractionBox[ RowBox[{"f", "[", "x", "]"}], RowBox[{"g", "[", "x", "]"}]], ",", "x"}], "]"}]]], ", gives the same as the built-in function:" }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"D", "[", RowBox[{ RowBox[{ RowBox[{"f", "[", "x", "]"}], "/", RowBox[{"g", "[", "x", "]"}]}], ",", "x"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{ FractionBox[ RowBox[{ SuperscriptBox["f", "\[Prime]", MultilineFunction->None], "[", "x", "]"}], RowBox[{"g", "[", "x", "]"}]], "-", FractionBox[ RowBox[{ RowBox[{"f", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["g", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}], SuperscriptBox[ RowBox[{"g", "[", "x", "]"}], "2"]]}]], "Output"] }, Open ]], Cell["You want", "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"%", "file://", "Together", " ", StyleBox[ RowBox[{"(*", RowBox[{ "quicker", " ", "for", " ", "this", " ", "than", " ", "Simplify"}], "*)"}], FontWeight->"Plain"]}]], "Input"], Cell[BoxData[ FractionBox[ RowBox[{ RowBox[{ RowBox[{"g", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["f", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}], "-", RowBox[{ RowBox[{"f", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["g", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}]}], SuperscriptBox[ RowBox[{"g", "[", "x", "]"}], "2"]]], "Output"] }, Open ]], Cell["\<\ We can change the code of (a copy of) Step by Step Differentiation to give \ what you want as follow;\ \>", "Text"], Cell["(1) Change", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"RuleNames", "=", RowBox[{"{", "\n", "\t\t", RowBox[{ "\"\<SpecificRules\>\"", ",", "\n", "\t\t", "\"\<ConstantRule\>\"", ",", "\n", "\t\t", "\"\<LinearityRule\>\"", ",", "\n", "\t\t", "\"\<PowerRule\>\"", ",", "\n", "\t\t", "\"\<ProductRule\>\"", ",", "\n", "\t\t", "\"\<QuotientRule\>\"", ",", "\n", "\t\t", "\"\<InverseFunctionRule\>\"", ",", "\n", "\t\t", "\"\<ChainRule\>\""}], "\n", "\t\t\t", "}"}]}], ";"}]], "Input"], Cell["\<\ so that \"QuotientRule\" comes before, and so is used before, \ \"ProductRule\", thus:\ \>", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"RuleNames", "=", RowBox[{"{", "\n", "\t\t", RowBox[{ "\"\<SpecificRules\>\"", ",", "\n", "\t\t", "\"\<ConstantRule\>\"", ",", "\n", "\t\t", "\"\<LinearityRule\>\"", ",", "\n", "\t\t", "\"\<PowerRule\>\"", ",", "\[IndentingNewLine]", "\t ", "\"\<QuotientRule\>\"", ",", "\n", "\t\t", "\"\<ProductRule\>\"", ",", "\n", "\t\t", "\"\<InverseFunctionRule\>\"", ",", "\n", "\t\t", "\"\<ChainRule\>\""}], "\n", "\t\t\t", "}"}]}], ";"}]], "Input"], Cell["(2) at the end of", "Text"], Cell[BoxData[ RowBox[{ RowBox[{"WalkD", "[", RowBox[{"f_", ",", "x_"}], "]"}], ":=", RowBox[{"Module", "[", RowBox[{ RowBox[{"{", "derivative", "}"}], ",", RowBox[{ RowBox[{"derivative", "=", RowBox[{"d", "[", RowBox[{"f", ",", "x"}], "]"}]}], ";", "\n", "\t\t", RowBox[{"displayStart", "[", "derivative", "]"}], ";", "\n", "\t\t", RowBox[{"While", "[", "\[InvisibleSpace]", RowBox[{ RowBox[{"!", RowBox[{"(", RowBox[{"FreeQ", "[", RowBox[{"derivative", ",", "d"}], "]"}], ")"}]}], ",", "\n", "\t\t\t", RowBox[{ RowBox[{"oldderivative", "=", "derivative"}], ";", RowBox[{"k", "=", "0"}], ";", "\n", "\t\t\t", RowBox[{"While", "[", RowBox[{ RowBox[{"oldderivative", "==", "derivative"}], ",", "\n", "\t\t\t\t", RowBox[{ RowBox[{"k", "++"}], ";", "\n", "\t\t\t\t", RowBox[{"derivative", "=", RowBox[{"derivative", "/.", RowBox[{ "ListRules", "\[LeftDoubleBracket]", "k", "\[RightDoubleBracket]"}]}]}]}]}], "]"}], ";", RowBox[{"displayRuleUsed", "[", RowBox[{ "RuleNames", "\[LeftDoubleBracket]", "k", "\[RightDoubleBracket]"}], "]"}], ";", "\n", "\t\t\t", RowBox[{"displayDerivative", "[", "derivative", "]"}]}]}], "]"}], ";", "\n", "\t\t", RowBox[{ SubscriptBox["\[PartialD]", "x"], "f"}]}]}], "]"}]}]], "Input"], Cell[TextData[{ "Change ", Cell[BoxData[ RowBox[{ SubscriptBox["\[PartialD]", "x"], "f"}]]], " to ", StyleBox["derivative", "Input", FontWeight->"Plain"], "\nThis is needed because the output from the given WalkD is not the \ result of the earlier steps but is the freshly computed output from D[f,x]" }], "Text"], Cell[" 3) Change RunD similarly", "Text"], Cell["\<\ Now load the new code. We get\ \>", "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"WalkD", "[", RowBox[{ RowBox[{ RowBox[{"f", "[", "x", "]"}], "/", RowBox[{"g", "[", "x", "]"}]}], ",", "x"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"d", "[", RowBox[{ FractionBox[ RowBox[{"f", "[", "x", "]"}], RowBox[{"g", "[", "x", "]"}]], ",", "x"}], "]"}]], "Output", CellFrame->{{0, 0}, {0, 3}}, CellMargins->{{Inherited, Inherited}, {0, Inherited}}, CellEditDuplicate->False, CellGroupingRules->"OutputGrouping", FontWeight->"Bold", Background->RGBColor[0.8, 1, 0.8]], Cell[BoxData["QuotientRule"], "Output", CellFrame->False, CellMargins->{{Inherited, Inherited}, {0, 0}}, CellEditDuplicate->False, CellFrameMargins->{{100, Inherited}, {0, 0}}, FontWeight->"Bold", FontSlant->"Italic", FontColor->RGBColor[0.6, 0, 0.6], Background->RGBColor[0.8, 1, 0.8]], Cell[BoxData[ RowBox[{ InterpretationBox["=", Sequence[ ]], " ", FractionBox[ RowBox[{ RowBox[{ RowBox[{"-", RowBox[{"d", "[", RowBox[{ RowBox[{"g", "[", "x", "]"}], ",", "x"}], "]"}]}], " ", RowBox[{"f", "[", "x", "]"}]}], "+", RowBox[{ RowBox[{"d", "[", RowBox[{ RowBox[{"f", "[", "x", "]"}], ",", "x"}], "]"}], " ", RowBox[{"g", "[", "x", "]"}]}]}], SuperscriptBox[ RowBox[{"g", "[", "x", "]"}], "2"]]}]], "Output", CellFrame->False, CellMargins->{{Inherited, Inherited}, {0, 0}}, CellEditDuplicate->False, Evaluatable->False, FontWeight->"Bold", Background->RGBColor[0.8, 1, 0.8]], Cell[BoxData["SpecificRules"], "Output", CellFrame->False, CellMargins->{{Inherited, Inherited}, {0, 0}}, CellEditDuplicate->False, CellFrameMargins->{{100, Inherited}, {0, 0}}, FontWeight->"Bold", FontSlant->"Italic", FontColor->RGBColor[0.6, 0, 0.6], Background->RGBColor[0.8, 1, 0.8]], Cell[BoxData[ RowBox[{ InterpretationBox["=", Sequence[ ]], " ", FractionBox[ RowBox[{ RowBox[{ RowBox[{"g", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["f", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}], "-", RowBox[{ RowBox[{"f", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["g", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}]}], SuperscriptBox[ RowBox[{"g", "[", "x", "]"}], "2"]]}]], "Output", CellFrame->False, CellMargins->{{Inherited, Inherited}, {0, 0}}, CellEditDuplicate->False, Evaluatable->False, FontWeight->"Bold", Background->RGBColor[0.8, 1, 0.8]], Cell[BoxData[ FractionBox[ RowBox[{ RowBox[{ RowBox[{"g", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["f", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}], "-", RowBox[{ RowBox[{"f", "[", "x", "]"}], " ", RowBox[{ SuperscriptBox["g", "\[Prime]", MultilineFunction->None], "[", "x", "]"}]}]}], SuperscriptBox[ RowBox[{"g", "[", "x", "]"}], "2"]]], "Output"] }, Open ]], Cell[TextData[{ "WARNING: there may have been a reason for the original ordering of ", StyleBox["RuleNames", "Input", FontWeight->"Plain"], ", so look out." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell["Ordering of polynomials", "Subtitle"], Cell["We have the reordering", "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"a", " ", RowBox[{"x", "^", "2"}]}], " ", "+", " ", RowBox[{"b", " ", "x"}], " ", "+", " ", "c"}]], "Input"], Cell[BoxData[ RowBox[{"c", "+", RowBox[{"b", " ", "x"}], "+", RowBox[{"a", " ", SuperscriptBox["x", "2"]}]}]], "Output"] }, Open ]], Cell[TextData[{ "If you select the output cell and then the menu item ", StyleBox["Cell > Convert To > TraditionalForm", "Input", FontWeight->"Plain"], StyleBox[" then you will get", "Input", FontFamily->"Times", FontWeight->"Plain"] }], "Text"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"c", " ", SuperscriptBox["x", "2"]}], "+", RowBox[{"b", " ", "x"}], "+", "a"}], TraditionalForm]], "Output"], Cell["\<\ Alternatively, if you want to have all the output in traditional form then \ you can use the menu item Cell > Default Output Format Type > TraditionalForm\ \ \>", "Text"] }, Open ]] }, FrontEndVersion->"4.0 for Microsoft Windows", ScreenRectangle->{{0, 1280}, {0, 979}}, WindowSize->{496, 740}, WindowMargins->{{44, Automatic}, {Automatic, 104}} ] ******************************************************************** Danny Mathews <dmathews at ticnet.com> wrote in message news:805vjq$ddu at smc.vnet.net... > I was using the "StepbyStepDifferentiation" package I found on the web site > and it has raised a question for me. > > It seems that Mathematica ignores the Quotient Rule in general and uses the > Product Rule for equations in a f(x)/g(x) format. > > This leaves the solution in a f(x) + g(x) format that I have to simplify to > get the answer to agree with what I came up with using a pencil or on my > TI-89 calculator. > > An example is (1+x^2)/(1-x^2). I came up with(as did my TI-89) > 4x/((x^2-1)^2) for a solution. > > Mathematica gives a answer in the form of f(x) + g(x) that will simplify to > the solution above. I tried several examples with the same scenario. Is > there something I can do about this? > > Also, Mathematica displays polynomials with the powers written in ascending > order which is opposite of how I was taught to write polynomials in standard > form. Can this be changed? > > Bonus Question: > > My Calculus instructor loves piece-wise functions. Any info on plotting > them would be helpful. > > Regards, > Danny Mathews > > >