You need to be careful with how you build your anonymous function:
mu_x = @(t) f_lx(t,param);
In the above line, t is an argument that can change with every call, but param is a fixed snapshot of whatever it happens to be at the time you create mu_x. Changing param downstream in your code will have no effect on mu_x. The param in mu_x will still be that fixed snapshot of the param that existed at the time mu_x was created. If you want to use a new param with mu_x, you will need to recreate mu_x from scratch (i.e., execute the above line again).
Bottom line: If you originally created mu_x with a 1x3 param, and then downstream in your code change param in any way (to a new 1x3 or to a 3x3 etc), then you will have to recreate mu_x from scratch in order for it to use that new param.
Simpler: Just call f_lx directly ... what do you need that mu_x for?