Matlab 版 (精华区)
发信人: zjliu (秋天的萝卜), 信区: Matlab
标 题: [合集]请问符号计算的问题 关于对数函数
发信站: 哈工大紫丁香 (2003年11月08日18:25:17 星期六), 站内信件
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日13:44:57 星期五 说道:
%这是一个最简单的滤波器
passrad = 10000;
stoprad = 40000;
passgain = 3;
stopgain = 35;
t1 = sqrt(10^(0.1*passgain)-1);
t2 = sqrt(10^(0.1*stopgain)-1);
n = ceil(log10(t2/t1)/log10(stoprad/passrad));
[z,p,k]=buttap(n)
syms rad,hs1;
sym hs2;
hs1 = k/(i*rad/passrad -p(1))/(i*rad/passrad- p(2))/(i*rad/passrad-p(3));
hs2 = 10 * log10((abs(hs1))^2);
ezplot(hs2,[-6000,60001]);
grid on;
可是运行后,却出现
??? Error using ==> log2
Function 'log2' is not defined for values of class 'sym'.
Error in ==> C:\MATLAB6p5\toolbox\matlab\elfun\log10.m
On line 17 ==> y = log2(x);
Error in ==> f:\matlab work\tbutt.m
On line 12 ==> hs2 = 10 * log10((abs(hs1))^2);
请问是怎么回事儿?
────────────────────────────────────────
wangxinwj (wangxinwj) 于 Fri Oct 31 13:53:12 2003 说道:
你的m文件tbutt.m调用了log10.m,log10.m又调用了log2,而log2不支持'sym'类。也就是
说,MATLAB的符号运算工具箱没有为sym类(Class)提供log2的方法(Method)。或者说
,log2没有为sym类重载。
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日13:59:39 星期五 说道:
那怎么办呢?
我的是matlab6.5,不能用
可是我同学是matlab6.1,就可以画出来啊!!!
────────────────────────────────────────
wangxinwj (wangxinwj) 于 Fri Oct 31 14:16:46 2003 说道:
hs2 = 10 * log10((abs(hs1))^2);
试一下这个
hs2 = 10 * log((abs(hs1))^2)/log(10));
;
────────────────────────────────────────
wangxinwj (wangxinwj) 于 Fri Oct 31 14:18:58 2003 说道:
对不起,多写了一个')',
是
hs2 = 10 * log((abs(hs1))^2)/log(10);
────────────────────────────────────────
zjliu (秋天的萝卜) 于 Fri Oct 31 14:19:58 2003 说道:
修改如下(原因好像是在6.5版本中log10函数不支持符号计算,你
把log10用log(...)/log(10)来等效就可以了):
passrad = 10000;
stoprad = 40000;
passgain = 3;
stopgain = 35;
t1 = sqrt(10^(0.1*passgain)-1);
t2 = sqrt(10^(0.1*stopgain)-1);
n = ceil(log10(t2/t1)/log10(stoprad/passrad));
[z,p,k]=buttap(n)
syms rad
syms hs1
syms hs2
hs1 = k/(i*rad/passrad -p(1))/(i*rad/passrad- p(2))/(i*rad/passrad-p(3));
hs2 = 20 * log((abs(hs1)))/log(10);
ezplot(hs2,[-6000,60001]);
grid on;
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日14:20:04 星期五 说道:
居然可以啊!!!!
天啊!
为什么??
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日14:20:33 星期五 说道:
非常感谢,居然真的可以啊!
好怪!
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日14:21:23 星期五 说道:
缺省的log是不是log2?
matlab的log10调用了log2
────────────────────────────────────────
zjliu (秋天的萝卜) 于 Fri Oct 31 14:23:26 2003 说道:
你可以试一下这些对数函数对符号运算的支持情况
────────────────────────────────────────
startend (小小程序员,呆待电脑前。) 于 2003年10月31日14:26:23 星期五 说道:
缺省的log是ln,即自然对数
log、log2、log10中,只有log支持符号运算
>> syms t
>> log(k)
ans =
log(k)
>> log2(k)
??? Error using ==> log2
Function 'log2' is not defined for values of class 'sym'.
>> log10(k)
??? Error using ==> log2
Function 'log2' is not defined for values of class 'sym'.
Error in ==> C:\MATLAB6p5\toolbox\matlab\elfun\log10.m
On line 17 ==> y = log2(x);
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.868毫秒