疑难杂症篇(二)--MATLAB中“未定义函数或变量 ‘bd_asymp‘”问题的解决方案

使用MATLAB绘制开环对数幅频渐近特性曲线过程中,出现“未定义函数或变量 ‘bd_asymp’”的问题,下面给出一个参考的解决方案。

  1. 展示出现的问题
    出现问题
  2. 问题的解决方案
    a.在命令行中输入"edit bd_asymp",会显示bd_asymp文件不存在,选择"是",新建.m文件。
    解决方案
    b.在bd_asymp.m文件中粘入bd_asymp函数的源代码,保存文件。
    解决方案
    c.测试是否可以绘制开环对数幅频渐近特性曲线,问题解决。
    解决方案
  3. 附:bd_asymp源代码
function[wpos,ypos]=bd_asymp(G,w)
G1=zpk(G);
wpos=[];
pos1=[]; 
if nargin==1,w=freqint2(G);
end
zer=G1.z{1}; pol=G1.p{1};
gain=G1.k;
for i=1:length(zer);
    if isreal(zer(i))
        wpos=[wpos,abs(zer(i))];
        pos1=[pos1,20];
    else
        if imag(zer(i))>0
            wpos=[wpos,abs(zer(i))];
            pos1=[pos1,40];
        end
    end
end
for i=1:length(pol);
    if isreal(pol(i))
    wpos=[wpos,abs(pol(i))];
    pos1=[pos1,-20];
    else
        if imag(pol(i))>0
            wpos=[wpos,abs(pol(i))];
            pos1=[pos1,-40];
        end
    end
end
wpos=[wpos w(1) w(length(w))];
pos1=[pos1,0,0];
[wpos,ii]=sort(wpos);
pos1=pos1(ii);
ii=find(abs(wpos)<eps); 
kslp=0;
w_start=1000*eps;
if length(ii)>0
    kslp=sum(pos1(ii));
    ii=(ii(length(ii))+1):length(wpos);
    wpos=wpos(ii);
    pos1=pos1(ii);
end
while 1
    [ypos1,pp]=bode(G,w_start);
    if isinf(ypos1),w_start=w_start*10;
    else break;
    end
end
wpos=[w_start wpos];
ypos(1)=20*log10(ypos1);
pos1=[kslp pos1];
for i=2:length(wpos)
    kslp=sum(pos1(1:i-1));
    ypos(i)=ypos(i-1)+kslp*log10(wpos(i)/wpos(i-1));
end
ii=find(wpos>=w(1)&wpos<=w(length(w)));
wpos=wpos(ii);
ypos=ypos(ii);
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FUXI_Willard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值