example6_7.m

来自「Matlab 6.X辅助优化计算与设计----源代码」· M 代码 · 共 35 行

M
35
字号
%Step 1:计算幅值
function y = filtmin(a,w)
n = length(a);
y = cos(w'*(0:n-1)*2*pi)*a ;

%Step 2:调用优化函数
% 绘制初始系数的滤波器频响图
a0 = ones(15,1);
incr = 50;
w = linspace(0,0.5,incr);

y0 = filtmin(a0,w);
clf, plot(w,y0,'-:');
drawnow;

% 构造多目标逼近问题
w1 = linspace(0,0.1,incr) ;
w2 = linspace(0.15,0.5,incr);
w0 = [w1 w2];
goal = [1.0*ones(1,length(w1)) zeros(1,length(w2))];
weight = ones(size(goal)); 

% 调用 fgoalattain函数
options = optimset('GoalsExactAchieve',length(goal));
[a,fval,attainfactor,exitflag] = fgoalattain(@filtmin,...
    a0,goal,weight,[],[],[],[],[],[],[],options,w0);
% 绘制优化系数的滤波器频响图
y = filtmin(a,w);
hold on, plot(w,y,'r')
axis([0 0.5 -3 3])
xlabel('Frequency (Hz)')
ylabel('Magnitude Response (dB)')
legend('initial', 'final')
grid on

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?