Files
2025-06-04 14:13:22 +08:00

119 lines
3.2 KiB
Matlab

function trim_and_lin
proj = slproject.getCurrentProject;
wd = cd;
cd([proj.RootFolder '/work']);
mdl = evalin('base', 'mdl_name');
fcn = [mdl, '_an'];
h0 = 50;
v_trim = 25;
mass = 39;
[success,opts1, op_point] =get_trim_Lon(h0, v_trim, mass);
if success
opts = opts1;
x0 = [0 0 opts.h];
alpha = opts.alpha;
v = opts.v;
de0 = opts.de;
tht0 = opts.tht;
v0 = [v*cos(alpha) 0 v*sin(alpha)];
att0 = [0 tht0 0];
thr0 = opts.throttle;
[Glon,Glat] = linfdm(opts.fcn,op_point);
ss_wq = get_ss_wq(Glon);
q_de = tf(ss_wq('q','de'));
p_da = tf(Glat('p','da'));
r_dr = tf(Glat('r','dr'));
ss_br = get_ss_br(Glat,v);
save(['trim_lin_v',num2str(v_trim),'.mat'],'x0','v0','att0','thr0','de0','alpha','Glon','Glat','opts','q_de','p_da','r_dr','ss_wq','ss_br');
else
return;
end
cd(wd);
end
function ss_wq = get_ss_wq(Glon)
A1 = Glon.A([2 3],[2 3]);
B1 = Glon.B([2 3],1);
C1 = Glon.C([2 3],[2 3]);
D1 = Glon.D([2 3],1);
ss_wq = ss(A1,B1,C1,D1);
ss_wq.statename = {'w', 'q'};
ss_wq.inputname = {'de'};
ss_wq.outputname = {'alpha', 'q'};
end
function ss_br = get_ss_br(Glat,v)
[A,B] = calc_AB(Glat,v,0);
A1 = A;
B1 = B(:,2);
C1 = eye(4);
D1 = zeros(4,1);
ss_br = ss(A1,B1,C1,D1);
ss_br.statename = {'beta','p', 'r','phi'};
ss_br.inputname = {'dr'};
ss_br.outputname = {'beta','p', 'r','phi'};
end
% function Gsp = getGsp(Glon, v)
%
% A = Glon.A([2 3],[2 3]);
% B = Glon.B([2 3],1);
% C = Glon.C([2 3],[2 3]);
% D = Glon.D([2 3],1);
% V0 = sqrt(v(1).^2+v(2).^2+v(3).^2);
% Asp = [A(1,1) A(1,2)./V0;A(2,1).*V0 A(2,2)];
% Bsp = [B(1,1)./V0;B(2,1)];
% Csp = eye(2);
% Dsp = zeros(2,1);
% Gsp = ss(Asp,Bsp,C1,D1);
% Gsp.statename = {'w', 'q'};
% Gsp.inputname = {'de'};
% Gsp.outputname = {'alpha', 'q'};
% q_de = tf(Gsp('q','de'));
%
%
% end
function [A,B] = calc_AB(mode,V,index)
A = mode.A;
B = mode.B;
if index==1
A = [ A(1,1), A(1,2).*V, A(1,3), A(1,4)
A(2,1)./V, A(2,2), A(2,3)./V, A(2,4)./V
A(3,1), A(3,2).*V, A(3,3), A(3,4)
A(4,1), A(4,2).*V, A(4,3), A(4,4)];
B = [ B(1,1), B(1,2)
B(2,1)./V, B(2,2)./V
B(3,1), B(3,2)
B(4,1), B(4,2) ];
else
A = [ A(1,1), A(1,2)./V, A(1,3)./V, A(1,4)./V
A(2,1).*V, A(2,2), A(2,3), A(2,4)
A(3,1).*V, A(3,2), A(3,3), A(3,4)
A(4,1).*V, A(4,2), A(4,3), A(4,4)];
B = [ B(1,1)./V, B(1,2)./V
B(2,1), B(2,2)
B(3,1), B(3,2)
B(4,1), B(4,2) ];
end
end