分享到新浪微博 分享到QQ空间 打印

[公告] Labs制造->MCode2.1

Labs制造->MCode2.1

访问地址: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
如果使用
引用:
b=b+b*2
那么这行将作为一个数学表达式被解析,并以数字类型(浮点或整型)输出“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 DRAWEND 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作为竖坐标,这也是绘制空间曲线所必备的命令
在本例中,这个命令将绘制出一个圆锥螺旋线。其结果如下
附件: 您所在的用户组无法下载或查看附件

TOP

咱有点稍微看懂了……
话说YY打这么多辛苦了……

感觉用了工作室编程会方便很多啊
于是咱打算去学编程了
新签名更新完毕,这次是自己做的BRS喵~[点图进入BD空间—夙夜·凝丨禁网期间凌乱曦落赶制中.渊谷设计中]

TOP

...我想知道有哪些关键字
...以及如果有一个变量名为slove会不会报错
...报错的信息是什么
...以及可以
print slove a+b^3
这样写么
...以及是否可以支持在括号内输入表达式和未知数
像这样:slove(a+b^3)
...大家多给我扣热度呀,期盼-273热度中...

TOP

文中已经说了,暂且没有设置变量的关键字判断以及条件设置
如果你写var solve
然后再solve=100
也是不会报错的。
关于print也说明了,不可以在其中使用表达式。可能再版后会添加这个功能
MCode基于命令式语言,所以解方程是一个内置命令,必须要用其他的命令来获得解,而不可一步完成。(一步而成可以使用递归完成,但尚无此打算)

TOP

bug发现:
1.(疑似)(似乎上面的文字没讲)
复制内容到剪贴板
代码:
begin
var a
a='我'
print a
end
无任何输出
2.(确定)过大的某些方程解不了...
复制内容到剪贴板
代码:
begin
var b
solve 1+c=12031234321,c
get_solve b
print b
end
输出为错误的100
以及在页面最上方出现:
Warning: Division by zero in /home/poketb/domains/poketb.com/public_html/labs/Mcode/include/class/LoadCode.class.php on line 208
...大家多给我扣热度呀,期盼-273热度中...

TOP

中文字符串在匹配正则表达式的时候似乎会有问题。这个以后再想想解决之方法
过大的方程超过了PHP的数据类型允许的范围后会诶当作false,参与运算后将于第一步就跳出,所以结果是100.

TOP

更新MCode2.0以及其使用文档

TOP

歪歪……好伟大……
算法大师……

咱对算法一直不怎么样的

TOP

2.1更新,新增了绘制空间曲线的功能。

TOP