First of all, you should not addpath() an individual .m file: you should addpath() the folder that the individual .m file is inside.
Second of all, you have several functions stored inside the single file UtilityFunctions.m . When you have several functions in the same function file, then anything outside the .m file can only directly call upon the very first function in the function file -- and must use the name of the .m file to do so.
Your UtilityFunctions.m has function f1 as the first function in it. As a special provision of the MATLAB language, the name of the first function in a function file is ignored and the name of the file is substituted. So instead of calling
U1 = [u1(S1(1)) u2(S1(2)) u3(S1(3)) u4(S1(4))];
you could code
U1 = [UtilityFunctions(S1(1)) u2(S1(2)) u3(S1(3)) u4(S1(4))];
but then you would have the problem that u2, u3, u4 are completely inaccessible.
In order for u2, u3, u4 to be accessible outside of UtilityFunctions.m then the first function in the file would have to create handles to those functions and make those handles available to outside of the file.
In short... do not code a bunch of independent utilities in the same file... it is a nuisance to access them. Put them in individual files. If you were to split them into individual .m files and put those files inside a folder named UtilityFunctions then your code would probably start working.
Or you could use the trick that if you create a class with static methods, then once the class has been loaded into memory, the methods can be called without needing to refer to the class.