科学网

 找回密码
  注册

tag 标签: 变量重定义

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

matlab矩阵维数不一致出错
wjwqbit 2010-12-29 14:05
使用matlab画电路传输函数图时,经常用到虚数符号i。但一不小心可能就出错噢。这不,刚才我就遇到两个问题: (1)、矩阵维数不一致; (2)、虚数符号i问题。 下面一一说明。 (1)、 矩阵维数不一致 matlab矩阵运算需要各变量的维数一致,不然会出现 Inner matrix dimensions must agree 错误。例如: %错误程序 % 功能说明:滤波器的传递函数(R0+R1)*ones(size(f))+ clc fmax=(10^4); f= ; % 1MHz,步进为0.1Hz w=2*pi*f; % 角频率与频率之间转换 R0=( 1*10^4 ) R1=( 1*10^5 ) C1=( (22)*10^(-6) ) Rf=( 1*10^(5) ) Hw=-w*(R0*Rf*C1*i)./( 1+w*(R0*R1*C1*i)); 传输函数Hw=-w*(R0*Rf*C1*i)./( 1+w*(R0*R1*C1*i))中,w为1x10000的向量,而分母中1+w*(R0*R1*C1*i)表示常数1与w的向量相加,因此维数不一样,旧版的matlab会出错。但新版的matlab(如matlab7.0以上)不会出错,新版一把常数自动与w向量维数匹配上了。如果使用旧版matlab,可以这样:Hw=-w*(R0*Rf*C1*i)./( ones(w)+w*(R0*R1*C1*i))。 (1)、 虚数符号i问题。 matlab默认时把符号i看作是虚数符号,因此下面这段程序看似没问题。但偶尔还会出问题的噢。如果在程序运行前已经存在i变量,而运行这段程序时没有清零变量,那么可能出现矩阵维数不一致问题。例如程序运行前,已存在变量i= ; % 1MHz,步进为0.1Hz w=2*pi*f; % 角频率与频率之间转换 R0=( 1*10^4 ) R1=( 1*10^5 ) C1=( (22)*10^(-6) ) Rf=( 1*10^(5) ) Hw=-w*(R0*Rf*C1*i)./( (R0+R1)*ones(size(f))+w*(R0*R1*C1*i)); H=abs(Hw) ; % 取模 H_theta=angle(Hw)/pi*180; % 求相角 figure(1); loglog(f,H); grid on % 双对数坐标 axis( ); % 显示范围 解决办法是,在每个.m文件前面加clear语句清空变量。如下: % 功能说明:滤波器的传递函数 %syms w R0 R1 C1 Rf %Hw=-( R0+i*w*R0*R1*C1)*(i*w*Rf*C1)/( R0+R1+i*w*R0*R1*C1 ) ; %Hw=Hw*conj(Hw);% 共轭复数 clc clear fmax=(10^4); f= ; % 1MHz,步进为0.1Hz w=2*pi*f; % 角频率与频率之间转换 R0=( 1*10^4 ) R1=( 1*10^5 ) C1=( (22)*10^(-6) ) Rf=( 1*10^(5) ) Hw=-w*(R0*Rf*C1*i)./( (R0+R1)*ones(size(f))+w*(R0*R1*C1*i)); H=abs(Hw) ; % 取模 H_theta=angle(Hw)/pi*180; % 求相角 figure(1); loglog(f,H); grid on % 双对数坐标 axis( ); % 显示范围
个人分类: matlab应用|11718 次阅读|1 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 17:45

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部