微积分
CindyScript是一种纯粹的数字语言。不执行符号计算。尽管如此,仍然可以进行一些通常只能在符号系统中进行的操作。例如,可以用数字计算函数的导数或构造给定函数的切线。本节说明了这两个函数的使用。
导数和切线
计算导数:d(<函数>,<var>)
描述:此运算符创建一个函数,该函数是另一个函数的导数,该函数作为第一个参数传递。的变量<功能>
应计算的导数必须是标准运行变量#
导数的自由变量作为第二个参数给出。
例子:以下代码演示了运算符的使用:
f(x):=(x-3)*(x-2)*(x-1)*x*.4;g(x):=d(f(#),x);h(x):=d(g(#),x);图(f(x),大小->2);图(g(x),颜色->(0.8,0,0));绘图(h(x),颜色->(0,0,0));
该程序生成的输出如下图所示。蓝线是原始函数f(x)
,红线是一阶导数克(x)
,黑线是二阶导数h(x)
.
二阶导数计算为一阶导数的导数。然而,必须谨慎一点。导数算子完全基于数值原理。如果f(x)
是应该导出的函数,则相应的导数可以定义为d(f(#),x)
.在这里x个
表示应评估导数的位置。然后通过以下公式计算导数的值
对于足够小的数字每股收益
这为此时的实际导数提供了合理的近似值。然而,连续多次应用此运算符会显著增加错误。大约五次迭代后,结果不再可用。因此,不能指望用五阶导数进行合理的计算。
修改人:默认情况下,常数每股收益
在上述公式中被设置为0.0001。该值在高导数的可靠性和精度之间形成了合理的折衷。可以使用修饰符更改此值eps-><数字>
.
切线:正切(<函数>,<var>)
描述:这个运算符与计算函数导数的运算符非常相似。然而,该运算符不是计算导数的值,而是计算函数在一点处切线的齐次坐标。该点作为第二个参数输入。
例子:以下示例代码计算抛物线的许多切线:
f(x):=(x^2)/4;重复(250,开始->-30,停止->30,x,t=切线(f(#),x);绘制(t,alpha->.3););绘图(f(x),大小->3,颜色->(0,0,0));
下图显示了程序创建的结果图像。
切线函数的结果是齐次坐标的三个向量。此外,还设置了该向量的直线属性(请参见几何运算符)这样坐标就会自动绘制为一条线。
高级计算
猜测实数的值:猜测(<数字>)
描述:猜测运算符可能是CindyScript中最复杂、最强大的运算符之一。它可以用于从数字浮点值恢复符号含义。猜测操作符需要一个数字作为输入并返回一个字符串。该字符串应该是描述输入数字的符号表达式。猜测操作符尝试生成表单的字符串
哪里一
,b条
、和c(c)
是分子和分母不大于1000左右的有理数。如果输入的数字可以用描述的方式以合理的数字精度表示,那么猜测操作符将生成此表达式。如果不是,猜测操作符将返回原始输入数字。
因此,可以使用猜测运算符来发现数字是否有理(然后b条
或二次方程的解。
示例:该操作符有时对查找几何结构的隐藏属性非常有用。我们用几个例子来说明这一点。第一张图片显示了一种结构,其中直线的斜率和两个圆的交点的坐标是“猜测的”:
如果输入坐标和半径是整数,则所得数字将是有理数或系数相对较小的二次方程的解。接下来的两个例子展示了猜测的两个重要应用。第一个比较规则五角星中的两个长度。长度比正好是黄金比例。第二个示例显示了简单结构中两个正方形区域之间的良好连接。
备注:猜测操作符背后的主力是所谓的PSLQ算法,这是一种真正巧妙的算法,能够发现(如果是实数x个,年、和z(z)给定)整数相关性一·x个+b条·年+c(c)·z(z)=0.如果要检查实数x个是二次关系的解,我们必须寻找一个形式的整数关系一+b条·x个+c(c)·x个²=0. 这就是猜测操作符的实现方式。然后根据计算出的积分系数重构解。
多项式的根:根(<列表>)
描述:函数根可以计算一元多项式的根。作为输入,它接受多项式的系数,从最低阶到最高阶。系数的结果也可能是复数。
示例:例如,如果要计算多项式的根1+x个2=0你可以直接打电话根([1,0,1])
。结果表达式为[-0-i*1,-0+i*1]
,因为多项式有两个复数根+我和-我.
下面的代码计算并绘制由系数给出的三次多项式的根。
a=0.4;b=-0.4;c=-3;d=-1;f(x):=a*x^3+b*x^2+c*x+d;图(f(x),大小->2);r=根([d,c,b,a]);对于所有(r,绘制((#,0))