Re: How do I see justification of solution?
- To: mathgroup at smc.vnet.net
- Subject: [mg28398] Re: How do I see justification of solution?
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Mon, 16 Apr 2001 03:28:50 -0400 (EDT)
- References: <9b8ota$7f5@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
David,
See
www.calc101.com
See also
Help>HelpBrowser>Getting Started/Demos>Demos>Step-by-Step Differentiation.
You might be interested my reply, below (****** ),to an earlier question
about the latter:
To read this as a Mathematica notebook, copy from immediately below
BEGIN
to immediately above
END
Then try to paste the result into a Mathematica notebook.
Click the Yes button on the panel that comes up.
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
(******)
BEGIN
Notebook[{
Cell[TextData[{
"Danny Mathews <",
StyleBox["dmathews at ticnet.com",
FontColor->RGBColor[0, 0, 0.996109],
FontVariations->{"Underline"->True}],
"> wrote in message\n",
StyleBox["news:805vjq$ddu at smc.vnet.net",
FontColor->RGBColor[0, 0, 0.996109],
FontVariations->{"Underline"->True}],
"...\n> I was using the \"StepbyStepDifferentiation\" package I \
found on the web\nsite\n> and it has raised a question for me.\n>\n> \
It seems that Mathematica ignores the Quotient Rule in general and \
uses\nthe\n> Product Rule for equations in a f(x)/g(x) format.\n>\n> \
This leaves the solution in a f(x) + g(x) format that I have to \
simplify\nto\n> get the answer to agree with what I came up with \
using a pencil or on my\n> TI-89 calculator.\n>\n> An example is \
(1+x^2)/(1-x^2). I came up with(as did my TI-89)\n> 4x/((x^2-1)^2) \
for a solution.\n>\n> Mathematica gives a answer in the form of f(x) \
+ g(x) that will simplify\nto\n> the solution above. I tried several \
examples with the same scenario. Is\n> there something I can do about \
this?\n\n",
""
}], "Text"],
Cell[CellGroupData[{
Cell["Step by Step Differentiation", "Subtitle"],
Cell[TextData[{
"As you note, ",
Cell[BoxData[
\(RunD[f[x]\/g[x], x]\)]],
", gives the same as the built-in function:"
}], "Text"],
Cell[CellGroupData[{
Cell[BoxData[
\(D[f[x]/g[x], x]\)], "Input"],
Cell[BoxData[
RowBox[{
FractionBox[
RowBox[{
SuperscriptBox["f", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}], \(g[x]\)], "-",
FractionBox[
RowBox[{\(f[x]\), " ",
RowBox[{
SuperscriptBox["g", "\[Prime]",
MultilineFunction->None], "[", "x",
"]"}]}], \(g[x]\^2\)]}]], "Output"]
}, Open ]],
Cell["You want", "Text"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"%", \(\(\(file\)\(:\)\)\(//\)\), "Together", " ",
StyleBox[\( (*quicker\ for\ this\ than\ Simplify*) \),
FontWeight->"Plain"]}]], "Input"],
Cell[BoxData[
FractionBox[
RowBox[{
RowBox[{\(g[x]\), " ",
RowBox[{
SuperscriptBox["f", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}], "-",
RowBox[{\(f[x]\), " ",
RowBox[{
SuperscriptBox["g", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}]}], \(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",
StyleBox["\"\<ProductRule\>\"",
FontColor->RGBColor[0, 0, 1]],
StyleBox[",",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\n",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\t\t",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\"\<QuotientRule\>\"",
FontColor->RGBColor[0, 0, 1]],
StyleBox[",",
FontColor->RGBColor[0, 0, 1]], "\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",
StyleBox["\"\<PowerRule\>\"",
FontColor->RGBColor[0, 0, 1]],
StyleBox[",",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\[IndentingNewLine]",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\t ",
FontColor->RGBColor[0, 0, 1]],
StyleBox["\"\<QuotientRule\>\"",
FontColor->RGBColor[0, 0, 1]],
StyleBox[",",
FontColor->RGBColor[0, 0, 1]], "\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[
\(WalkD[f_, x_] :=
Module[{derivative},
derivative = d[f, x]; \n\t\tdisplayStart[
derivative]; \n\t\tWhile[\[InvisibleSpace]\(! \((FreeQ[
derivative, d])\)\), \n\t\t\toldderivative =
derivative;
k = 0; \n\t\t\tWhile[
oldderivative ==
derivative, \n\t\t\t\t\(k++\); \n\t\t\t\tderivative =
derivative /.
ListRules\[LeftDoubleBracket]k\[RightDoubleBracket]];
displayRuleUsed[
RuleNames\[LeftDoubleBracket]k\[RightDoubleBracket]]; \n\t\
\t\tdisplayDerivative[derivative]]; \n\t\t\[PartialD]\_x
f]\)], "Input"],
Cell[TextData[{
"Change ",
Cell[BoxData[
\(\[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[
\(WalkD[f[x]/g[x], x]\)], "Input"],
Cell[BoxData[
\(d[f[x]\/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[ ]],
" ", \(\(\(-d[g[x], x]\)\ f[x] +
d[f[x], x]\ g[x]\)\/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[{\(g[x]\), " ",
RowBox[{
SuperscriptBox["f", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}], "-",
RowBox[{\(f[x]\), " ",
RowBox[{
SuperscriptBox["g", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}]}], \(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[{\(g[x]\), " ",
RowBox[{
SuperscriptBox["f", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}], "-",
RowBox[{\(f[x]\), " ",
RowBox[{
SuperscriptBox["g", "\[Prime]",
MultilineFunction->None], "[", "x", "]"}]}]}], \(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 ]]
},
FrontEndVersion->"4.1 for Microsoft Windows",
ScreenRectangle->{{0, 1024}, {0, 695}},
WindowSize->{496, 740},
WindowMargins->{{172, Automatic}, {Automatic, 136}}
]
END
--
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
"David Marshall" <marshall at cs.umass.edu> wrote in message
news:9b8ota$7f5 at smc.vnet.net...
> I want to see how Mathematica solves the problem I give it; Not
> just the sub-expressions that Trace puts out.
>
> Ex. If I give it Find the derivative of D[sin(x^2 + 5x),x]
> I'd like to see:
> Chain Rule (...)
> sum Rule (x^2 + 5x)
> power rule (x^2)
> .
> ..
> ..
>
> Isn't there some way to get the thing to show the steps it took to solve
> a problem?
>