In the second program (which doesn't work), the FUNC module is trying to refer to global symbols a,b, and c, but there are no symbols by that name in the global symbol table. To review how global variables work in SAS/IML, see the article "Understanding local and global variables in the SAS/IML language."
To solve your problem, you can either define (a,b,c) in the main scope of the program, or you can have the GetSolution_m module update the global symbol table by copying its parameters into the global symbols. It sounds like you want the second option. For clarity, the following program uses g_a, g_b, and g_c as the name of the global variables:
proc iml;
start func(x) global(g_a,g_b,g_c);
measure = (g_a/x+g_b/x##2 - g_c);
return(measure);
finish func;
store module=func;
start getSolution_m(a,b,c) global(g_a,g_b,g_c);
g_a = a; g_b = b; g_c = c; /* copy parameters into the global symbols */
interval = {0.01 2};
roots = froot( "Func", interval);
print roots;
finish;
store module=getSolution_m;
quit;
proc iml;
load;
call getSolution_m(215,231.5,400);
... View more