# Getting Part::partd and Part::partw messages in the following example

sol1[t_?NumericQ] := FindRoot[{a + b - t == 0, a - b - 1 == 0},
{{a, 0.80, 0.95}, {b, 0.95, 2}}];

a0[t_] := sol1[t][[1, 2]];
b0[t_] := sol1[t][[2, 2]];
f[t_] := 5 + a0[t] - b0[t]^2;

Print[sol1[[1, 2]]];

max0 := NMaximize[f[t], t];
Print[max0];

max1 := FindMaximum[f[t], {t, 2}];
Print[max1];

Plot[f[t], {t, 0, 5}]

• You don't really need FindRoot[] for a linear equation, y'know. Feb 21 '16 at 18:24
• Your code is somewhat unclear and it should be possible to simplify it considerably. Why don't you tell us what you are trying to accomplish instead? Feb 21 '16 at 18:26
• Related, possibly duplicate: (14645), (21662), (34554), (63407) Feb 21 '16 at 18:33

By defining sol1[t_?NumericQ] := you will cause a symbolic argument to be held:

sol1[foo]    (* out:   sol1[foo]   *)


You can therefore not extract parts from it that do not exist. You should therefore make functions that call sol1 also hold symbolic arguments:

ClearAll[a0, b0]

a0[t_?NumericQ] := sol1[t][[1, 2]];
b0[t_?NumericQ] := sol1[t][[2, 2]];


Now symbolic arguments do not evaluate, but numeric ones do:

a0[foo]
a0[3.7]

a0[foo]

2.35


Consider the following rewrite of your code.

1. Find a generic solution to your system of linear equations:

solution = Solve[{a + b - t == 0, a - b - 1 == 0}, {a, b}]
(* Out: {{a -> (1 + t)/2, b -> 1/2 (-1 + t)}} *)

2. Define a function involving those solutions; no need to define it with SetDelayed (:=) in this case. Simple Set (=) will do fine here.

f[t_] = 5 + a - b^2 /. First@solution
(* Out: 5 - 1/4 (-1 + t)^2 + (1 + t)/2 *)

3. Obtain the value of $t$ for which the function $f$ achieves its maximum value. The calculation can be done symbolically:

maximum = ArgMax[f[t], t]
(* Out: 2 *)

4. Plot the function f and the position of the maximum to check:

Plot[f[t], {t, 0, 5},
Epilog -> {PointSize[0.02], Red, Point[{maximum, f[maximum]}]}
] • Thanks for the help. This example represents a much bigger (non-linear) program, and was only meant to show the problem (getting the error messages). Please focus solely on this issue, and not on rectifying the code which is irrelevant per-se! Feb 23 '16 at 7:00