我是靠谱客的博主 甜美夏天,最近开发中收集的这篇文章主要介绍疑难杂症篇(二)--MATLAB中“未定义函数或变量 ‘bd_asymp‘”问题的解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
使用MATLAB绘制开环对数幅频渐近特性曲线过程中,出现“未定义函数或变量 ‘bd_asymp’”的问题,下面给出一个参考的解决方案。
- 展示出现的问题
- 问题的解决方案
a.在命令行中输入"edit bd_asymp",会显示bd_asymp文件不存在,选择"是",新建.m文件。
b.在bd_asymp.m文件中粘入bd_asymp函数的源代码,保存文件。
c.测试是否可以绘制开环对数幅频渐近特性曲线,问题解决。
- 附: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);
最后
以上就是甜美夏天为你收集整理的疑难杂症篇(二)--MATLAB中“未定义函数或变量 ‘bd_asymp‘”问题的解决方案的全部内容,希望文章能够帮你解决疑难杂症篇(二)--MATLAB中“未定义函数或变量 ‘bd_asymp‘”问题的解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复