【求助】能不求解表达式直接绘图吗?
mathcad吧
全部回复
仅看楼主
level 11
randvac 楼主
越发发现自己对MathCAD知之甚少了啊。
在用Odesolve命令求解微分方程时,是可以在不知道表达式的情况下直接画出曲线的,就像下面这样:
并不需要x(t)的表达式,但是可以把x(t)的图形绘制出来。(好奇曲线上各点数据是如何保存到x(t)中的?)
那么对于一般的方程,可以在不求解表达式的情况下直接将解绘制出来吗?
这个需求来自这里:
我尝试按照上图的“蝙蝠侠曲线公式”在MathCAD中绘制图形。
我用了最笨的方法——列写方程求解y(x)的表达式——结果可想而知,等了半天了什么解都没解出来,其实我只列写了第一个大括号里的表达式,等待时间已经超过忍耐程度了,按这样的方法根本不能有效地绘制出整个曲线!
于是我想,在MathCAD中是否存在不用求解表达式就可以直接作图的方法?
实在是没有任何思路,连找帮助文档都不知道按什么关键字搜索。
(顺带问下,我在MathCAD中点击F1总是弹出两个HELP界面,这种情况是个例吗?)
2014年10月06日 01点10分 1
level 12
你的意思是希望Mathcad进行纯数值的计算么?那用向量存储计算结果不就可以了么。
不知道你要的是不是这样的效果……得到的都是复数解。
2014年10月06日 02点10分 2
注意上面的那个f(x,y)验算,应该加上“向量化操作符”,才能看到真正的验算结果。
2014年10月06日 02点10分
回复 朱老剑客 :多谢,我试试看。
2014年10月06日 02点10分
level 11
randvac 楼主
不知道哪里出错了,显示除数为0。
(x/7)^2和(y/3)^2两项,指数应该是2,不过我用3也试过了,不是这个的问题。
2014年10月06日 03点10分 3
@朱老剑客 我这里又失败了
2014年10月06日 03点10分
level 12
MC的2D和3D绘图不是真正的显式绘图,这个我在以前的帖子里说过,你给MC一个表达式,它先把这个表达式计算成向量或者矩阵,然后把相应的数据点画到x-y图或者3D图上。这个方法和Matlab、Scilab、Maxima等数值计算软件是一样的。最常见的直接绘制表达式的软件我想应该是Microsoft Mathematica了吧,没有插值计算过程,所以出现的绘图曲线很平滑,无明显拐角,Origin也是直接绘制表达式的,但如果想从图上读取函数值就比较麻烦了,因为在图形的背后不存在向量,需要使用专门的digitizer之类的软件或者插件从图上扒数。
2014年10月06日 03点10分 4
level 12
你知道我为什么对x0和x1000又单独做了一次赋值么?本来没有必要的,就是为了避免除数是0的情况,我才这么做的。
2014年10月06日 03点10分 5
那就是这里错了,我用的不是赋值,我用的是求值。
2014年10月06日 03点10分
回复 angelycs :能否提供工作表以供参考
2014年10月06日 03点10分
回复 angelycs :嗯,好的 :) http://1000eb.com/z86n
2014年10月06日 03点10分
level 12
如果要用我的法子来画这个蝙蝠侠标识,首先需要先理解他给出的这个分段函数中各部分的意义及x,y的取值范围,讨论x在这个分段函数上的是怎么取值的,确定各个分段的x有效区间之后,再使用我上面的方法,总的来说还是比较麻烦的。
2014年10月06日 03点10分 6
每个大括号里的表达式都是一段曲线,把蝙蝠侠logo给拆开成几条曲线了。我先去看看root和向量,理解的不够。多谢讲解!
2014年10月06日 04点10分
level 12
刚才我用GrafEq试了一下,这个函数直接绘制是没办法画出来的,必须给出分段函数各个部分的x取值范围,而且这个函数在很大程度上可以化简,或者说这个作者列出这么复杂的表达式更多的目的是为了虚张声势。
2014年10月06日 04点10分 7
回复 angelycs :呵呵,努把力,拿出一个Mathcad解来哈。祝你成功。:)
2014年10月06日 04点10分
回复 朱老剑客 :以我现在的水平恐怕是很有难度。就算画出来了一定也是个扁的。[滑稽]
2014年10月06日 05点10分
level 12
蝙蝠侠的MC解……
2014年10月06日 08点10分 8
[真棒]怎么做到的,开教程吧。
2014年10月06日 08点10分
回复 angelycs :就是用MC把那个帖子里的话翻译了一下,没什么技术含量的。
2014年10月06日 11点10分
回复 朱老剑客 :看到后面几楼各个都说用其他m软件轻易做出来了,而且看代码都是没有求解表达式直接就给画出来了,这方面MathCAD是弱项吗?
2014年10月06日 11点10分
回复 angelycs :呵呵,笑而不答。用MC只能更轻易,否则我不会玩儿MC的。
2014年10月06日 12点10分
level 13
2014年10月07日 08点10分 9
和吧主的一模一样啊,吧主不说怎么做出来的,要不你给说说吧[勉强]
2014年10月07日 08点10分
回复 angelycs :还是让剑客说说吧 :) 我的感觉 和剑客说的—— “就是用MC把那个帖子里的话翻译了一下,没什么技术含量的。”——有一点不一样。
2014年10月07日 08点10分
回复 LNSZDZG :我的感觉就更不一样了......可千万别往简单了里说
2014年10月07日 08点10分
回复 LNSZDZG :我感觉比联通结简单一些
2014年10月07日 08点10分
level 13
那我来说吧,还请剑客指正!
在MC中实现if的方法很多,可以参考剑客和月城的旧帖。
2014年10月07日 11点10分 10
真没想到,居然如此简洁,我去试试。
2014年10月07日 11点10分
回复 angelycs :填充成黑色是用什么实现的?
2014年10月07日 11点10分
回复 angelycs :轨迹——实心柱
2014年10月07日 11点10分
回复 LNSZDZG :原来还可以这么用。我画出来中间有一道沿X轴的横线,看你的图没有啊。
2014年10月07日 11点10分
level 12
LNS,我觉得如果在你程序里把所有的|x|都换成x,然后运行f1(|x|)和f2(|x|),这样运行的速度会更快一些,终归如此的话,就等于把多次的绝对值运算归结为1次绝对值运算了。
我和你的想法上只有一个区别,我是用参数方程来定义那个有x,y值域的椭圆的。
2014年10月07日 12点10分 11
level 12
@angelycs 如果你喜欢简洁的程序表达,我推荐你学学python,好像还有更简洁的编程语言,我想不起来了。在projecteuler的论坛里,往往能用一行程序解决其他编程语言好几十行都说不清楚的问题的,就是python。
MC的编程,我是反对苟简的,主要是因为在MC中简洁的表达不一定就是运行最快的,其次是过分的简洁会耽误程序的可读性,从而丧失了MC的“记录思路”的功能。作为WYSIWYG编程语言,它除了实现程序功能之外,还担负有记录并保存对某一个问题的关键思路的作用,这样的设计,可以使你在解决问题的同时,记录自己的想法,等过几年遇到相同的问题时,它就像是一个知识库,可能及时的给你补给思想,至少可以温故知新。
好像Lua、Ruby等等也很简洁,但当你遇到工程问题,需要翻查以前积累的工程技术上的算法知识的时候,我猜测你可能不会去看那些简洁的程序行,而可能会去找当年写的算草纸或者实验记录,公式、算法、绘图,一目了然,能够让你用最短的时间回忆起当年所掌握的工程知识——MC就是干这个用的。
2014年10月07日 12点10分 12
level 12
嗯,相反,我支持把每一个MC的工作表(除了那些最终要拿出来与别人交流用的工作表,以及用MC编的简易计算软件)都做得繁琐无比,大量的注释,大量的想法以及对这些想法的数学实验,各种图表以及插图,甚至对工作、会议做的笔记,都塞进去。
这次看“有限元分析基础”的MC电子书,好几章一个算式都没有,都是文字,或许本来用word就可以做的事儿,在这本书里都用MC做了,确实让我开眼界。原来我也一直认为,如果不用MC的计算功能,为啥还要用MC写东西呢?现在看完了那个电子书之后吧,我多少有些动摇了。
如果所有的事情都可以在一个软件里解决,或者说在一个界面里完成,就像Microsoft的OneNote那样,也不是坏事儿哈。MC至少有一半的功能都是怎么通过插件、JS或者VBS来整合各种windows应用软件到一个界面里,相当于就是一个笔记软件,嗯,所以我现在对于一些非正式的文字处理什么的,也用MC15来做了,偶尔来了灵感,直接列表达式,不会因为要在不同软件之间切换而打断自己的思路。
2014年10月07日 13点10分 13
level 11
randvac 楼主
@朱老剑客
当然,MC的优势也是不可替代的,抛开了其他M软件选择它也是因为MC的特点,直观的计算更能使注意力集中在解决问题上,不像编程的时候还要去想数据结构、类的构造、循环体之类的其他问题。
python语言之前有了解过,电脑上也有,怎么说呢,这类语言有独特的优势,语法也比较特别,但这也成了我的劣势,因为以前学的编程语言是C++,后来又去自学了C#(个人爱好,学得也不深),习惯了那套语法结构后就比较难以接受其他的语法了。
学了一阵python后,发现它也有着极其庞大的扩展插件(选择综合症的人怎么办),而且拥有特异的语法结构,最难以接受的是使用缩进来表达程序块,这比VB用END标记程序块还奇特啊。
哦,学phthon的时候还同时学了下R语言,最后也是被搁浅了。
这些语言各自的特点太明显了,但是都有各自不同的语法标准,一时学杂了头脑有点乱。
也许过段时间后会再继续学学吧,毕竟它们的优点也很多。
想学的太多了,个人能力有限,总得有所选择。
多谢推荐,近期就先研究下OpenModelica(如果上班后还有空的话)。
2014年10月07日 13点10分 14
level 15
今天下午看见这个帖子顶上来了。
我就想,能否不用if ,或许蝙蝠程序会容易读些。于是试着做成了下面这个样子:
2015年03月25日 12点03分 16
length()是以前剑客的count()自定义函数的变通用法。
2015年03月25日 12点03分
一开始没看明白思路和方法,刚才再看时发现这种实现方法真是巧妙。
2015年03月25日 15点03分
level 12
嗯,有些像你的case语句的变体哈。
我觉得用向量来实现分段函数(序列控制),相当于列出了一个程序动作表,明白清楚,执行效率高,而且很方便调试。
2015年03月25日 12点03分 18
就是查表的办法。
2015年03月25日 13点03分
level 15
因为两函数的横坐标的值完全相同,所以,最后的散点计算可以简捷些:
2015年03月25日 12点03分 19
level 15
不计算坐标点,直接把函数写入坐标系中:
2015年03月25日 13点03分 20
level 15
把f2(x)中的if 也去掉,这样,可以比较这两种用矩阵式取代case(if)的异同:
2015年03月25日 17点03分 21
1 2 尾页