This commit is contained in:
OOOO 2023-08-18 08:56:43 +00:00
parent bcaab48f8c
commit 0d712caa8b

View File

@ -1,688 +0,0 @@
(* Content-type: application/vnd.wolfram.mathematica *)
(*** Wolfram Notebook File ***)
(* http://www.wolfram.com/nb *)
(* CreatedBy='Mathematica 12.1' *)
(*CacheID: 234*)
(* Internal cache information:
NotebookFileLineBreakTest
NotebookFileLineBreakTest
NotebookDataPosition[ 158, 7]
NotebookDataLength[ 28766, 678]
NotebookOptionsPosition[ 28088, 659]
NotebookOutlinePosition[ 28488, 675]
CellTagsIndexPosition[ 28445, 672]
WindowFrame->Normal*)
(* Beginning of Notebook Content *)
Notebook[{
Cell[BoxData[{
RowBox[{
RowBox[{
RowBox[{"FabiusF", "::", "usage"}], " ", "=", " ",
"\"\<FabiusF[x] gives the value of the Fabius function F(x) for a \
non-negative real argument x.\>\""}], ";"}], "\n",
RowBox[{
RowBox[{"Macros`SetArgumentCount", "[",
RowBox[{"FabiusF", ",", " ", "1"}], "]"}], ";"}], "\n",
RowBox[{
RowBox[{
RowBox[{"SyntaxInformation", "[", "FabiusF", "]"}], " ", "=", " ",
RowBox[{"{",
RowBox[{"\"\<ArgumentsPattern\>\"", " ", "->", " ",
RowBox[{"{", "_", "}"}]}], "}"}]}], ";"}], "\n",
RowBox[{
RowBox[{
RowBox[{"SetAttributes", "[",
RowBox[{"FabiusF", ",", " ",
RowBox[{"{",
RowBox[{"NumericFunction", ",", " ", "Listable"}], "}"}]}], "]"}],
";"}], "\n"}], "\n",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"Derivative", "[", "n_Integer", "]"}], "[", "FabiusF", "]"}], " ",
":=", " ",
RowBox[{
RowBox[{
RowBox[{"2", "^",
RowBox[{"(",
RowBox[{"n", " ",
RowBox[{
RowBox[{"(",
RowBox[{"n", " ", "+", " ", "1"}], ")"}], "/", "2"}]}], ")"}]}],
" ",
RowBox[{"FabiusF", "[",
RowBox[{
RowBox[{"2", "^", "n"}], " ", "#"}], "]"}]}], " ", "&"}]}], "\n", "\n",
RowBox[{"(*",
RowBox[{
RowBox[{"https", ":"}], "//",
RowBox[{
RowBox[{
RowBox[{"mathematica", ".", "stackexchange", ".", "com"}], "/", "a"}],
"/", "13245"}]}], "*)"}]}], "\n",
RowBox[{
RowBox[{
RowBox[{"powerOfTwoQ", "[", "n_", "]"}], " ", ":=", " ",
RowBox[{
RowBox[{"IntegerQ", "[", "n", "]"}], " ", "&&", " ",
RowBox[{
RowBox[{"BitAnd", "[",
RowBox[{"n", ",", " ",
RowBox[{"n", " ", "-", " ", "1"}]}], "]"}], " ", "==", " ", "0"}]}]}],
"\n"}], "\n",
RowBox[{
RowBox[{
RowBox[{"FabiusF", "[", "Infinity", "]"}], " ", "=", " ",
RowBox[{"Interval", "[",
RowBox[{"{",
RowBox[{
RowBox[{"-", "1"}], ",", " ", "1"}], "}"}], "]"}]}], ";"}], "\n",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"FabiusF", "[",
RowBox[{"x_", "?", "NumberQ"}], "]"}], " ", "/;", " ",
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{"0", " ", "<=", " ",
RowBox[{"Re", "[", "x", "]"}]}], " ", "&&", " ",
RowBox[{
RowBox[{"Im", "[", "x", "]"}], " ", "==", " ", "0"}]}], ",", " ",
RowBox[{"powerOfTwoQ", "[",
RowBox[{"Denominator", "[", "x", "]"}], "]"}], ",", " ",
RowBox[{
RowBox[{"Message", "[",
RowBox[{
RowBox[{"FabiusF", "::", "realnn"}], ",", " ", "x"}], "]"}], ";",
" ", "False"}]}], "]"}]}], " ", ":=", " ",
RowBox[{"iFabiusF", "[", "x", "]"}]}], "\n"}], "\n",
RowBox[{
RowBox[{
RowBox[{"ariasD", "[", "0", "]"}], " ", "=", " ", "1"}], ";"}], "\n",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"ariasD", "[",
RowBox[{"n_Integer", "?", "Positive"}], "]"}], " ", ":=", " ",
RowBox[{
RowBox[{"ariasD", "[", "n", "]"}], " ", "=", " ",
RowBox[{
RowBox[{"Sum", "[",
RowBox[{
RowBox[{
RowBox[{"2", "^",
RowBox[{"(",
RowBox[{
RowBox[{"(",
RowBox[{
RowBox[{"k", " ",
RowBox[{"(",
RowBox[{"k", " ", "-", " ", "1"}], ")"}]}], " ", "-", " ",
RowBox[{"n", " ",
RowBox[{"(",
RowBox[{"n", " ", "-", " ", "1"}], ")"}]}]}], ")"}], "/",
"2"}], ")"}]}], " ",
RowBox[{
RowBox[{"ariasD", "[", "k", "]"}], "/",
RowBox[{
RowBox[{"(",
RowBox[{"n", " ", "-", " ", "k", " ", "+", " ", "1"}], ")"}],
"!"}]}]}], ",", " ",
RowBox[{"{",
RowBox[{"k", ",", " ", "0", ",", " ",
RowBox[{"n", " ", "-", " ", "1"}]}], "}"}]}], "]"}], "/",
RowBox[{"(",
RowBox[{
RowBox[{"2", "^", "n"}], " ", "-", " ", "1"}], ")"}]}]}]}], ";"}],
"\n"}], "\n",
RowBox[{
RowBox[{
RowBox[{"tri", "[", "x_", "]"}], " ", ":=", " ",
RowBox[{"Piecewise", "[",
RowBox[{
RowBox[{"{",
RowBox[{"{",
RowBox[{
RowBox[{"2", " ", "-", " ", "x"}], ",", " ",
RowBox[{"x", " ", ">", " ", "1"}]}], "}"}], "}"}], ",", " ", "x"}],
"]"}]}], "\n"}], "\n",
RowBox[{
RowBox[{"iFabiusF", "[", "x_", "]"}], " ", ":=", " ",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{",
RowBox[{
RowBox[{"prec", " ", "=", " ",
RowBox[{"Precision", "[", "x", "]"}]}], ",", " ",
RowBox[{"s", " ", "=", " ", "1"}], ",", " ",
RowBox[{"y", " ", "=", " ", "0"}], ",", " ",
RowBox[{"z", " ", "=", " ",
RowBox[{"SetPrecision", "[",
RowBox[{"x", ",", " ", "Infinity"}], "]"}]}], ",", " ", "n", ",", " ",
"p", ",", " ", "q", ",", " ", "tol", ",", " ", "w"}], "}"}], ",", " ",
RowBox[{
RowBox[{"z", " ", "=", " ",
RowBox[{"If", "[",
RowBox[{
RowBox[{"0", " ", "<=", " ", "z", " ", "<=", " ", "2"}], ",", " ",
RowBox[{"tri", "[", "z", "]"}], ",", " ",
RowBox[{
RowBox[{"q", " ", "=", " ",
RowBox[{"Quotient", "[",
RowBox[{"z", ",", " ", "2"}], "]"}]}], ";", "\n", " ",
RowBox[{"(*",
RowBox[{
RowBox[{"can", " ", "replace", " ",
RowBox[{"ThueMorse", "[", "]"}], " ", "with", " ", "the", " ",
"implementation", " ", "in", " ",
RowBox[{"https", ":"}]}], "//",
RowBox[{
RowBox[{
RowBox[{"mathematica", ".", "stackexchange", ".", "com"}], "/",
"a"}], "/", "89351"}]}], "*)"}],
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{"ThueMorse", "[", "q", "]"}], " ", "==", " ", "1"}], ",",
" ",
RowBox[{"s", " ", "=", " ",
RowBox[{"-", "1"}]}]}], "]"}], ";", " ",
RowBox[{"tri", "[",
RowBox[{"z", " ", "-", " ",
RowBox[{"2", " ", "q"}]}], "]"}]}]}], "]"}]}], ";", "\n", " ",
RowBox[{"tol", " ", "=", " ",
RowBox[{"10", "^",
RowBox[{"(",
RowBox[{"-", "prec"}], ")"}]}]}], ";", "\n", " ",
RowBox[{"While", "[",
RowBox[{
RowBox[{"z", " ", ">", " ", "0"}], ",", " ",
RowBox[{
RowBox[{"n", " ", "=", " ",
RowBox[{"-",
RowBox[{"Floor", "[",
RowBox[{"RealExponent", "[",
RowBox[{"z", ",", " ", "2"}], "]"}], "]"}]}]}], ";", " ",
RowBox[{"p", " ", "=", " ",
RowBox[{"2", "^", "n"}]}], ";", " ",
RowBox[{"z", " ", "-=", " ",
RowBox[{"1", "/", "p"}]}], ";", " ",
RowBox[{"w", " ", "=", " ", "1"}], ";", "\n", " ",
RowBox[{"Do", "[",
RowBox[{
RowBox[{
RowBox[{"w", " ", "=", " ",
RowBox[{
RowBox[{"ariasD", "[", "m", "]"}], " ", "+", " ",
RowBox[{"p", " ", "z", " ",
RowBox[{"w", "/",
RowBox[{"(",
RowBox[{"n", " ", "-", " ", "m", " ", "+", " ", "1"}],
")"}]}]}]}]}], ";", " ",
RowBox[{"p", " ", "/=", " ", "2"}]}], ",", " ",
RowBox[{"{",
RowBox[{"m", ",", " ", "n"}], "}"}]}], "]"}], ";", "\n", " ",
RowBox[{"y", " ", "=", " ",
RowBox[{"w", " ", "-", " ", "y"}]}], ";", "\n", " ",
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{"Abs", "[", "w", "]"}], " ", "<", " ",
RowBox[{
RowBox[{"Abs", "[", "y", "]"}], " ", "tol"}]}], ",", " ",
RowBox[{"Break", "[", "]"}]}], "]"}]}]}], "]"}], ";", "\n", " ",
RowBox[{"SetPrecision", "[",
RowBox[{
RowBox[{"s", " ",
RowBox[{"Abs", "[", "y", "]"}]}], ",", " ", "prec"}], "]"}]}]}],
"]"}]}]}], "Input",
CellLabel->
"In[183]:=",ExpressionUUID->"b6d7bb97-f801-4b79-84e9-03757a7fafc8"],
Cell[BoxData[{
RowBox[{"ClearAll", "[",
RowBox[{"iCurvaturePlotHelper", ",", "CurvaturePlot"}],
"]"}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"iCurvaturePlotHelper", "[",
RowBox[{
RowBox[{"f_", "?",
RowBox[{"(",
RowBox[{
RowBox[{
RowBox[{"Head", "[", "#", "]"}], "=!=", "List"}], "&"}], ")"}]}], ",",
RowBox[{"{",
RowBox[{"t_", ",", "tmin_", ",", "tmax_"}], "}"}], ",",
RowBox[{"{",
RowBox[{
RowBox[{"{",
RowBox[{"x0_", ",", "y0_"}], "}"}], ",", "\[Theta]0_"}], "}"}], ",",
RowBox[{"opts", ":",
RowBox[{"OptionsPattern", "[", "]"}]}]}], "]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{",
RowBox[{"sol", ",", "\[Theta]", ",", "x", ",", "y", ",", "if"}], "}"}],
",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"sol", "=",
RowBox[{"NDSolve", "[",
RowBox[{
RowBox[{"{", "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{
RowBox[{"\[Theta]", "'"}], "[", "t", "]"}], "\[Equal]", "f"}],
",", "\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"x", "'"}], "[", "t", "]"}], "\[Equal]",
RowBox[{"Cos", "[",
RowBox[{"\[Theta]", "[", "t", "]"}], "]"}]}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{
RowBox[{"y", "'"}], "[", "t", "]"}], "\[Equal]",
RowBox[{"Sin", "[",
RowBox[{"\[Theta]", "[", "t", "]"}], "]"}]}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"\[Theta]", "[", "tmin", "]"}], "\[Equal]", "\[Theta]0"}],
",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"x", "[", "tmin", "]"}], "\[Equal]", "x0"}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"y", "[", "tmin", "]"}], "\[Equal]", "y0"}]}],
"\[IndentingNewLine]", "}"}], ",",
RowBox[{"{",
RowBox[{"x", ",", "y"}], "}"}], ",",
RowBox[{"{",
RowBox[{"t", ",", "tmin", ",", "tmax"}], "}"}], ",", "opts"}],
"]"}]}], ";", "\[IndentingNewLine]",
RowBox[{"if", "=",
RowBox[{
RowBox[{
RowBox[{"{",
RowBox[{
RowBox[{"x", "[", "#", "]"}], ",",
RowBox[{"y", "[", "#", "]"}]}], "}"}], "&"}], "/.",
RowBox[{"First", "[", "sol", "]"}]}]}], ";", "\[IndentingNewLine]",
"if"}]}], "\[IndentingNewLine]", "]"}]}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"CurvaturePlot", "[",
RowBox[{"f_", ",",
RowBox[{"{",
RowBox[{"t_", ",", "tmin_", ",", "tmax_"}], "}"}], ",",
RowBox[{"opts", ":",
RowBox[{"OptionsPattern", "[", "]"}]}]}], "]"}], ":=",
RowBox[{"CurvaturePlot", "[",
RowBox[{"f", ",",
RowBox[{"{",
RowBox[{"t", ",", "tmin", ",", "tmax"}], "}"}], ",",
RowBox[{"{",
RowBox[{
RowBox[{"{",
RowBox[{"0", ",", "0"}], "}"}], ",", "0"}], "}"}], ",", "opts"}],
"]"}]}], "\[IndentingNewLine]",
RowBox[{
RowBox[{"CurvaturePlot", "[",
RowBox[{"f_", ",",
RowBox[{"{",
RowBox[{"t_", ",", "tmin_", ",", "tmax_"}], "}"}], ",",
RowBox[{"p", ":",
RowBox[{"{",
RowBox[{
RowBox[{"{",
RowBox[{"x0_", ",", "y0_"}], "}"}], ",", "\[Theta]0_"}], "}"}]}], ",",
RowBox[{"opts", ":",
RowBox[{"OptionsPattern", "[", "]"}]}]}], "]"}], ":=",
RowBox[{"Module", "[",
RowBox[{
RowBox[{"{",
RowBox[{
"\[Theta]", ",", "x", ",", "y", ",", "sol", ",", "rlsplot", ",",
"rlsndsolve", ",", "if", ",", "ifs"}], "}"}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"rlsplot", "=",
RowBox[{"FilterRules", "[",
RowBox[{
RowBox[{"{", "opts", "}"}], ",",
RowBox[{"Options", "[", "ParametricPlot", "]"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"rlsndsolve", "=",
RowBox[{"FilterRules", "[",
RowBox[{
RowBox[{"{", "opts", "}"}], ",",
RowBox[{"Options", "[", "NDSolve", "]"}]}], "]"}]}], ";",
"\[IndentingNewLine]",
RowBox[{"If", "[",
RowBox[{
RowBox[{
RowBox[{"Head", "[", "f", "]"}], "===", "List"}], ",",
"\[IndentingNewLine]",
RowBox[{
RowBox[{"ifs", "=",
RowBox[{
RowBox[{
RowBox[{"iCurvaturePlotHelper", "[",
RowBox[{"#", ",",
RowBox[{"{",
RowBox[{"t", ",", "tmin", ",", "tmax"}], "}"}], ",", "p", ",",
RowBox[{"Evaluate", "@",
RowBox[{"(",
RowBox[{"Sequence", "@@", "rlsndsolve"}], ")"}]}]}], "]"}],
"&"}], "/@", "f"}]}], ";", "\[IndentingNewLine]",
RowBox[{"ParametricPlot", "[",
RowBox[{
RowBox[{"Evaluate", "[",
RowBox[{
RowBox[{
RowBox[{"#", "[", "tplot", "]"}], "&"}], "/@", "ifs"}], "]"}],
",",
RowBox[{"{",
RowBox[{"tplot", ",", "tmin", ",", "tmax"}], "}"}], ",",
RowBox[{"Evaluate", "@",
RowBox[{"(",
RowBox[{"Sequence", "@@", "rlsplot"}], ")"}]}]}], "]"}]}],
"\[IndentingNewLine]", ",", "\[IndentingNewLine]",
RowBox[{
RowBox[{"if", "=",
RowBox[{"iCurvaturePlotHelper", "[",
RowBox[{"f", ",",
RowBox[{"{",
RowBox[{"t", ",", "tmin", ",", "tmax"}], "}"}], ",", "p", ",",
RowBox[{"Evaluate", "@",
RowBox[{"(",
RowBox[{"Sequence", "@@", "rlsndsolve"}], ")"}]}]}], "]"}]}],
";", "\[IndentingNewLine]",
RowBox[{"ParametricPlot", "[",
RowBox[{
RowBox[{"Evaluate", "[",
RowBox[{"if", "[", "tplot", "]"}], "]"}], ",",
RowBox[{"{",
RowBox[{"tplot", ",", "tmin", ",", "tmax"}], "}"}], ",",
RowBox[{"Evaluate", "@",
RowBox[{"(",
RowBox[{"Sequence", "@@", "rlsplot"}], ")"}]}]}], "]"}]}]}],
"\[IndentingNewLine]", "]"}]}]}], "\[IndentingNewLine]",
"]"}]}]}], "Input",
CellLabel->
"In[195]:=",ExpressionUUID->"f922cec0-aa84-4593-aff3-3268dbccfdf7"],
Cell[CellGroupData[{
Cell[BoxData[
RowBox[{"CurvaturePlot", "[",
RowBox[{
RowBox[{"FabiusF", "[", "x", "]"}], ",",
RowBox[{"{",
RowBox[{"x", ",", "0", ",", "4"}], "}"}]}], "]"}]], "Input",
CellLabel->
"In[205]:=",ExpressionUUID->"83f1c93d-5075-475d-b9f3-efc604a47ce1"],
Cell[BoxData[
GraphicsBox[{{{}, {},
TagBox[
{RGBColor[0.368417, 0.506779, 0.709798], AbsoluteThickness[1.6], Opacity[
1.], FaceForm[Opacity[0.3]], LineBox[CompressedData["
1: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
jPryG0hIDC7+8+iMjmrOLxLqnpL55/8DdghmFA==
"]]},
Annotation[#, "Charting`Private`Tag$437871#1"]& ]}, {}},
Axes->{True, True},
AxesLabel->{None, None},
AxesOrigin->{0, 0},
DisplayFunction->Identity,
FrameLabel->{{None, None}, {None, None}},
FrameTicks->{{Automatic, Automatic}, {Automatic, Automatic}},
GridLinesStyle->Directive[
GrayLevel[0.5, 0.4]],
ImagePadding->All,
Method->{
"DefaultGraphicsInteraction" -> {
"Version" -> 1.2, "TrackMousePosition" -> {True, False},
"Effects" -> {
"Highlight" -> {"ratio" -> 2}, "HighlightPoint" -> {"ratio" -> 2},
"Droplines" -> {
"freeformCursorMode" -> True,
"placement" -> {"x" -> "All", "y" -> "None"}}}}, "ScalingFunctions" ->
None},
PlotRange->{{0., 3.243990348766134}, {0., 1.7721998270300445`}},
PlotRangeClipping->True,
PlotRangePadding->{{
Scaled[0.05],
Scaled[0.05]}, {
Scaled[0.05],
Scaled[0.05]}},
Ticks->{Automatic, Automatic}]], "Output",
CellLabel->
"Out[205]=",ExpressionUUID->"e6db7c3b-6fac-4a3a-b719-f61dc8c48834"]
}, Open ]]
},
WindowSize->{786, 884},
WindowMargins->{{Automatic, 210}, {-186, Automatic}},
FrontEndVersion->"12.1 for Microsoft Windows (64-bit) (June 9, 2020)",
StyleDefinitions->"Default.nb",
ExpressionUUID->"403bb8c0-0efb-4c0b-a09f-03976a9aa4f6"
]
(* End of Notebook Content *)
(* Internal cache information *)
(*CellTagsOutline
CellTagsIndex->{}
*)
(*CellTagsIndex
CellTagsIndex->{}
*)
(*NotebookFileOutline
Notebook[{
Cell[558, 20, 8002, 224, 656, "Input",ExpressionUUID->"b6d7bb97-f801-4b79-84e9-03757a7fafc8"],
Cell[8563, 246, 6219, 170, 561, "Input",ExpressionUUID->"f922cec0-aa84-4593-aff3-3268dbccfdf7"],
Cell[CellGroupData[{
Cell[14807, 420, 266, 7, 28, "Input",ExpressionUUID->"83f1c93d-5075-475d-b9f3-efc604a47ce1"],
Cell[15076, 429, 12996, 227, 220, "Output",ExpressionUUID->"e6db7c3b-6fac-4a3a-b719-f61dc8c48834"]
}, Open ]]
}
]
*)
(* End of internal cache information *)