level 12
朱老剑客
楼主
序列就是用逗号分开的一系列标量、向量、矩阵、字符串等等。序列不能直接用于赋值,序列是纯MC特色的玩意儿,即使在与MC最为相近的Smath中也不能孤立输入序列。
这几天业余时间,我在琢磨“值域变量、序列、向量”这三者的关系,参考了Stuart Bruff先生的https://tieba.baidu.com/p/3115987719,在此文中Stuart先生仅提到序列可以用为函数的变量和for循环中,我举一反三(也是从另外一篇文章里看到的),序列和值域变量配合还可以直接定义数组。

在2D、3D绘图中,在变量输入占位符中,也是用序列进行输入的。
——————————————华丽的分割线————————————————
until函数在MC的help文件里被归类错误。它不是条件分支函数,但在help中被和if放在了一起,因此无论是在“Inside Mathcad: Programming”还是zpz老师的“编程浅说”中(https://tieba.baidu.com/p/3116571258),都通过修改until()的常规形态以突显它的判断特征。
until函数是将值域变量有条件的转化为向量的,使用until函数可以设计转化条件、输出向量的元素的形式,以及元素在输出向量中的位置(尽管是一维的,也可以控制从哪个点开始输出、到哪个点结束)。
until(x,y),x为判断条件,y为输出元素,当x≥0时,按照值域变量依次输出y。
until函数非常特殊,它是MC中唯一的只能在赋值号右边进行运算的函数,也是唯一的可以直接截断值域变量的函数。
until()可以在值域变量和标量下进行计算,而且只能和数组索引、矩阵索引或者列索引联合使用(处于赋值号左边),否则仍会提示“缺少break”。
until()中的x和y可以与值域变量有关,也可以是一个标量。当x为标量时,只能大于等于0,没有任何方法可以挽救,用on error制造分支也没办法,而且此时得到的向量与x[i=f(i)的赋值结果是一样的(i是值域变量)。当y为标量时,所有输出的值与i无关,都是同一个数。
until()只能在数值计算中使用。它和值域变量的关系太深,for循环中的“∈”右边即使使用了值域变量,但在循环过程中所引用的仍旧是标量,因此不能用until();MC的符号计算可以做值域变量的计算,但不能做until函数的计算,即使已经把until()赋值给数组,仍会提示数组索引发散。

在使用until输出向量时,当值域变量中有负数的事情,一定要注意在构造向量索引的时候不能出负数。
until()在构造复杂的向量时会有用处,但用起来确实太不方便了。
尝试构造一个Until函数,这两个成功了,但仍旧不是函数,只是一个程序,无法给函数赋值,结果也无法得到向量(尽管在符号计算中的结果长得很像向量),而仍旧是一个值域变量(可以是非常奇怪的值域变量,可能已经是序列了)。



如果要在编程板中使用值域变量,只能在编程板的外边先定义一个值域变量,然后再在编程板内部引用变量名,否则因为没发生在值域变量上的遍历,即使使用符号计算也得不到
正确的
结果;而且操作值域变量的编程语法是非常独特的。
在尝试构造Until函数时,我感到值域变量在程序板中的传递性非常强,坚不可摧,顽固不化,是纯粹的野兽,整个过程就是在和值域变量搏斗……
不过总算是有了一个交代,尽管和until长得太不一样了,不过使用的方法是相同的:

而且还可以符号求解:

也可以放在编程板里:

唯一一个限制就是值域变量的名字一定要用“k”……(也可以是其他的,需要修改程序板的“∈”右边的变量名)
嗯,这里用到了local function,局部定义函数,以代替“函数名”的输入,用这个方法可以造出这样的鬼东西:

这么做唯一的好处就是少打几行字儿……
2015年02月05日 19点02分
1
这几天业余时间,我在琢磨“值域变量、序列、向量”这三者的关系,参考了Stuart Bruff先生的https://tieba.baidu.com/p/3115987719,在此文中Stuart先生仅提到序列可以用为函数的变量和for循环中,我举一反三(也是从另外一篇文章里看到的),序列和值域变量配合还可以直接定义数组。

在2D、3D绘图中,在变量输入占位符中,也是用序列进行输入的。——————————————华丽的分割线————————————————
until函数在MC的help文件里被归类错误。它不是条件分支函数,但在help中被和if放在了一起,因此无论是在“Inside Mathcad: Programming”还是zpz老师的“编程浅说”中(https://tieba.baidu.com/p/3116571258),都通过修改until()的常规形态以突显它的判断特征。
until函数是将值域变量有条件的转化为向量的,使用until函数可以设计转化条件、输出向量的元素的形式,以及元素在输出向量中的位置(尽管是一维的,也可以控制从哪个点开始输出、到哪个点结束)。
until(x,y),x为判断条件,y为输出元素,当x≥0时,按照值域变量依次输出y。
until函数非常特殊,它是MC中唯一的只能在赋值号右边进行运算的函数,也是唯一的可以直接截断值域变量的函数。
until()可以在值域变量和标量下进行计算,而且只能和数组索引、矩阵索引或者列索引联合使用(处于赋值号左边),否则仍会提示“缺少break”。
until()中的x和y可以与值域变量有关,也可以是一个标量。当x为标量时,只能大于等于0,没有任何方法可以挽救,用on error制造分支也没办法,而且此时得到的向量与x[i=f(i)的赋值结果是一样的(i是值域变量)。当y为标量时,所有输出的值与i无关,都是同一个数。
until()只能在数值计算中使用。它和值域变量的关系太深,for循环中的“∈”右边即使使用了值域变量,但在循环过程中所引用的仍旧是标量,因此不能用until();MC的符号计算可以做值域变量的计算,但不能做until函数的计算,即使已经把until()赋值给数组,仍会提示数组索引发散。

在使用until输出向量时,当值域变量中有负数的事情,一定要注意在构造向量索引的时候不能出负数。until()在构造复杂的向量时会有用处,但用起来确实太不方便了。
尝试构造一个Until函数,这两个成功了,但仍旧不是函数,只是一个程序,无法给函数赋值,结果也无法得到向量(尽管在符号计算中的结果长得很像向量),而仍旧是一个值域变量(可以是非常奇怪的值域变量,可能已经是序列了)。



如果要在编程板中使用值域变量,只能在编程板的外边先定义一个值域变量,然后再在编程板内部引用变量名,否则因为没发生在值域变量上的遍历,即使使用符号计算也得不到正确的
结果;而且操作值域变量的编程语法是非常独特的。
在尝试构造Until函数时,我感到值域变量在程序板中的传递性非常强,坚不可摧,顽固不化,是纯粹的野兽,整个过程就是在和值域变量搏斗……
不过总算是有了一个交代,尽管和until长得太不一样了,不过使用的方法是相同的:

而且还可以符号求解:
也可以放在编程板里:
唯一一个限制就是值域变量的名字一定要用“k”……(也可以是其他的,需要修改程序板的“∈”右边的变量名)嗯,这里用到了local function,局部定义函数,以代替“函数名”的输入,用这个方法可以造出这样的鬼东西:

这么做唯一的好处就是少打几行字儿……