# Defining Solutions to FindRoot a functions of parameters-Part II

Here's a similar question as the the preceding question with the same title, but this time with vectors, which I need to use. I followed the suggestion in the answer the the previous question, but it yields the same error. I just don't understand why functions in Mathematica behave the way they do.

    aVec = {a[1], a[2]};
bVec = {b[1]};
y[aVec_, bVec_] = bVec[[1]]*x^2 - aVec[[1]] - aVec[[2]]
g[aVec_, bVec_] := x /. FindRoot[y[aVec, bVec] == 0, {x, 1}]

g[{1, 2}, {1}]


During evaluation of In[5]:= FindRoot::nlnum: The function value {-1. a[1.]-1. a[2.]+1. b[1.]} is not a list of numbers with dimensions {1} at {x} = {1.}. >>

During evaluation of In[5]:= ReplaceAll::reps: {FindRoot[y[{1,2},{1}]==0,{x,1}]} is neither a list of replacement rules nor a valid dispatch table, and so cannot be used for replacing. >>

(* x /. FindRoot[y[{1, 2}, {1}] == 0, {x, 1}] *)

• Please use standard formatting, along the lines of my editing of your first question. Thanks. Commented Jan 22, 2015 at 1:39
• How do you do the formatting? What are the commands?
– Dan
Commented Jan 22, 2015 at 2:25
• Whenever you post a Question or an Answer, you will see a string of icons just above the box for typing. Hover over each to see its meaning, or click the ? at the right, followed by advanced help. The same is true for editing. Also, be sure to read Tour under help at the top of the page. Commented Jan 22, 2015 at 2:38

## 1 Answer

Try this instead:

y[aVec_, bVec_] := bVec[[1]]*x^2 - aVec[[1]] - aVec[[2]]
g[aVec_, bVec_] := x /. FindRoot[y[aVec, bVec] == 0, {x, 1}]

g[{1, 2}, {1}]


1.73205

By using Set to define y instead of SetDelayed the function ignored the two parameters and used the already-defined aVec and bVec, which were non-numerical and led to the error.

That is, your definition evaluated to this:

y[_, _] = b[1]*x^2 - a[1] - a[2]