# numeric parametric sweep for specific parameter

Let's say I have the following set of parameters:

param=
{a->1,b->2,c->3}


and the following function that uses the parameters:

func = a+b*x+c*x^2


I can apply the parameters to the function by the following assignment:

func /.param


1+2*x+3*x^2

Now I would like to change only the param c for some specific param, let's say:

c -> {10,22,23,1}


How can I create a new set of param, which should look like that in the end:

param = {
{a->1,b->2,c->10},
{a->1,b->2,c->22},
{a->1,b->2,c->23},
{a->1,b->2,c->1}
}


such that I can sweep through the parameters of c without having to retype every time the parameters from a and b ?

What I tried:

param ={
a->#[],b->#[],c->#[]} &/@ {Table[1,{i,1,4}],Table[1,{i,1,4}],{10,22,23,1}}


but this did not work out + it is not very nice, as the variable i has to be adjusted manually to the number of different c values there exist.

• It might be more expedient to do the following instead: func[a_, b_, c_][x_] := a + b x + c x^2; Table[func[1, 2, c][x], {c, {10, 22, 23, 1}}] – J. M. will be back soon Mar 30 '18 at 11:21
• Yes, I agree. However, this is only a toy example. My program is much longer and the parameters are evaluated at different instances. – james Mar 30 '18 at 11:34
• I suggest that you go easy with rules and replacements. Try pure function. – Αλέξανδρος Ζεγγ Mar 30 '18 at 11:43
• Btw.: func is not a function; it is an expression. – Henrik Schumacher Mar 30 '18 at 12:18
• As for adjusting Table, you can do Table[...,{i, Length[cvalues]}], if you have your c values in a list cvalues. – Michael E2 Mar 30 '18 at 13:45

There's this way:

param = Thread[{a -> 1, b -> 2, Thread[c -> {10, 22, 23, 1}]}]
(*
{{a -> 1, b -> 2, c -> 10}, {a -> 1, b -> 2, c -> 22},
{a -> 1, b -> 2, c -> 23}, {a -> 1, b -> 2, c -> 1}}
*)


Maybe also this?:

func = a + b*x + c*x^2
(*  a + b x + c x^2  *)

csub = List /@ Thread[c -> {10, 22, 23, 1}]
(*  {{c -> 10}, {c -> 22}, {c -> 23}, {c -> 1}}  *)

func /. csub /. {a -> 1, b -> 2}
(*  {1 + 2 x + 10 x^2, 1 + 2 x + 22 x^2, 1 + 2 x + 23 x^2, 1 + 2 x + x^2}  *)


If your func is Listable, you can do this:

func /. c -> {10, 22, 23, 1} /. {a -> 1, b -> 2}
(*  {1 + 2 x + 10 x^2, 1 + 2 x + 22 x^2, 1 + 2 x + 23 x^2, 1 + 2 x + x^2}  *)