Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-11-27
年龄: 54
帖子: 7
声望力: 0 ![]() |
![]()
有两个vpa函数;可用help vpa和help sym/vpa.m看一下它们的相关信息,二者有细微差别,前者会有一定的误差,后者是精确的。
vpa(15^14),因为参数是数值表达式,因此调用的是第一个函数; vpa('15^14'),因为参数是字符串,调用的是第二个函数;当然如果参数是符号表达式调用的也是这个函数,如vpa(sym('15^14'))。 后面问题的答案也就出来了: N=29;n=[0:28]; a=vpa('n.^((N-1)/2)') 上面程序vpa函数参数是字符串,因此matlab会调用sym/vpa.m,但是N和n都是数值变量,而不是符号对象,肯定会出错;可将程序改成如下情况之一则不会出错: 1、去掉vpa 函数参数的引号,使用数值表达式,vpa.m; N=29;n=[0:28]; a=vpa(n.^((N-1)/2)) 2、将N和n定义成符号常量,这样vpa输入参数不要用引号,就是符号表达式,调用sym/vpa.m。 N=sym(29);n=sym([0:28]); a=vpa(n.^((N-1)/2))或a=n.^((N-1)/2) 当然上面两种方式的结果在数值较大时结果也有差别,第二种方式是准确的,因此要想得到准确答案,应当进行完全的符号运算,而不应当掺入部分数值运算,否则计算机在进行浮点数到符号对象的转换过程中会带来误差。vpa函数使用数值作为输入参数,输出结果却是符号对象,程序里肯定存在这种转换。sym/vpa.m不存在这种问题。 类似的问题也存在于sym函数的两种调用给是:sym(15^14)和sym('15^14'),前者存在转换误差,后者没有。 |
![]() |
![]() |
主题工具 | |
显示模式 | |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
《MATLAB程序设计教程》电子教案 | shnanren | MATLAB论坛 | 14 | 2010-09-12 10:05 |
[求助]符号积分 找不到显式,该怎么解决? | longxtx202 | MATLAB论坛 | 4 | 2009-02-08 21:30 |
[分享]给大家传一个图像空间变换和直方图变换的数学推导 | johnny8088 | MATLAB论坛 | 0 | 2009-01-31 03:26 |
[求助]一个有关用设计的滤波器处理声音信号的问题。 | fujinhai | MATLAB论坛 | 7 | 2008-11-13 09:31 |
[求助]在SIMULINK里,如何将inegrator上方的箭头移到下面去 | yijianmei | MATLAB论坛 | 1 | 2008-07-24 10:15 |