============================================================================== SECTION A, QUESTION 1 ===================== %% auxiliary function to find f(x,y,p) (note we make (x,y) into a vector x): f1.m ---- function z=f1(x,p) z=-sin(x(1)+2*x(2)+p)^2/(1+x(1)^2+2*x(2)^2); %% function to fund the minimum: f2.m ---- function z=f2(p) z=fminsearch(@f1,[0;0],[],p) %% commands to plot the graph, taking p from 0 to 10: f3.m ---- p=[0:0.1:10] x=zeros(size(p)); y=zeros(size(p)); for i=1:size(p,2) z=f2(p(i)); x(i)=z(1); y(i)=z(2); end plot3(p,x,y) ============================================================================== SECTION A, QUESTION 2 ===================== a:=(x-2)/3; b:=exp(-x)*sin(x)/(1+x^2); A1:=int( a-b, x=fsolve(a=b,x=-2)..fsolve(a=b,x=-1) ); A2:=int( b-a, x=fsolve(a=b,x=2)..fsolve(a=b,x=-1) ); ============================================================================== SECTION A, QUESTION 3 ===================== % range of x is -1 to 3 % range of y is 1 to 5 dblquad(ff,-1,3,1,5) % here ff defined as follows: ff.m ---- function z=ff(x,y) z=zeros(size(x)); for i=1:size(z,1) for j=1:size(z,2) if (x(i,j)-1)^2+(y-3)^2<4 & y>x(i,j) z(i,j)=cos((x(i,j)-2)/(y+2) - (y-2)/(x(i,j)+2)); end end end ============================================================================== SECTION A, QUESTION 4 ===================== with(LinearAlgebra); M:=<<1,2,4>|<-1,4,4>|<-2,3,0>>; Eigenvalues(M); r1:=RowSpace(M-2*IdentityMatrix(3)); r2:=RowSpace(M-4*IdentityMatrix(3)); tem:=a1*r1[1]+a2*r1[2]-a3*r2[1]-a4*r2[2]; solve( {tem[1]=0,tem[2]=0,tem[3]=0} , {a1,a2,a3} ); %% suppose get answer a3=xx (it will be a function of a4) int:=xx*r2[1]+a4*r2[2]; %% this is the intersection, it will be of the form a4*some_vector % you would have thought you could be more clever than this.... ============================================================================== SECTION A, QUESTION 5 ===================== f:=x^2/4+b*sin(x)/(4+x); df:=diff(f,x); solve( subs(x=Pi,df)-subs(x=-Pi,df)=0, b); %% suppose get answer b=xx f1:=subs(b=xx, f); g:=piecewise( x>-3*Pi and x<-Pi, subs(x=x+2*Pi,f), x>-Pi and x<Pi, subs(x=x+2*Pi,f), x>Pi and x<3*Pi, subs(x=x-2*Pi,f) ); plot(g,x=-3*Pi..3*Pi); ============================================================================== SECTION B, QUESTION 1 ===================== a) function z=checksit(A) d=sqrt((A(1,1)-A(2,1))^2+(A(1,2)-A(2,2))^2); if d+A(2,3)<A(1,3) z=1; elseif d+A(1,3)<A(2,3) z=2; elseif d==abs(A(2,3)-A(1,3)) || d==A(2,3)+A(1,3) z=3; elseif d>abs(A(2,3)-A(1,3)) & d<A(2,3)+A(1,3) z=4; else z=5; end %%%% b) function B=findcircs(A) n=size(A,1); % number of circles m=zeros(n,1); % row i of m counts how many circles intersect circle i % go through all pairs of circles and count intersections for i=1:(n-1) for j=(i+1):n if checksit([A(i,:);A(j,:)])==4 m(i)=m(i)+1; m(j)=m(j)+1; end end end % build the answer M=max(m) B=[]; for i=1:n if m(i)==M B=[B;A(i,:)]; end end ============================================================================== SECTION B, QUESTION 2 ===================== a) two options: findbest:=proc(x,n) local q; q:=evalf(x*n); if frac(q)<1/2 then return(floor(q)/n) else return(floor(q+1)/n) end if; end proc; findbest:=proc(x,n) local q; q:=round(x*n); return(q/n); end proc; b) findapps:=proc(x,D) local q,app,n,ans; app:=findbest(x,1); ans:=app; for n from 2 to D do q:=findbest(x,n); if abs(evalf(x-q))<abs(evalf(x-app)) then app:=q; ans:=ans,q; end if; end do: return(ans); end proc; c) It is a problem with Digits !! ============================================================================== SECTION B, QUESTION 3 ===================== a) auxiliary function in file f.m function z=f(x,p) z=x^2-5-p*sin(x); to get the graph: p1=[0:0.1:10]; % p's starting from zero going up a1=zeros(size(p1)); % the upper solution for p's in p1 b1=zeros(size(p1)); % the lower solution for p's in p1 p2=[0:(-0.1):(-10)]; % p's starting from zero going down a2=zeros(size(p2)); % the upper solution for p's in p2 b2=zeros(size(p2)); % the lower solution for p's in p2 a1(1)=sqrt(5); b1(1)=-sqrt(5); a2(1)=sqrt(5); b2(1)=-sqrt(5); % get the solutions, starting from p=0 and going up: for i=2:size(p1,2) a1(i)=fzero(@f,a1(i-1),[],p1(i)); b1(i)=fzero(@f,b1(i-1),[],p1(i)); end % get the solutions, starting from p=0 and going down: for i=2:size(p2,2) a2(i)=fzero(@f,a2(i-1),[],p2(i)); b2(i)=fzero(@f,b2(i-1),[],p2(i)); end % make the graph hold on plot(p1,a1) plot(p1,b1) plot(p2,a2) plot(p2,b2) b) This is not so easy. As p increases there are more and more x's. But since |sin(x)|<1 we have x^2 < 5+|p| giving |x| < sqrt(5+|p|). For p=100 this gives |x|<10.25. The x's in the picture for p=100 are near -2\pi,-\pi, 0, \pi, 2\pi, 3\pi. This makes sense as to get a solution with p big we will need sin(x) small (i.e. near a multiple of pi). The following program does _quite_ well. It exploits the behavior of fsolve in Maple - if fsolve is asked to find a root in a specific range, it will not seek out of this range. But if it is asked to find a root near a specific point, it interprets "near" as flexible. But as a result, the program often reports pairs of roots as single roots. So - for example - it fails from p=15 to p=34, giving only 3 roots not 4 in this range. There are various ways it can be fixed up, maybe I will write down one sometime - the hallmark of a bad answer is that the number of roots comes out odd, not even. findxs:=proc(p) local x,n,i; x:=fsolve(x^2=5+p*sin(x),x=0..Pi),fsolve(x^2=5+p*sin(x),x=-Pi..0); n:=floor(sqrt(5+abs(p))/Pi); for i from -n to n do x:=x,fsolve(x^2=5+p*sin(x),x=i*Pi) end do; return({x}); end proc; ==============================================================================
Back to course homepage
Back to my teaching homepage
Back to my homepage