Re: Problems solving using Solve
- To: mathgroup at smc.vnet.net
- Subject: [mg68850] Re: Problems solving using Solve
- From: Peter Pein <petsie at dordos.net>
- Date: Mon, 21 Aug 2006 03:28:01 -0400 (EDT)
- References: <ec65bn$1f8$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
akil schrieb:
> I have a problem suing the following code:
>
...
>
> eg.
> {ax,ay}= {-44.9376, 36.1678} and {cx,cy}= {17.8329, 122.477} and
> {centerOfMassx,centerOfMassy}={-18.6338,72.3356} and rcAB=-0.166667 and
> rcCD=-0.37931
>
> Doing the Solve[afg== 0, v] takes ages (after an hour I quit it). Is there
> any way I can make it work faster? Is any code in Cone such that it
> unnecessarily makes it run faster? So are there any ways I can try to make
> everything run faster? Using integers it runs, but it takes too long when
> using real cones (made up of four points A B C D and a centerOfMass).
>
> Akil
>
>
Hi Akil,
you should delay the evaluation of afg:
cd[input_, rcCD_, cx_, cy_] := rcCD*input + cy - rcCD*cx;
(* just a guess: *) ab = cd;
cone[beta_, v_, rcAB_, rcCD_, ax_, ay_, cx_, cy_, centerOfMassx_,
centerOfMassy_] :=
Module[{fx, fy, ex, ey, waarde, criticalRC, criticalHeight,
xVerplaatsing, ePx2Py2},
fx = x /. Solve[Tan[beta]*(x - v) == cd[x, rcCD, cx, cy], x][[1]];
fy = cd[fx, rcCD, cx, cy];
criticalRC = (centerOfMassy - fy)/(centerOfMassx - fx);
criticalHeight = (-criticalRC)*fx + fy;
ex = Together[(-ay + rcAB*ax + criticalHeight)/(rcAB - criticalRC)];
ey = Together[ab[ex, rcAB, ax, ay]];
xVerplaatsing = ex - v;
ePx2Py2 = Sqrt[xVerplaatsing^2 + ey^2];
waarde = xVerplaatsing/ePx2Py2;
ArcCos[-waarde]
];
afg[beta_, v_, rcAB_, rcCD_, ax_, ay_, cx_, cy_, centerOfMassx_,
centerOfMassy_] :=
Numerator[Together[D[cone[beta, v, rcAB, rcCD, ax, ay, cx, cy,
centerOfMassx, centerOfMassy], v]]];
Timing[example = afg[beta, v, 3, 7/4, 7, 4, 21, 11, 13, 7]]
{0.031*Second,
-2*(-300713 + 531069*Tan[beta] + 19551*v*Tan[beta] + 57513*Tan[beta]^2
- 88578*v*Tan[beta]^2 + 2793*v^2*Tan[beta]^2 - 306269*Tan[beta]^3 +
76059*v*Tan[beta]^3 - 3759*v^2*Tan[beta]^3 + 49*v^3*Tan[beta]^3)
}
First[Timing[solVector = v /. Solve[example == 0, {v}]; ]]
0.016*Second
Plot[Evaluate[Re[solVector]], {beta, Pi/12, Pi/2}, PlotStyle -> {Red,
Green, Blue}, AxesOrigin -> {Pi/4, 0}];
(* Graphics omitted *)
v0 = First[solVector]
(1/7)*(179 - 133*Cot[beta])
Groetjes,
Peter