one man

Alexey Ivanov

1185 Reputation

17 Badges

12 years, 73 days

Social Networks and Content at

Maple Application Center

MaplePrimes Activity

These are answers submitted by one man

For the Stewart platform, the direct kinematics problem is much more complicated than the inverse one. And you have a problem with direct kinematics. Yes, its solution can be approached without trigonometry, but for each set of lengths of all six legs there will be several solutions (even, perhaps, several dozen solutions).
For example. If you create a simple system of polynomial equations for the coordinates of three points on the platform (as for a rigid body), then the RootFinding[Isolate] procedure (it finds all real solutions) will solve it. From the entire set of solutions, you can choose one based on the criterion of proximity to the previous position of the platform.
A system of 9 equations for 9 variables (coordinates of three points on the platform): three equations are the distances between points on the platform and six equations are the distances from fixed points (this is where leg lengths are taken into account).

How about that?

allvalues(solve(f(x) = 0, x, allsolutions));
f := sin(x)/x;
allvalues(solve(f, x, allsolutions));


Draghilev's method  is a numerical-analytical method for solving underdetermined systems of equations.
In this case, we have an analytical solution.

foo := proc (a, b) local x, y; 
x := a^2-b; y := b^2-a; 
x, y, " tests on return" end proc: 
C := foo(6, 3): 
a := `A,B≔`: 
print(a, C[1], C[2], C[3])


For example, such an option

 N := 60; L := 10; a := 2*10^(-12); 
 ns := [.9603, .9647, .9691]; 
 eqn := proc (A) options operator, arrow; ns[i]-1+(N/A+(A*L)^(L/(1-L)))^((1-L)/L)*(2+a*exp((N/A+(A*L)^(L/(1-L)))^(1/L))/(A*L*(N/A+(A*L)^(L/(1-L)))^((L-1)/L)+a*exp((N/A+(A*L)^(L/(1-L)))^(1/L))))/(A*L) end proc:
for i to nops(ns) 
RootFinding:-NextZero(eqn, 1.*10^(-10)) 
end do


U0 := 110; #for instance 
U := U0*exp(-(1/10)*t)*cos(2*t); 
plot(U, t = -25 .. 50); 
restart; U0 := 110; 
U := t-> U0*exp(-(1/10)*t)*cos(2*t); 
plot(U(t), t = -25 .. 50); 


I suspect that we are talking about real solutions.


f := exp(t)+exp(-t^2-2*t); 
g := exp(-t^2)+exp(-t^2-2*t); 
solve([f-g], t); 
plot([f, g], t = -3 .. 3, discont = true, color = [red, blue])


You have one equation with three variables, It has a periodic solution in the form of inclined "tubes". Solution for a single "tube" can be obtained numerically using the Draghilev method, or another numerical method. After that, you can select the desired range for each variable from the resulting set of solutions.
In Maple Pi, not pi.

restart; with(plots):
 f := cos(2*Pi*(x+y-2*z))+cos(2*Pi*(y+z-2*x))+cos(2*Pi*(z+x-2*y)); 
#solve({f, 0 <= x, x <= 1, y <= 1, z <= 1, x < y, y < z}, [x, y, z], explicit);
implicitplot3d(f, x = -.5 .. .5, y = -.5 .. .5, z = -.5 .. .5, axes = normal, numpoints = 5000, color = blue, transparency = .5, style = surface, scaling = constrained, axes = boxed)


I remember that similar questions have already arisen many times.
For example, there is such a technique 

a := `(3*Pi)/10`; print(a)


In this case, this method gives a parametric solution. In the text of the program, the Draghilev method is highlighted in green.
(If satisfied with numerical parameterization, the examples can be very complex. But as far as analytical parameterization is concerned, even in this case, the method can perform an example more complicated.)



  solve(r2,{ksi});  or  fsolve(r2); 

And if just combine "transparency" and "thickness"?
For example

restart: with(plots):
p1:=plot(f1(x),x=0..2,color=red,legend = f1(x)): 
p2:=plot(f2(x),x=0..2,color=blue,legend = f2(x)): 
p3:=plot(f3(x),x=0..2,color=green,thickness = 10, transparency = .7, legend = f3(x)): 


Just in case, search for "Draghilev method" (or Dragilev here: )
The method, in particular, finds continuous solutions of systems with free variables (underdetermined systems of equations).

You can do this:

 a := plot({seq((6*x-2*t)/x^2, t = 1 .. 3)}, x = -1 .. 5, y = -1 .. 6):
 b := plot(3/x, x = 0 .. 5, y = -1 .. 6, color = black, thickness = 3):
 plots[display](a, b)


1 2 3 4 5 6 Page 1 of 6