访问地址:
http://labs.poketb.com/Mcode/
上一个版本的介绍:
http://poketb.com/bbs/thread-11514-1-1.html
在学习学习再学习之后。完完全全的推翻了原来的解释方式,现在的核心程序更为严谨高效!
在这个版本中解决了上一个版本的一些问题(比如print a会报错,必须些微print +a,诸如此类)
另外更新内容如下:引用:
2.1
绘图指令库加入绘制空间曲线参数方程
2.0
绘图指令库
1.0
变量使用前必须定义
变量的赋值及运算
解方程
另外程序自身便存在一些BUG,这些已知BUG将在未知的未来被解决
希望有解决之道的人提供参考方法
已知BUG:引用:
使用绘图指令绘制非连续函数(例如对数函数、反比例函数等)会导致其图像的无实解点落入(0,0)
我暂无方法判断一个函数的定义域。
1.入门复制内容到剪贴板
代码:
BEGIN
VAR a,b,c
a=1
b=2
c=b^7-28*a
print "I Love PTB ",c," Years"
END
这是一个经典程序,在此我对其逐行描述
引用:
1:BEGIN,代表程序开始,在程序开始后会解析代码
2:定义三个变量a,b,c(大小写敏感,尚未添加变量的命名规范,所以啥乱七八糟的符号可以以定义,再版后会修正)
3:把数字类型1赋值给a
4:同上
5:计算b^7-28*a并把值赋给c
6:打印一个结果,字符串与变量之间使用逗号连接,可以使用单引号
7:END,代表程序结束,结束之后的程序代码不会被解析
2.定义变量
所有在程序中使用的变量都需要提前定义
命令结构如下:
复制内容到剪贴板
代码:
var 变量1[,变量2...]
你既可以这样一次定义多个变量
复制内容到剪贴板
代码:
var a,b,youd,woodu
也可以分多次定义
复制内容到剪贴板
代码:
var a,b
var youd,woodu
但是需要注意的是,变量不可以重复定义。
3.为变量赋值
赋值分为两类“字符串型”以及“数学运算型”
这两种类型程序将自动识别。
比如
复制内容到剪贴板
代码:
a='poketb'
b=100
这两个变量是字符串和数字型
如果使用
复制内容到剪贴板
代码:
a=a+b
程序将直接连接这两个值,并以字符串输出“100poketb”赋给a
如果使用
那么这行将作为一个数学表达式被解析,并以数字类型(浮点或整型)输出“300”赋给b
4.数学表达式
在给变量赋值的时候可以使用数学表达式,那么数学表达式可以怎么写呢?
引用:
+加
-减
*乘
/除
^指数(比如a^b,就是a的b次方
(左括号
)右括号
这些都是基本数学运算符号。除此之外你还可以使用
引用:
sin(x)正弦函数
floor(x)舍去法取整
sqrt(x)开方
……
等数学函数
范例:
引用:
a=5+x*(8+x^(5-x))/9+16
5.输出语句复制内容到剪贴板
代码:
print 内容1[,内容2……]
print大小写皆可。
print语句用于把结果输出到浏览器的结果栏里,每一个print都可以使用逗号连接任意变量以及字符串
但是不能连接数学或者字符表达式,比如
复制内容到剪贴板
代码:
print a+b,"poktb"+"c"
是错误的。
每一个print执行过后都将进行换行,也就是说下一次输出就将在第二行显示。
6.解一个方程
至此才到本程序的原本目的。解方程作为数学中最基本的问题在这里得到实现
这是一个解方程的范例
复制内容到剪贴板
代码:
BEGIN
VAR a
SOLVE x+3=x^2,x
GET_SOLVE a
PRINT a
END
引用:
1:开始
2:定义变量a
3:解方程 x+3=x^2的解,其中x是未知数
4:获取方程的解并赋给a
5:输出
6:结束
解方程的命令的格式是
复制内容到剪贴板
代码:
solve 方程,未知数
命令可以大写。
方程是一个等式,在这个等式中你可以使用你已经定义了的数型变量
这个等式将包含一个未知数
未知数不能和已经定义了的变量重复,未知数的名可由你自己定义
比如
复制内容到剪贴板
代码:
solve t+t^2=2,t
也是正确的
在解得方程后,必须使用
get_solve来获取方程的解
复制内容到剪贴板
代码:
get_solve 变量
这个命令用于把方程的解赋给变量a,以便使用。
需要注意的是,是过于复杂的方程,很可能导致运算时间超长,解的精度下降,无解方程同此。
此算法只可解出单实数根,复根、多根无法给出,如果解一个多根方程,程序将只给出一个解。
7.绘图指令
绘图指令用作使用MCode绘制一个函数或者方程的图像。
7.1.介绍
使用方法如下:
范例:
复制内容到剪贴板
代码:
BEGIN
BEGIN DRAW
DFT -4.5,4.5
VAR t
X cos(t)+t*sin(t)
Y sin(t)-t*cos(t)
DRAW
END DRAW
END
引用:
开始程序
开启一个绘图指令
设定参数或自变量的定义域
设定参数名或自变量名
绘制参数方程的X
绘制参数方程的Y
绘图
结束这个绘图指令
结束程序
上面的例子说的很明白,启动绘图指令,就需要使用
BEGIN DRAW和
END DRAW
值得注意的地方是,绘图指令之内的命令
VAR,不再是定义一个变量
而是一个函数的自变量或者参数方程的参数,其既不可以赋值,也不可以被外部所引用。
DFT命令用于指定绘图的自变量或参数的定义域。如果不写入此命令,则默认其为[-8,8]的区间
7.2 FUN命令
上一个例子中已经介绍了绘制参数方程的方法,故不单独再介绍。
这里介绍
FUN命令
语法
复制内容到剪贴板
代码:
FUN 函数解析式
很简单吧?
也就是说当你在绘图指令之间使用
FUN命令的时候,就可以按照
f(x)=函数解析式 来绘制一个函数的图像
关于其绘图BUG,在起始已经有所描述。
7.3 NEXT命令
NEXT命令用于在同一坐标系内绘制另外一个图像,使用NEXT命令后
可以在一张图像上同时绘制多个函数或者方程。
范例如下
复制内容到剪贴板
代码:
BEGIN
BEGIN DRAW
DFT 0,7
VAR t
X cos(t)+t*sin(t)
Y sin(t)-t*cos(t)
NEXT
X sin(t)
Y cos(t)
NEXT
X 1.5*sin(t)
Y 1.5*cos(t)
NEXT
VAR x
FUN x/2
DRAW
END DRAW
END
其含义相信看了前面的介绍后完全可以自行理解了~
其绘制结果为:
(一个以1为基圆的渐开线,一个以1为半径的圆,一个以1.5为半径的圆,一个函数f(x)=x/2)
7.4 扩展
当你使用多个BEGIN DRAW的时候(不可嵌套),则可以输出在不同的坐标系中。
这点可以自行尝试
7.5 设定显示值域RR
有时候会出现定义域很小,而值域极大的情况,这个时候产生的图像不利于观察
故添加此命令
使用方法同DFT命令
复制内容到剪贴板
代码:
RR 下限,上限
注意,当定义域大小超过值域大小的时候,此设置无效。
7.6 绘制空间曲线
在这个版本中增加了空间曲线绘制的方法。依旧是一个例子:
引用:
BEGIN
BEGIN DRAW
3D
DFT 0,19
VAR t
X t*cos(t)
Y t*sin(t)
Z t
DRAW
END DRAW
END
如果要绘制空间曲线,就必须在BEGIN DRAW后紧跟3D这一命令,否则会导致图像混乱。
在绘制空间曲线的时候,需要增加一个Z作为竖坐标,这也是绘制空间曲线所必备的命令
在本例中,这个命令将绘制出一个圆锥螺旋线。其结果如下