Kitonum

21550 Reputation

26 Badges

17 years, 122 days

MaplePrimes Activity


These are answers submitted by Kitonum

You have two solutions. I would have written this line without "op" by way:

for i from 1 to 2 do `M`[i]:=subs(sol[i],[0,a,0]) end do;

 

 

Dear Anton!  There is a standard way of saving the results obtained at each step of the loop of your procedure. Before the loop you create an empty list, and then at each step of the loop adding to this list the results according the scheme:  

1) Before the loop  L:=[ ]:

2) In the loop  L:= [ [х(t[i]), y(t[i]), ... ], op(L) ] , where  х(t[i]), y(t[i]), ...  are the results obtained on i_th step of the work of your loop.

If you speak Russian, you can ask your questions on the forum exponenta.ru

combine(sqrt(a+sqrt(b))*sqrt(a-sqrt(b))-sqrt((a+sqrt(b))*(a-sqrt(b)))) assuming a>0,b>0,a>sqrt(b);

                       0

This is called a parametric form of the equation of the line. Read  ?plot/details 

plot([1, 2-x, [0.466667, t, t=-2..1.5]], x=0..3, -2..2);

A:=[1,2]:

B:= [3,4]:

C:= [op(A), op(B)];

That's right (just missing a colon in a row)! As it should be found two solutions.

Normal vector  (a, b, c)  to your plane can be obtained as the solution of the system

solve({a^2+b^2+c^2=1, a*(0-2)+b*(1-(-1))+c*(-2-0)=0, abs(a+2*b+c)/sqrt(1+2^2+1)=1/2});

Normal vector  (a, b, c)  to your plane can be obtained as the solution of the system

solve({a^2+b^2+c^2=1, 5*a-2*b+5*c=0, abs(a-4*b-8*c)/sqrt(1+4^2+8^2)=sqrt(2)/2});

Your statement  2)  " Vector(MH) perpendicular to direction vector a = (2, 1, -1) of (d)"  is false!

Your problem  is no different from the previous plane (3). The procedure P solves the problem for any points A, B, M and numeric d (points should not be collinear).

Procedure code:

restart:

P:=proc(A,B,M,d)

local P,Sol,L,f,L1;

uses RealDomain, LinearAlgebra, ListTools;

if Equal(simplify(CrossProduct(convert(B,Vector)-convert(A,Vector),convert(M,Vector)-

convert(A,Vector))),<0,0,0>) then error `Points A, B, M should not be collinear`; fi;

P:=a*(x-A[1])+b*(y-A[2])+c*(z-A[3]);

Sol:=[solve({subs(x=B[1],y=B[2],z=B[3],P)=0,a^2+b^2+c^2=1,

abs(subs(x=M[1],y=M[2],z=M[3],P))=d},{a,b,c})];

L:=[seq(<rhs(Sol[i,1]),rhs(Sol[i,2]),rhs(Sol[i,3])>,i=1..nops(Sol))];

f:=(x,y)->Equal(simplify(CrossProduct(x,y)),<0,0,0>);

L1:=[Categorize(f, L)]; 

if nops(L1)=0 then print(`The problem has no solutions`); fi;

if nops(L1)=1 then print(`The problem has 1 solution`); print(collect(subs(a=L1[1][1][1],b=L1[1][1][2],c=L1[1][1][3],P),[x,y,z])=0); fi;

if nops(L1)=2 then print(`The problem has 2 solutions`); print(collect(subs(a=L1[1][1][1],b=L1[1][1][2],c=L1[1][1][3],P),[x,y,z])=0); print(collect(subs(a=L1[2][1][1],b=L1[2][1][2],c=L1[2][1][3],P),[x,y,z])=0); fi; 

end proc;

 

As an exapmle see solution the problem  plane (3)

P([-1,3,-6],[2,2,-10],[1,-1,7],3);

Similarly, you can find equation of a plane (4)

That's right! Probably it would look better if you write

 [seq(M[i]=(A + u*t)[i],i=1..3)];

or

{seq(M[i]=(A + u*t)[i],i=1..3)};

or

op([seq(M[i]=(A + u*t)[i],i=1..3)]);

Once posted the previous message, noticed in it one essential disadvantage. The code will not work if the points A, B, N1 are collinear. Therefore, rewrote the code using your idea. The code is simpler, and the result , of course, is the same:

with(LinearAlgebra):

N1:=convert(N1,Vector):

n:=o-N1:  e:=n/simplify(Norm(n,2)):

T:=<x,y,z>-N1:

collect(expand(DotProduct(e,T,conjugate=false)),[x,y,z])=0; #  Equation of the plane P

You have 2 planes: ABN1 and ABN2. Find the equation ABN1. The simplest way to use the determinant. The code (the continuation of the previous code):

 

N1:=convert(N1,Vector):

T:=<x,y,z> - N1: N1-A: N1-B:

P1:=collect(LinearAlgebra[Determinant](< T | N1-A | N1-B >),[x,y,z]):

k:=simplify(sqrt(coeff(P1,x)^2+coeff(P1,y)^2+coeff(P1,z)^2)):

P2:=simplify(collect(P1/k,[x,y,z])):

P:=collect(P2,[x,y,z])=0;  # Equation of the plane P

simplify(coeff(lhs(P),x)^2+coeff(lhs(P),y)^2+coeff(lhs(P),z)^2); # Checking

 

Similarly, we find a second plane.

 

Here is the procedure for you:

primesum:=proc(n::posint)

local S, i;

S:=0;

for i from 1 to n do

if isprime(i) then S:=S+i;  fi;

od;

S;

end proc;

First 286 287 288 289 290 Page 288 of 290