尝试——画包络线
mathcad吧
全部回复
仅看楼主
level 15
月城翁 楼主
因时间太晚,先发图,明天再写说明。
2015年03月10日 16点03分 1
level 15
月城翁 楼主
2015年03月10日 16点03分 2
level 15
月城翁 楼主
2015年03月10日 16点03分 3
level 15
月城翁 楼主
2015年03月10日 16点03分 4
level 15
月城翁 楼主
2015年03月10日 16点03分 5
level 12
MC吧几大难题之一,绘制包络,月城已有实质性进展,真是可喜可贺可喜可贺呀![CLAPPING HANDS SIGN][CLAPPING HANDS SIGN][CLAPPING HANDS SIGN][CLAPPING HANDS SIGN]
2015年03月10日 23点03分 6
level 13
期待月城的作品
2015年03月11日 00点03分 7
level 15
月城翁 楼主
链接: [无效] http://pan.baidu.com/s/1kTDszsV 密码: 096c
文件中的曲线族函数来自网络。
在上传的文件中,基本上找到了计算并画出包络线的一种方法,但是它还是不成熟的半成品,里面还有不妥当和错误的地方,希望各位吧友批判地看。之所以把未完成的东西上传,是希望得到吧友们的帮助,解决其中尚待解决的问题。
计算出包络线函数,仅究方法来说,就是求解二元一次方程组F(x,y,c)=0和(偏导数)F'c(x,y,c)=0的解析解y(x)和/或c(x)。这里得到的y(x)和F(x,y,c(x))就是包络线函数。
问题是如何得到y(x)和/或c(x)?我目前想到的方法就是用given...find()求解块。实践证明,在有些时候也可行。但是,带来的问题是:
1.我不知道如何把它们用在程序板中;
2.find()未必就能得到需要的解。有时明明心算都可以得到的结果,find()也可能说找不到解;(我欠缺使用find()的技巧)
3计算过程中,需要人工进行移植数据、变换算式等工作,才能继续后续的运算;
4.需要作图验证是否真是包络线。
这样一来,目前只能列出分步的算式,进行半自动计算,没有办法写成程序板自动运行。如果能想到其它方法绕过这些障碍,做成自定义函数,那就再好不过了。
在inside的介绍作图部分的内容的1.4节,有几个貌似包络线的例子。我原本希望从中学习如何画包络线的。把其中的内容研读了一番,才发现,该文介绍的是已知一曲线,画出它的切线族。这和我需要的已知一曲线族,算出它的包络线,正好是互为逆向工程。所以,只好自己另想办法。
我把inside中画包络线图用得着的自定义函数挑出来,按我的习惯(命令行尽可能少)进行了改写,自己又先后编写了3个画曲线族的自定义函数(在evelopefor.xmcd文件中)。在这个基础上才开始探索计算并画出包络图的办法。因此,算式的风格有些像inside的例程。
啰嗦了,目的是希望得到吧友们的支持和帮助,把这一难题解决得尽可能满意一些。 我相信,会有更好的方法来解决计算包络线的问题。或者说,已经有了,但是我不知道。
谢谢。
2015年03月11日 11点03分 8
嗯,我先看看思路,你说的那几条都可以绕过find。如果用的是find的符号解,我春节前发的一个帖子里有如何把find放进程序板的说明,春节后我也发了一个帖子说这事儿。
2015年03月11日 12点03分
回复
���Ͻ���
:@月城公寓寓公 ,参考这个,https://tieba.baidu.com/p/3600334948,还有这个,https://tieba.baidu.com/p/3524351414,第二个帖子就是直接在程序板里用find了。
2015年03月11日 12点03分
谢谢朱老师。这两个帖子我都曾经研读过,因为没有自己动手使用过,因此印象不深。
2015年03月11日 13点03分
level 12
wiki的那个证明太苟简了,什么叫切向量呀?分明s和t不是正交的,它为啥就那么定义切向量了呢?
公式推导部分我倒是看明白了,就是基本概念我没看明白。
2015年03月11日 13点03分 9
level 12
你这里Ma2Vec()是将一个矩阵转成一个向量,然后Vec()中仅使用了Ma2Vec()所转成的向量的第0项和第1项,在这两项中间进行等差插值,是这样的吗?
2015年03月11日 13点03分 10
level 12
看你在后面定义的Curves1、2、c,其中的I貌似只使用了前两个元素,如果是这样的话,直接在函数使用说明里说“I是一个两元素向量”不就完了么?而且如此的话,Ma2Vec()这个函数也就没必要使用了,用Vec()直接就可以对I进行插值了,不是么?
2015年03月11日 14点03分 11
level 15
月城翁 楼主
I 很重要,非要不可。I 值在Vec(I)中变成了B,d=(B[1-B[0)/B[2 ,就是d=(I[1-I[0)/I[2 。相当于for n∈I[0,I[0+(I[1-I[0)/I[2..I[1的循环。
2015年03月11日 14点03分 13
level 15
月城翁 楼主
您说得对,对于I来说,可以抛开MaVec()直接计算,但是后续的x列向量的等差数列,也得自己写算式。既然inside中有Vec()函数,直接把现成的拿来用总要简单些。只是多余走了Ma2Vec() ,绕道了。
2015年03月11日 14点03分 14
我说错了。走Ma2Vec()是必要的。其作用是把行向量 I 转换成列向量 B ,这样后面的计算才能正常地继续下去。
2015年03月13日 13点03分
level 12
呵呵,没事儿,论坛就是每个人都出把力气,对吧?:)
我觉得对于一些有难度的问题,我从来不指望某一个人能够完全的把它解决掉,而是需要团队合作才能干好。咱们现在使用MC已经不是去年或者前年那样,能够解决基本使用方法问题就能够得到满足了,对吧? :) 攻坚没有团队的话,单打独斗在现在社会是根本不可能的。您以为那些获得诺贝尔奖的朋友们真的都是他一个人的研究成果么?哪个不是有一群人在帮助他?
我觉得现在的MC吧就是缺少团队协作精神,呵呵,不是说您不好哈,您别生气。你提一点儿,我提一点儿,他提一点儿,慢慢的把一个问题搞明白,解决掉,我觉得现在就是需要这样的气氛了。
您在“包络线(参数方程)”中提到:“在这里,必须重写一次fe(u),不知为什么。”,我找到原因了:
您首先定义的函数,之后再定义r。尽管在之前的定义中,您使用了符号求解,得到了一个带有(r,a)变量的函数fe(a)——注意此时的fe(a)实际上是一个两变量函数,只不过您故意的让其中一个变量消失了,形成了local function,局部定义的函数,此时r作为参变量对fe(a)的数值计算仍旧起作用,但这与您定义的Graph(f,x,type)函数相矛盾。在您定义的Graph()中,f是单变量函数,而MC得到的fe()是双变量函数,因此出现了在之后的EvenGraph()求值中fe报错。即使您已经给出了r的赋值,r=2,但没有用,因为fe()仍旧是双变量函数。
然后您又重新定义了一次fe(),这次是在r=2之后定义的,这个时候,r就是一个常量,所以您定义的fe(a)单变量函数有效。
我把r=2这个定义放到了工作表的最前面,此时在整个工作表里,r都是一个常数,之后就没必要再重新定义fe(a)了。如下图:
2015年03月11日 15点03分 17
解释得很详细,谢谢。又向您学得了经验。不过,我得睡觉了。不再回帖,请原谅。
2015年03月11日 15点03分
回复
�³ǹ�ԢԢ��
:嗯,晓得了。
2015年03月11日 17点03分
level 12
您在“包络线(直角坐标)”中第一个例子,有一句“这里的fe(x)和f(x)是同一个函数,与源函数不同”,没看明白。还有您的f1(x)、f2(x)、f2b(x)是怎么得到呢?
2015年03月11日 16点03分 19
level 12
在“包络线(直角坐标)”中第一个例子,您说“族曲线和网络上的不同”,网络上是什么样子的?您把网址给过来,我看看哈。
2015年03月11日 16点03分 20
http://wenku.baidu.com/view/4171af11a216147917112857.html 的第13页。遇到点麻烦,我把备份丢了,只有打印出来的纸质文件。在网上重新搜索了一上午,总算找到了原来的网址。该图没有左侧的水平横线部分。另外,请看23楼。
2015年03月12日 04点03分
level 12
在“包络线(直角坐标)”中第三个例子,find(x)没有找到符号解,但您后面马上令c(x)=-0.5x,如果把c(x)代回F(x,y,c),得到0.25x^2,也不定等于0。
我把您的这个曲线貌似相切的部分放大,结果也没有相切。
在“包络线(直角坐标)”中第四个例子中,c(x,r):=π+acos(x/r)这个定义也有些莫名其妙。
2015年03月11日 17点03分 21
level 13
正在研读,等懂了再次发表意见
2015年03月12日 02点03分 22
level 12
不同的地方就是网络上的图没有水平线。
2015年03月12日 04点03分 24
level 15
月城翁 楼主
对19楼的回复:
因老是有事牵扯,迟复,望谅。
我发上来的文件,不是成品,也不是范本,文件中的每个题都是我摸索中的记录。所以,不一定正确,书写也不规范。我仅就朱老师的提问做一回答,回答我当时的想法,但是这样的想法和计算不一定是
正确的

因为find()有两组解,所以就有两个fe()函数和两个f()函数,fe()就是find()的y(x),即矩阵第二行的值。f(x)是由矩阵第一行的值c(x)代入--F(x,y,c(x))化简得到的。因为(y-x+2/3)^2要开平方,结果就有正负两个值。所以f1(x)只有一个解,而f2就有f2(x)和f2b(x)两个解。
进行到这里我才悟出,我计算出来的fe()和f()是相同的,原来它们都是同一包络函数,而不是源函数。源函数是我这么叫的,就是没有参数c时的曲线族中最基本的一个函数。正规的数学名称是什么,我没有找到。
2015年03月12日 10点03分 25
曲线族中c=0的那条曲线的函数式,我擅自把它叫做“源函数”,没有闹清楚,数学上的标准名称是什么。
2015年03月12日 10点03分
回复
�³ǹ�ԢԢ��
:呵呵,不知道,不过你的意思我明白了。不过,那个f2b(x)与fe(x)也不一样呀?
2015年03月12日 10点03分
所以舍弃了不用。
2015年03月12日 11点03分
1 2 3 尾页