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毫秒