Code covered by the BSD License

### Highlights from ensemble kalman filter

3.0
3.0 | 4 ratings Rate this file 16 Downloads (last 30 days) File Size: 3.86 KB File ID: #31093 Version: 1.9

# ensemble kalman filter

### dwight nwaigwe (view profile)

18 Apr 2011 (Updated )

This program uses the ensemble kalman filter to estimate a system's state.

File Information
Description

The algorithm used in this code is referenced from the following:
S Gillijns et al "What Is the Ensemble Kalman Filter and How Well Does it Work?"
Proceedings of the 2006 American Control Conference, Minneapolis, Minnesota, USA, June 14-16, 2006, pp 4448-4453.

Required Products Symbolic Math Toolbox
MATLAB release MATLAB 7.7 (R2008b)
03 Jun 2016 Shanqin Wang

### Shanqin Wang (view profile)

’subs‘ does not work with version 2014a. var_vector should be defined as cell just like
var_vector = cell([p1,1]);
In the first loop,
var_vector{j}=sprintf('x%d',j);

Convert the result of subs to double, do like this,
x_tr=double(subs(f,var_vector,x_tr))+w.*randn(p1,1);

Done.

Comment only
17 Jan 2016 Daniela

### Daniela (view profile)

Got it. This works with version R2015a:
Rewriting the code for avoiding the usage of 'syms'. You have to delete the var_vector and rewrite all lines with 'subs' in it.
e.g.:
Change x_tr=subs(f,var_vector,x_tr)+w.*randn(p1,1);
To
x_tr=A*x_tr+B*u+w.*randn(p1,1);

Therefore you need the matrizes A and B and the vector u so that x_k+1=A*x_k+B*u. In the given example it's:
A=[1 0.1;0 1];
B=[0.005; 0.1];
u=[1];

The same with h. Splitting it up so that y=C*x. Here in this example with:
C=[1 0];

Thanks,
Daniela

17 Jan 2016 Daniela

### Daniela (view profile)

The code doesn't come to a solution with the example provided. After several hours it's still at iteration number 11. I have version R2015a and with the code fragment of Colette no error arises anymore. I also tried the original code with version R2011a, but I didn't get a solution either. Can someone suggest a solution?

Comment only

how to ploting the graphic?

Comment only

Hello,
??? Maximum recursion limit of 500 reached. Use
set(0,'RecursionLimit',N)
to change the limit. Be aware that exceeding your available stack space
can

Error in ==> sym.sym>varname2ref

Comment only
24 Sep 2015 chau aplei

### chau aplei (view profile)

01 Nov 2013 Colette

### Colette (view profile)

01 Nov 2013 Colette

### Colette (view profile)

Hello,

Thank you for your work on this file. It has been helpful to me as I begin learning Kalman Filter.

I am having a few issues with the code and was wondering if anyone else was too. Matlab is not my primary software, so I am wondering if it might be something simple (perhaps I need additional toolboxes). When I try to run the example, I get the following errors:

Error using sym/subs>normalize (line 206)
Entries in OLD must be scalar.

[X2,Y2,symX,symY] = normalize(X,Y); %#ok

Error in sym/subs (line 124)

Error in ensemblekfilter3 (line 63)
x_true=subs(f,var_vector,x_true)+w.*randn(p1,1); %compute true value of state at next
time step

It seems I have found a solution by changing the loop to be:
for j=1:p1 %create vector containing variables x1 to xn
eval(sprintf(' syms x%d', j));
temp = sprintf('x%d ',j);
var_vector = [var_vector; sym(temp)];
%var_vector=[var_vector sprintf('x%d ',j)];
end
%var_vector=strcat('[',var_vector);
%var_vector=strcat(var_vector,']');

If anyone else has experienced similar errors or has further insight into mine, it would be appreciated.

Thanks,
Colette

25 Jun 2012 Abel Galois

### Abel Galois (view profile)

Thanks a lot!

Comment only
16 Jun 2011 dwight nwaigwe

### dwight nwaigwe (view profile)

Hi Albert, thanks for catching that serious typo. I just corrected it and uploaded the new version.

Comment only
06 Jun 2011 albert chiang

### albert chiang (view profile)

Thank you for your work, i have found a mistake in your recent version. In line 71, yforbar=mean(ybar,2), i think it should be yforbar=mean(yfor,2).

Comment only
16 May 2011 albert chiang

### albert chiang (view profile)

have a look at!

Comment only
19 Apr 2011 1.1

changed description

20 Apr 2011 1.2

10 May 2011 1.3

in the first few lines of the comments, I changed y+1 to y_new and x+1 to x_new

16 Jun 2011 1.4

Corrected line 71 as Albert Chiang mentioned.

It should be y_forbar=mean(y_for,2);
not y_forbar=mean(y_bar,2);

05 Apr 2013 1.7

Cosmetic changes: consolidated comments, removed the comment num_iterations = 20 as it wasn't necessary, and i added spaces and indents. i did these edits in notepad. i still have the original file in zipped folder to be safe

08 Apr 2013 1.8

whoops, i meant to say i deleted "num_members" = 20 from comments since it implied you must supply a variable with that name.

29 Oct 2013 1.9

Renamed variables and reorganized code for clarity. The original version is the .m file and the modified one is the .txt file. I haven't tested the .txt file but it should work.