## 271 Reputation

17 years, 181 days

## Trying again...

@Markiyan Hirnyk

Sorry if that was not clear.

Let me try an example in 2 dimensions-there is less typing.

Suppose we have curve C given implicitly by the equation. s^6 + s t^5 + t^8 =1 or some such. Suppose also we have functions x(s,t), y(s,t) given by some equations like x= t cos(s+t^2) , y= s^3-sin(t). Can I plot the curve x(s,t), y(s,t) for (s,t) in C?

My previous example was in 3 variables and I had k(r,a,b) = 0 which defines a surface S.  The function k was complicated: r sqrt(1-r^2)( cos a cos b) etc I  wanted to plot a surface in x,y,z space where x = x(r,a,b) was a bit complicated. Sorry if that was not clear.

## example...

the equation k is x1 x2 - y1 y2 = 1/4  in 4 space variables.

The surface lies on a sphere of radius 1 so x1^2+x2^2+y1^2+y2^2=1.

One cannot plot in 4 space so I wrote x1= r cos a, y1=r sin a,

x2= sqrt(1-r^2) cos b, y2= sqrt(1-r^2) sin b and plugged that in to get a function K(r,a b ) =1/4.

(Note that this reduces the number of variables to 3.)

My intention was then to take the r,a,b values from the implicit3d plot and plot3d those using

x1= r cos a, y1=r sin a,

x2= sqrt(1-r^2) cos b, y2= sqrt(1-r^2) sin b. Hence my question.

I say that I wanted to plot that but there is a simple workaround, namely

I project to R^3 stereographically via
x=x1/(1-y2), y=y1/)1-y2), z=2x2/(1-y2)

Then  I can express k interms of x,y,z  via s = x^2+y^2+z^2, x1= = 2x/(1+s), y1= = 2y/(1+s), y1= = 2z/(1+s), y2=( -1+x^2+y^2+z^2)/(1+s) to get an equation in K(x,y,z) = 1/4 and implicit3d plot that directly.

But since the issue came up I thought I'd ask.

## corrupt copy?...

@Joe Riel Strange. Perhaps I have a corrupt copy. The problem repeats with many variations.
When I enter type(w,Vector) I get false so perhaps that is why w2.w hangs.

## true...

@Carl Love That certainly is easy; thank you.

I was wondering why Maple does not do that automatically.

## I forgot enter the program; here it is....

restart;
with(VectorCalculus):with(LinearAlgebra):
g:=(x,y)->A*x+B*y+a*x^2+b*x*y+c*y^2+d*x^3+h*x^2*y+k*x*y^2+l*y^3;
w2:=Hessian(g(x,y),[x,y]);
w2.w;  # This fails every time

## @Carl Love Also, the local t; can be omi...

@Carl Love Also, the local t; can be omitted:

alpha3:= proc(x::numeric)
evalf(Int(sin(t^3)*cos(t^2), t= 0..x))
end proc:

or even

alpha5:=(x::numeric) -> evalf(Int(sin(t^3)*cos(t^2), t= 0..x)):

Both work but require quotes in dsolve and plot.

## @Carl Love Thank you for pointing out th...

@Carl Love Thank you for pointing out that my post belongs under questions and thank you for answering my question.

Your solution does work. It can be simplified a bit to
alpha2:= proc(x::numeric)
local t;
evalf(Int(sin(t^3)*cos(t^2), t= 0..x))
end proc:

Sol:= dsolve({diff(y(x), x) = 'alpha2(x)'*y(x), y(0)=1}, numeric, known= [alpha2]);

The if statement is replaced by testing the argument with :: numeric and quoting the function in dsolve or when plotting.

Curiously, the if statement and testing the argument with :: numeric both result in a function that Maple cannot differentiate.

BTW, what does numeric signify? How does it differ from realcons or real? I know that "real" is an assumption one can make and "realcons" is a type; how does numeric fit into that lineup?

thanks again

## @Carl Love Thank you for the explanation...

@Carl Love Thank you for the explanation.

Is &where mostly for Maple staff or is it intended to be used by all? If the latter, it would be nice to see examples of its use. The showstat(`&where`) code was far from clear to me. (It referred to local variables only and not to any input as far as I could see.)

## help with help pages...

Hi,

I have searched in vain for information about the expression &where. Can you help?

many thanks

## @Preben Alsholm THank you for your clear...

@Preben Alsholm THank you for your clear explanation of piecewise.

As to Maple "knowing" about laplace I meant that when dsolve is called with  my linear ODE system with constant coefficients and initial conditions it takes what seems like forever to find a solution without my hint (method = laplace). I would think method = laplace might be the default.

## @Carl Love  OK Here is the code. Th...

OK Here is the code. Thx
restart;
Typesetting[Settings](useprime,prime = t);
true, x

R := piecewise(t < 0.1e-7, 57, t > 0.1e-7, 57-48*exp(-t+0.1e-7)/(0.1e-7));

print(`output redirected...`); # input placeholder
R :=  /                                                    -8
|                  57                        t < 1 10
<
|                    9    /         -8\          -8
\ 57 - 4.800000000 10  exp\-t + 1 10  /      1 10   < t

dsolve({diff(y(t), t)-R(t)*y(t)^2 = 0, y(0) = 1}, numeric);
%;
Error, (in unknown) invalid input: `dsolve/numeric/lexorder` expects its 2nd argument, b, to be of type {indexed, name, numeric}, but received piecewise(t < 0.1e-7, 57, 0.1e-7 < t, 57-4800000000.*exp(-t+0.1e-7))

dsolve({diff(y(t), t)-R(t)*y(t)^2 = 0, y(0) = 1}, numeric);
%;
Error, (in unknown) invalid input: `dsolve/numeric/lexorder` expects its 2nd argument, b, to be of type {indexed, name, numeric}, but received piecewise(t < 0.1e-7, 57, 0.1e-7 < t, 57-4800000000.*exp(-t+0.1e-7))

dsolve({diff(y(t), t)-7*y(t) = R(t), y(0) = 1}, numeric);
%;
Error, (in unknown) invalid input: `dsolve/numeric/lexorder` expects its 2nd argument, b, to be of type {indexed, name, numeric}, but received piecewise(t < 0.1e-7, 57, 0.1e-7 < t, 57-4800000000.*exp(-t+0.1e-7))

## That clarifies....

Thanks for the explanation.

TRy these examples: (you might be surprised by the first 2.

cat(x,i);

cat(x,"i");

cat("x",i);
"xi"
StringTools:-Join([x,i]);
"x i"

## much clearer...

Thanks for straightening me out on that.

## try catch???...

Hi,

I have looked at your answer and the try-catch help pages but now I am confused about usage.

I want to do a computation, if possible, but if not-if an error of any type is returned I want to do an alternative computation. For example, I define a (silly) function f that can fail to return  a value for either of 2 reasons and returns different error messages for the 2 values,

restart;
f:=proc(x)
if x=8 then error "bad value" else 1/(7-x) end if
end proc;
f := proc(x)  ...  end;
f(3);
1
-
4
f(8);

f(7);
Error, (in f) numeric exception: division by zero

Now I use try-catch to introduce an alternative.

try
c:=f(8)
catch :
c:=17
end try;
c := 17

Fine!

try
c:=f(7)
catch :
c:=17
end try;
c := 17

Fine again!

At this point I think I understand the basic usuage but ...

try
c:=1/(7-7)
catch:
c:=17
end try;
Error, numeric exception: division by zero
c;
c

Try-catch does not work in this simple situation. Howver, inside a do loop it does work!

restart;
for j from 1 to 10 do
try
b[j]:=1/(7-j)
catch :
b[j]:=17
end try
end do;
b[6];
1
b[7];
17
b[9];
-1
--
2

Here is another situation in which it works as expected:

restart;
try
c:=1/ln(1)
catch:
c:=17
end try;
c := 17
Is there some simple preprocessor that prevents try-catch from working as expected?

 3 4 5 6 7 8 9 Page 5 of 9
﻿