https://github.com/cleoold/calculus-toolbox
a toolkit available to calculate various expressions in calculus.
https://github.com/cleoold/calculus-toolbox
calculus math racket scheme
Last synced: about 2 months ago
JSON representation
a toolkit available to calculate various expressions in calculus.
- Host: GitHub
- URL: https://github.com/cleoold/calculus-toolbox
- Owner: cleoold
- License: apache-2.0
- Created: 2019-01-17T02:26:17.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-08-05T13:35:36.000Z (over 5 years ago)
- Last Synced: 2025-01-22T20:51:36.541Z (3 months ago)
- Topics: calculus, math, racket, scheme
- Language: Scheme
- Homepage:
- Size: 58.2 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.html
- License: LICENSE
Awesome Lists containing this project
README
README
/**
* prism.js Github theme based on GitHub's theme.
* @author Sam Clarke
*/
code[class*="language-"],
pre[class*="language-"] {
color: #333;
background: none;
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.4;-moz-tab-size: 8;
-o-tab-size: 8;
tab-size: 8;-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}/* Code blocks */
pre[class*="language-"] {
padding: .8em;
overflow: auto;
/* border: 1px solid #ddd; */
border-radius: 3px;
/* background: #fff; */
background: #f5f5f5;
}/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
white-space: normal;
background: #f5f5f5;
}.token.comment,
.token.blockquote {
color: #969896;
}.token.cdata {
color: #183691;
}.token.doctype,
.token.punctuation,
.token.variable,
.token.macro.property {
color: #333;
}.token.operator,
.token.important,
.token.keyword,
.token.rule,
.token.builtin {
color: #a71d5d;
}.token.string,
.token.url,
.token.regex,
.token.attr-value {
color: #183691;
}.token.property,
.token.number,
.token.boolean,
.token.entity,
.token.atrule,
.token.constant,
.token.symbol,
.token.command,
.token.code {
color: #0086b3;
}.token.tag,
.token.selector,
.token.prolog {
color: #63a35c;
}.token.function,
.token.namespace,
.token.pseudo-element,
.token.class,
.token.class-name,
.token.pseudo-class,
.token.id,
.token.url-reference .token.variable,
.token.attr-name {
color: #795da3;
}.token.entity {
cursor: help;
}.token.title,
.token.title .token.punctuation {
font-weight: bold;
color: #1d3e81;
}.token.list {
color: #ed6a43;
}.token.inserted {
background-color: #eaffea;
color: #55a532;
}.token.deleted {
background-color: #ffecec;
color: #bd2c00;
}.token.bold {
font-weight: bold;
}.token.italic {
font-style: italic;
}/* JSON */
.language-json .token.property {
color: #183691;
}.language-markup .token.tag .token.punctuation {
color: #333;
}/* CSS */
code.language-css,
.language-css .token.function {
color: #0086b3;
}/* YAML */
.language-yaml .token.atrule {
color: #63a35c;
}code.language-yaml {
color: #183691;
}/* Ruby */
.language-ruby .token.function {
color: #333;
}/* Markdown */
.language-markdown .token.url {
color: #795da3;
}/* Makefile */
.language-makefile .token.symbol {
color: #795da3;
}.language-makefile .token.variable {
color: #183691;
}.language-makefile .token.builtin {
color: #0086b3;
}/* Bash */
.language-bash .token.keyword {
color: #0086b3;
}/* highlight */
pre[data-line] {
position: relative;
padding: 1em 0 1em 3em;
}
pre[data-line] .line-highlight-wrapper {
position: absolute;
top: 0;
left: 0;
background-color: transparent;
display: block;
width: 100%;
}pre[data-line] .line-highlight {
position: absolute;
left: 0;
right: 0;
padding: inherit 0;
margin-top: 1em;
background: hsla(24, 20%, 50%,.08);
background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
pointer-events: none;
line-height: inherit;
white-space: pre;
}pre[data-line] .line-highlight:before,
pre[data-line] .line-highlight[data-end]:after {
content: attr(data-start);
position: absolute;
top: .4em;
left: .6em;
min-width: 1em;
padding: 0 .5em;
background-color: hsla(24, 20%, 50%,.4);
color: hsl(24, 20%, 95%);
font: bold 65%/1.5 sans-serif;
text-align: center;
vertical-align: .3em;
border-radius: 999px;
text-shadow: none;
box-shadow: 0 1px white;
}pre[data-line] .line-highlight[data-end]:after {
content: attr(data-end);
top: auto;
bottom: .4em;
}html body{font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ul,html body>ol{margin-bottom:16px}html body ul,html body ol{padding-left:2em}html body ul.no-list,html body ol.no-list{padding:0;list-style-type:none}html body ul ul,html body ul ol,html body ol ol,html body ol ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:bold;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:bold}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em !important;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::before,html body code::after{letter-spacing:-0.2em;content:"\00a0"}html body pre>code{padding:0;margin:0;font-size:.85em !important;word-break:normal;white-space:pre;background:transparent;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;font-size:.85em !important;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:before,html body pre tt:before,html body pre code:after,html body pre tt:after{content:normal}html body p,html body blockquote,html body ul,html body ol,html body dl,html body pre{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body pre,html body code{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview .pagebreak,.markdown-preview .newpage{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center !important}.markdown-preview:not([for="preview"]) .code-chunk .btn-group{display:none}.markdown-preview:not([for="preview"]) .code-chunk .status{display:none}.markdown-preview:not([for="preview"]) .code-chunk .output-div{margin-bottom:16px}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0}@media screen and (min-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px)}}@media screen and (max-width:914px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode]) .markdown-preview{font-size:14px !important;padding:1em}}@media print{html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for="html-export"]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,0.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,0.66);border:4px solid rgba(150,150,150,0.66);background-clip:content-box}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{padding:0 1.6em;margin-top:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc li{margin-bottom:.8em}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc ul{list-style-type:none}html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 150px);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for="html-export"]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for="html-export"]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
With this tool, you can do math and engineering calculations, such as integrals, recurrence sequences and vectors, more easily.
All you need to do are to stick with some function syntax in Scheme (like using brackets()
) to enter formulas, and put integers
to select things in my menu.The repository containing the source codes is located page. The programme is written in Scheme, you can
open the filerunme.scm
in the main folder inDrracket
to run it (as it includes#lang scheme
prefix). If you are using a different
interpreter or compiler, you might need the corresponding module and comment out that#
.
Library
The executable embeds all the necessary dll's in the single file. It includes the math library also. So this tool supports various
operators like(+ x y z), (- x y), (* x y), (/ x y), (sin x), (cos x), (tan x), (asin x), (acos x), (atan x), (sinh x), (cosh x), (tanh x), (sqrt x), (log x), (exp x), (floor x), (ceiling x)
. Especially, x^3 is converted to(expt x 3)
.The tool itself provides a documentation about conversion of equation formats. For example,
is converted into
(* 1.5 (cos (+ (* w t) (-1 k x) (/ pi 2)) ) )
.Using
In Linux, open the terminal and navigate to /bin, use command
./calculus-tool
to open the executable.
Under the calculus-toolbox/standalone-executables/ folder, you can find the standalone executable files that can be run on Linux and Windows.
Instruction
Below describes the features of this tool.
Solving equation
In the main menu, enter
1
to navigate to calculus menu, and then hit another1
to arrive here.
In this screen, type your function and be sure to include the variablex
only. For example, to solve x^3 - e^x + 3 = 0, you need to
type(+ (expt x 3) (- (exp x)) 3)
, then hit enter. Since the tool uses Newton's method to evaluate, it will then ask you for an initial
guess, type any number you think will be close to a solution. For precision, you can input0.001
or other small numbers; the tool
uses this to find the derivative. The next step is to determine how many resursive calls it will evaluate the root, since the sequenceconverges fast, you don't need to input a number that's too large.
The tool will print a solution after you hit enter, or reports an error if the input format is not correct.⋅⋅⋅
You can later change your initial guess to find other solutions.
The programme will remember the input data from the last state in which it is run.Derivative
In this screen, also make sure include the variable
x
; this programme doesn't support other variables as input. You can input your desired point and precison. Note this precision represents the term h in the formula. The result after evaluation will be then printed.
If you also want the left derivative, you can go to theadditional
menu to do the exact same steps, which is useful for determining
whether the derivative exists.
After the update on April 2019, a second derivative feature is added.Integration
Like others, you have to include
x
and syntax. You will be asked to input the lower bound (from), the upper bound (to) and precision.
Note this precision "delta" represents the length of the stepfor the partition. This tool creates
a uniform partition with that length (if delta cannot divide the length of the interval, a shorter interval is created to terminate the programme, please see code for info) and sum the average values of two ends of the subinterval according to the midpoint rule. This process can be described as
In which the term on the right can be avoided upon decreasing value of precision, or by using rational bounds.
If you want to evaluate the left or right integral, you can go to theadditional
menu to do so. This is useful for determining if
the integral exists; if the programme crashes, then it is not integrable over the interval.Recurrence sequence
If a sequence is determined recursively, then this tool provides great help for building a table and summing terms.
Before using, please acknowdge that the index of a sequence starts from 0. if a term is determined recursively by its previous
term, then it needs one base value. Such sequences look like. In this case, enter
1
. If a term is determined by two of its previous values, then it needs two base values, and (possibly) looks like
. For this, enter
2
.
Now you can enter your A, and B if necessary. In the next step, if you entered1
, then includex
in your expression. Thatx
represents the last term based on generating the new term. If you entered2
, then usex
for, and
y
for.
You can then input your order to evaluate things, below shows a sequence defined by
.
⋅⋅⋅Gradient
This menu calculates partial derivative, gradient, and directional derivative for a function defined by multiple variables.
To start, enter your list of variables enclosed by brackets in the first screen, then input the function that has these variables.
For example, for, you need to enter
(x y z)
first, then(expt (* x y z) 1/3)
second. The program will turn it into a
lambda expression for that expression.
Now for each of the three features, you need to input points (or vectors). For example, if you want to type in a point (2 5 2.2),
then simply type in(2 5 2.2)
for that. Also, they need the precision input, this is the same as in the previous derivative section.
Below shows a calculation for directional derivative at (2 3 9.2), followed by the gradient.
Decimal conversion
This tool in under the
additional
menu. You can do the conversion from decimal to baseN (N >= 2), or from baseN to decimal
(1 <= N < 10). The algorithm can be found here.
⋅⋅⋅Product of vector
You can find this option under the
vector
menu. You can input your vector u first, followed by v. The tool will compute their dot
product for you, and if the length is 3, then it also returns the vector u × v.
⋅⋅⋅Projection
This feature produces three vectors at once upon you inputting two vectors. After you enter x first and then u, the followings are returned in order:
- Projection of vector x onto vector u.
![]()
- Perpendicular of vector x onto vector u.
![]()
- reflection of vector x onto the hyperplane with normal u.
![]()
And more minor tools
Updates will be on page. The tool also provides vector rotation, vector molulo, sum/product of sequence and more.
Progress
I give up on vector addition, hexadecimal conversion, building function table, etc as they are less challenging and can be found anywhere on-line or on your scientific calculator. In the future, I will plan to implement approximations of double integral, and some matrix operations such as multiplication and determinants.