# Using Solve[] to solve symbolic system of equations

Posted 8 years ago
8523 Views
|
4 Replies
|
2 Total Likes
|
 I've been able to solve cubic spline functions given values of the function using the code below. F1[t_] = k1 + k2*t + k3*t^2 + k4*t^3; F2[t_] = k5 + k6*t + k7*t^2 + k8*t^3; F3[t_] = k9 + k10*t + k11*t^2 + k12*t^3; F4[t_] = k13 + k14*t + k15*t^2 + k16*t^3; F5[t_] = k17 + k18*t + k19*t^2 + k20*t^3; Solve[{F1[0] == 0, F1[5] == 3, F2[5] == 3, F1'[5] == F2'[5], F1''[5] == F2''[5], F2[15] == 11, F3[15] == 11, F2'[15] == F3'[15], F2''[15] == F3''[15], F3[30] == 16, F4[30] == 16, F3'[30] == F4'[30], F3''[30] == F4''[30], F4[45] == 19, F5[45] == 19, F4'[45] == F5'[45], F4''[45] == F5''[45], F5[72] == 20, F1'[0] == 0, F1''[0] == 0}] What I would like to be able to do is to solve these symbolically like: Solve[{F1[t0] == Fi1, F1[t1] == Fi2, F2[t1] == Fi2, F1'[t1] == F2'[t1], F1''[t1] == F2''[t1], F2[t2] == Fi3, F3[t2] == Fi3, F2'[t2] == F3'[t2], F2''[t2] == F3''[t2], F3[t3] == Fi4, F4[t3] == Fi4, F3'[t3] == F4'[t3], F3''[t3] == F4''[t3], F4[t4] == Fi5, F5[t4] == Fi5, F4'[t4] == F5'[t4], F4''[t4] == F5''[t4], F5[t5] == Fi6, F1'[t0] == 0, F1''[t0] == 0}] for just the k values i.e. I don't want it to think of the Fi's and t's as unknowns but rather as values that I can then plug in.
4 Replies
Sort By:
Posted 8 years ago
 Maybe something like this? fparams = {Fi1, Fi2, Fi3, Fi4, Fi5, Fi6}; tparams = {t0, t1, t2, t3, t4, t5}; Random example: fmat = RandomReal[{-10, 10}, {3, 6}]; tmat = RandomReal[{-10, 10}, {3, 6}]; subsF = Map[Thread[fparams -> #] &, fmat]; subsT = Map[Thread[tparams -> #] &, tmat]; soln /. subsF[[1]] /. subsT[[1]] (* Out[224]= {{k1 -> 9.94179828016, k10 -> 126.921208535, k11 -> 14.0653575745, k12 -> 0.543238518835, k13 -> 86.9409886567, k14 -> -8.1197838958, k15 -> -5.8283104079, k16 -> -0.433645163347, k17 -> -34.2801747093, k18 -> 107.627824592, k19 -> -42.6687115907, k2 -> 0.352538732018, k20 -> 3.47490257264, k3 -> 0.045099495612, k4 -> 0.00192315937676, k5 -> 9.96105988746, k6 -> 0.418727726288, k7 -> 0.120914957506, k8 -> 0.0308704908054, k9 -> 392.500018004}} *)
Posted 8 years ago
 Loops in Mathematica are clumsy and hard to debug. Write and debug a function that does the job for a single vector in your matrix. Then use Map to apply it to each vector in your matrix in turn.
Posted 8 years ago
 Specify explicitly the variables for which you wish to solve. The rest are then effectively treated as parameters. F1[t_] = k1 + k2*t + k3*t^2 + k4*t^3; F2[t_] = k5 + k6*t + k7*t^2 + k8*t^3; F3[t_] = k9 + k10*t + k11*t^2 + k12*t^3; F4[t_] = k13 + k14*t + k15*t^2 + k16*t^3; F5[t_] = k17 + k18*t + k19*t^2 + k20*t^3;! vars = Complement[Variables[{F1[t], F2[t], F3[t], F4[t], F5[t]}], {t}] eqns = {F1[t0] == Fi1, F1[t1] == Fi2, F2[t1] == Fi2, F1'[t1] == F2'[t1], F1''[t1] == F2''[t1], F2[t2] == Fi3, F3[t2] == Fi3, F2'[t2] == F3'[t2], F2''[t2] == F3''[t2], F3[t3] == Fi4, F4[t3] == Fi4, F3'[t3] == F4'[t3], F3''[t3] == F4''[t3], F4[t4] == Fi5, F5[t4] == Fi5, F4'[t4] == F5'[t4], F4''[t4] == F5''[t4], F5[t5] == Fi6, F1'[t0] == 0, F1''[t0] == 0}; soln = Solve[eqns, vars]; The solution is complicated, unsurprisingly.
Posted 8 years ago
 Thanks Daniel,That worked exactly. I don't suppose you and the wider community could help me if I had a matrix of t0 through t5's and Fi1 through Fi6's? Basically if the fit we have done so far is for a single experiment, and we have maybe a hundred experiments of data and we want to fit the data for each run. Otherwise I would just have to plug in actual values and record the results each time. I don't know if there is a way to do this, perhaps a loop? I'm not too familiar with loops in Mathematica.