JUK1
getResidues.m
Go to the documentation of this file.
1 function [residues, ctilde, Asim, residual] = getResidues(poles, freqData, wSimFreqs)
2 %GETRESIDUES Determines the residues of a rational model fit to frequency
3 %domain matrix (note that this is true VectorFitting)
4 % This function is for use with vector fitting. It simulates a rational
5 % model (in adjusted partial fraction form) and determines the resdiues
6 % required to fit a function signma(s) using least squares. This can then
7 % in turn be used to update the poles of the rational model for the next
8 % iteration.
9 
10  % Total number of frequency points
11  numFreqs = length(wSimFreqs);
12 
13  % Number of poles to use in fit
14  numPoles = length(poles);
15 
16  %Turn this into a matrix, with identical frequencies along the rows
17  Sk = 1j*repmat(wSimFreqs(:),1,numPoles);
18 
19  %anorm are the complex starting/current poles
20  %Here we create a matrix with identical poles down the columns
21  P = repmat(poles,numFreqs,1);
22 
23  %Using these poles make 1/(s-a) terms
24  %Each row corresponds to a partial fraction model at one frequency
25  Asys = 1./(Sk-P);
26 
27  %To ensure residues come in perfect conjugate pairs, we form A as
28  %A = [ANorm + AConj, 1j*ANorm - 1j*AConj];
29 
30  %How many vectors are we fitting?
31  numVec = size(freqData,1)*size(freqData,2);
33 
34  %The partial fraction expansions consits of terms:
35  %[1/(s-a1), 1/(s-a2),..., 1, s]
36  %This is used as part of the vector fit matrix, but also for evaluating the
37  %fit later
38  Asim = [Asys, ones(numFreqs,1), 1j*wSimFreqs(:)*0];
39 
41  %freqDataFull = freqData;
42 
43  %Add the partial fraction terms for the sigma function
44  %A = [AsimFull, -repmat(Asys,4,1).*repmat(freqDataFull,1,size(Asys,2))];
45  A = [Asim, -Asys.*repmat(freqData(:),1,size(Asys,2))];
46 
47  b = freqData(:);
48 
49  %Obtain iteration resiudes for model
50  x = A\b;
51  res = x(1:numVar);
52  %res(:,2) = x(1*numVar + 1:2*numVar);
53  %res(:,3) = x(2*numVar + 1:3*numVar);
54  %res(:,4) = x(3*numVar + 1:4*numVar);
55  residues = res(:);
56 
57  %Determine residues for sigma(s) function
58  %ctilde = x(4*numVar + 1:end);
59  ctilde = x(end/2+2:end);
60 
61  residual = norm(A*x-b);
62 
63  %% Check fit
64  %H = simPoleResidueRemainder(wSimFreqs/2*pi, poles, residues);
65 
66 end
pi
Definition: Freq.m:24
Get residues for these Asim
Undo scaling of outgoing poles
Turn this into a with identical frequencies along the rows s
Find a complex rational model for freq domain data for a
To ensure residues come in perfect conjugate we form A as A
Definition: getResidues.m:28
To ensure residues come in perfect conjugate pairs
Definition: getResidues.m:27
b
Definition: getResidues.m:47
freqDataFull
Definition: getResidues.m:41
How many vectors are we fitting numVec
Definition: getResidues.m:31
: wSimFreqs()
Turn this into a with identical frequencies along the rows Sk
Definition: getResidues.m:17
AsimFull
Definition: getResidues.m:40
The partial fraction expansions consits of terms
Definition: getResidues.m:35
residual
Definition: getResidues.m:61
residues
Definition: getResidues.m:55
Obtain iteration resiudes for model x
Definition: getResidues.m:50
res
Definition: getResidues.m:51
Number of poles to use in fit numPoles
Definition: getResidues.m:14
Turn this into a matrix
Definition: getResidues.m:16
ctilde
Definition: getResidues.m:59
Determine residues for sigma(s) function %ctilde
Using these poles make(s-a) terms %Each row corresponds to a partial fraction model at one frequency Asys
anorm are the complex starting current poles Here we create a matrix with identical poles down the columns P
Definition: getResidues.m:21
Check fit H
Definition: getResidues.m:64
numVar
Definition: getResidues.m:32
for j
Definition: interch.m:13