# Substituting values

I have a little program that should find values that Solve a system of polynomic equations and then substitute those values function. It solves the system but then, the substitution doesn't happen. I can't see what I'm doing wrong

T = {{2, 3}, {3, 2}, {1, 4}};
techniques = Dimensions[T][];
factors = Dimensions[T][];
αVec = ConstantArray[1/2, techniques];
λVec = Array[λ, techniques];
γVec = Array[γ, factors];
onesVec = ConstantArray[1, techniques];
FactorNeeds = Transpose[T].λVec^(1/αVec)
Quiet[Solve::ztest1];

varVec = Flatten[{λVec, Subscript[δ, 1]}];
temp = Table[FactorNeeds /.
Flatten[
Solve[D[FactorNeeds[[j]] -
Subscript[δ,
1] (onesVec.λVec - 1), {varVec}] ==
ConstantArray[0, Length[varVec]], varVec, Reals]], {j, 1,
factors}];
minmax = Table[temp[[j, 2]]/temp[[j, 1]], {j, 1, factors}];
minKL = Min[minmax];
maxKL = Max[minmax];

i = Rationalize[minKL + .3 (maxKL - minKL)];

varVec = Flatten[{λVec, {Subscript[δ, 1],
Subscript[δ, 2]}}];
zerosVec = ConstantArray[0, Length[varVec]];
temp = N[Flatten[
Solve[{D[(FactorNeeds[] -
Subscript[δ, 1] (λVec.onesVec - 1) +
Subscript[δ,
2] (FactorNeeds[] - i*FactorNeeds[])), {varVec}] ==
ConstantArray[0, Length[varVec]], varVec >= zerosVec}, varVec,
Reals]]]
kVec = FactorNeeds /. temp


The output I get is {λ[1.] -> 0.333166, λ[2.] -> 0.32428, λ[3.] -> 0.342554, Subscript[δ, 1] -> 1.30963, Subscript[δ, 2] -> 0.371542}, which is the solution to the second Solve and {2 λ^2 + 3 λ^2 + λ^2, 3 λ^2 + 2 λ^2 + 4 λ^2}, which is just the definition of FactorNeeds. I was asuming that my last line of code would replace the values λ[j] in FactorNeeds by those obtained in the Solve. Can the fact that those are listed as λ[j.] rather than λ[j] have anything to do with it?

• Thanks, @Kuba. How do I use greek letters within the code? I knew my post looked horrible, but I don't know how to do what you did. Oct 30 '18 at 8:59
• You can use the site steampiano.net/msc Oct 30 '18 at 9:00
• Thanks, @Coolwater Oct 30 '18 at 9:02

Before N you need to add the NHoldAll attribute to λ:
SetAttributes[λ, NHoldAll]

Otherwise your variables are modified by N, e.g. λ becomes λ[2.] which prevents ReplaceAll from matching the variables in FactorNeeds.