0
|
9376 Views
|
4 Replies
|
2 Total Likes
View groups...
Share
GROUPS:

Using Solve[] to solve symbolic system of equations

Posted 10 years ago
 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 10 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 10 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 10 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 10 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.