Kitonum

21840 Reputation

26 Badges

17 years, 225 days

MaplePrimes Activity


These are answers submitted by Kitonum

If we look closely at the marks on the t-axis, we see that all the graphs are constructed in a logarithmic scale. I did not understand why this happened, because I did not find the appropriate settings in your document. By default Maple uses a uniform scale on both axes. I just restarted your document and got other graphics that do not cause questions:


 

odeSG := {diff(z(t), t) = (-phi*z(t)*sqrt(F*phi*z(t)/(5*t))/(3*t)+1-H/(1-z(t)))/(phi*(S_oi-S_or-sqrt(F*phi*z(t)/(5*t)))), z(t0) = z0};

{diff(z(t), t) = (-(1/15)*phi*z(t)*5^(1/2)*(F*phi*z(t)/t)^(1/2)/t+1-H/(1-z(t)))/(phi*(S_oi-S_or-(1/5)*5^(1/2)*(F*phi*z(t)/t)^(1/2))), z(t0) = z0}

(1)

solSG := dsolve(odeSG, numeric, method = lsode, parameters = [phi, F, H, S_oi, S_or, t0, z0]);

proc (x_lsode) local _res, _dat, _vars, _solnproc, _xout, _ndsol, _pars, _n, _i; option `Copyright (c) 2000 by Waterloo Maple Inc. All rights reserved.`; if 1 < nargs then error "invalid input: too many arguments" end if; _EnvDSNumericSaveDigits := Digits; Digits := 15; if _EnvInFsolve = true then _xout := evalf[_EnvDSNumericSaveDigits](x_lsode) else _xout := evalf(x_lsode) end if; _dat := Array(1..4, {(1) = proc (_xin) local _xout, _n, _y0, _ctl, _octl, _reinit, _errcd, _fcn, _i, _yini, _pars, _ini, _par; option `Copyright (c) 2002 by the University of Waterloo. All rights reserved.`; table( [( "complex" ) = false ] ) _xout := _xin; _ctl := array( 1 .. 39, [( 1 ) = (1), ( 2 ) = (t0), ( 3 ) = (t0), ( 5 ) = (1), ( 4 ) = (1), ( 7 ) = (0), ( 6 ) = (10), ( 10 ) = (0.1e-6), ( 11 ) = (0), ( 8 ) = (z0), ( 9 ) = (0.1e-6), ( 15 ) = (0), ( 14 ) = (0), ( 13 ) = (0), ( 12 ) = (0), ( 21 ) = (0), ( 20 ) = (0), ( 23 ) = (0), ( 22 ) = (0), ( 16 ) = (0), ( 17 ) = (0), ( 18 ) = (0), ( 19 ) = (0), ( 31 ) = (-1), ( 30 ) = (0), ( 29 ) = (0), ( 28 ) = (0), ( 26 ) = (0), ( 27 ) = (0), ( 24 ) = (0), ( 25 ) = (0), ( 32 ) = (7), ( 33 ) = (0), ( 34 ) = (0), ( 35 ) = (0), ( 37 ) = (0), ( 36 ) = (0), ( 39 ) = (0), ( 38 ) = (0)  ] ); _octl := array( 1 .. 39, [( 1 ) = (1), ( 2 ) = (t0), ( 3 ) = (t0), ( 5 ) = (1), ( 4 ) = (1), ( 7 ) = (0), ( 6 ) = (10), ( 10 ) = (0.1e-6), ( 11 ) = (0), ( 8 ) = (z0), ( 9 ) = (0.1e-6), ( 15 ) = (0), ( 14 ) = (0), ( 13 ) = (0), ( 12 ) = (0), ( 21 ) = (0), ( 20 ) = (0), ( 23 ) = (0), ( 22 ) = (0), ( 16 ) = (0), ( 17 ) = (0), ( 18 ) = (0), ( 19 ) = (0), ( 31 ) = (-1), ( 30 ) = (0), ( 29 ) = (0), ( 28 ) = (0), ( 26 ) = (0), ( 27 ) = (0), ( 24 ) = (0), ( 25 ) = (0), ( 32 ) = (7), ( 33 ) = (0), ( 34 ) = (0), ( 35 ) = (0), ( 37 ) = (0), ( 36 ) = (0), ( 39 ) = (0), ( 38 ) = (0)  ] ); _n := trunc(_ctl[1]); _yini := Array(0..8, {(1) = t0, (2) = z0, (3) = undefined, (4) = undefined, (5) = undefined, (6) = undefined, (7) = undefined, (8) = undefined}); _y0 := Array(0..8, {(1) = t0, (2) = z0, (3) = undefined, (4) = undefined, (5) = undefined, (6) = undefined, (7) = undefined, (8) = undefined}); _fcn := proc (N, X, Y, YP) option `[Y[1] = z(t)]`; if Y[3]*Y[2]*Y[1]/X < 0 then YP[1] := undefined; return 0 end if; YP[1] := (-.149071198499986*Y[2]*Y[1]*evalf((Y[3]*Y[2]*Y[1]/X)^(1/2))/X+1-Y[4]/(1-Y[1]))/(Y[2]*(Y[5]-Y[6]-.447213595499958*evalf((Y[3]*Y[2]*Y[1]/X)^(1/2)))); 0 end proc; _pars := [phi = phi, F = F, H = H, S_oi = S_oi, S_or = S_or, t0 = t0, z0 = z0]; if not type(_xout, 'numeric') then if member(_xout, ["start", "left", "right"]) then return _y0[0] elif _xout = "method" then return "lsode" elif _xout = "numfun" then return trunc(_ctl[24+trunc(_ctl[1])]) elif _xout = "initial" then return [seq(_yini[_i], _i = 0 .. _n)] elif _xout = "parameters" then return [seq(_yini[_n+_i], _i = 1 .. nops(_pars))] elif _xout = "initial_and_parameters" then return [seq(_yini[_i], _i = 0 .. _n)], [seq(_yini[_n+_i], _i = 1 .. nops(_pars))] elif _xout = "last" then if _ctl[2]-_y0[0] = 0. then error "no information is available on last computed point" else _xout := _ctl[2] end if elif _xout = "enginedata" then return eval(_octl, 1) elif _xout = "function" then return eval(_fcn, 1) elif type(_xin, `=`) and type(rhs(_xin), 'list') and member(lhs(_xin), {"initial", "parameters", "initial_and_parameters"}) then _ini, _par := [], []; if lhs(_xin) = "initial" then _ini := rhs(_xin) elif lhs(_xin) = "parameters" then _par := rhs(_xin) elif select(type, rhs(_xin), `=`) <> [] then _par, _ini := selectremove(type, rhs(_xin), `=`) elif nops(rhs(_xin)) < nops(_pars)+1 then error "insufficient data for specification of initial and parameters" else _par := rhs(_xin)[-nops(_pars) .. -1]; _ini := rhs(_xin)[1 .. -nops(_pars)-1] end if; _xout := lhs(_xout); if _par <> [] then `dsolve/numeric/process_parameters`(_n, _pars, _par, _yini) end if; if _ini <> [] then `dsolve/numeric/process_initial`(_n, _ini, _yini, _pars) end if; if _pars <> [] then _par := {seq(rhs(_pars[_i]) = _yini[_n+_i], _i = 1 .. nops(_pars))}; for _i from 0 to _n do _y0[_i] := subs(_par, _yini[_i]) end do; for _i from _n+1 to _n+nops(_pars) do _y0[_i] := _yini[_i] end do else for _i from 0 to _n do _y0[_i] := _yini[_i] end do end if; _octl[2] := _y0[0]; _octl[3] := _y0[0]; for _i to _n do _octl[_i+7] := _y0[_i] end do; for _i to nops(_pars) do _octl[2*_n+30+_i] := _y0[_n+_i] end do; for _i to 39 do _ctl[_i] := _octl[_i] end do; if _Env_smart_dsolve_numeric = true and type(_y0[0], 'numeric') then procname("right") := _y0[0]; procname("left") := _y0[0] end if; if _xout = "initial" then return [seq(_yini[_i], _i = 0 .. _n)] elif _xout = "parameters" then return [seq(_yini[_n+_i], _i = 1 .. nops(_pars))] else return [seq(_yini[_i], _i = 0 .. _n)], [seq(_yini[_n+_i], _i = 1 .. nops(_pars))] end if else return "procname" end if end if; if _xout-_y0[0] = 0. then return [seq(_y0[_i], _i = 0 .. _n)] end if; _reinit := false; if _xin <> "last" then if 0 < 0 and `dsolve/numeric/checkglobals`(0, table( [ ] ), _pars, _n, _yini) then _reinit := true; if _pars <> [] then _par := {seq(rhs(_pars[_i]) = _yini[_n+_i], _i = 1 .. nops(_pars))}; for _i from 0 to _n do _y0[_i] := subs(_par, _yini[_i]) end do; for _i from _n+1 to _n+nops(_pars) do _y0[_i] := _yini[_i] end do else for _i from 0 to _n do _y0[_i] := _yini[_i] end do end if; for _i to _n do _octl[_i+7] := _y0[_i] end do; for _i to nops(_pars) do _octl[2*_n+30+_i] := _y0[_n+_i] end do end if; if _pars <> [] and select(type, {seq(_yini[_n+_i], _i = 1 .. nops(_pars))}, 'undefined') <> {} then error "parameters must be initialized before solution can be computed" end if end if; if not _reinit and _xout-_ctl[2] = 0 then [_ctl[2], seq(_ctl[_i], _i = 8 .. 7+_n)] else if sign(_xout-_ctl[2]) <> sign(_ctl[2]-_y0[0]) or abs(_xout-_y0[0]) < abs(_xout-_ctl[2]) or _reinit then for _i to 39 do _ctl[_i] := _octl[_i] end do end if; _ctl[3] := _xout; if Digits <= evalhf(Digits) then try _errcd := evalhf(`dsolve/numeric/lsode`(_fcn, var(_ctl))) catch: userinfo(2, `dsolve/debug`, print(`Exception in lsode:`, [lastexception])); if searchtext('evalhf', lastexception[2]) <> 0 or searchtext('real', lastexception[2]) <> 0 or searchtext('hardware', lastexception[2]) <> 0 then _errcd := `dsolve/numeric/lsode`(_fcn, _ctl) else error  end if end try else _errcd := `dsolve/numeric/lsode`(_fcn, _ctl) end if; if _errcd < 0 then userinfo(2, {dsolve, `dsolve/lsode`}, `Last values returned:`); userinfo(2, {dsolve, `dsolve/lsode`}, ` t =`, _ctl[2]); _i := 8; userinfo(2, {dsolve, `dsolve/lsode`}, ` y =`, _ctl[_i]); for _i from _i+1 to 7+_n do userinfo(2, {dsolve, `dsolve/lsode`}, `	 `, _ctl[_i]) end do; if _errcd+1. = 0. then if _ctl[14+trunc(_ctl[1])] <> 0 then error "an excessive amount of work was done, maxstep may be too small" else error "an excessive amount of work (greater than mxstep) was done" end if elif _errcd+2. = 0. then error "too much accuracy was requested for the machine being used" elif _errcd+3. = 0. then error "illegal input was detected" elif _errcd+4. = 0. then error "repeated error test failures on the attempted step" elif _errcd+5. = 0. then error "repeated convergence test failures on the attempted step" elif _errcd+6. = 0. then error "pure relative error control requested for a variable that has vanished" elif _errcd+7. = 0. then error "cannot evaluate the solution past %1, maxfun limit exceeded (see ?dsolve,maxfun for details)", evalf[8](_ctl[2]) else error "unknown error code returned from lsode %1", trunc(_errcd) end if end if; if _Env_smart_dsolve_numeric = true then if _y0[0] < _xout and procname("right") < _xout then procname("right") := _xout elif _xout < _y0[0] and _xout < procname("left") then procname("left") := _xout end if end if; [_xout, seq(_ctl[_i], _i = 8 .. 7+_n)] end if end proc, (2) = Array(0..0, {}), (3) = [t, z(t)], (4) = [phi = phi, F = F, H = H, S_oi = S_oi, S_or = S_or, t0 = t0, z0 = z0]}); _vars := _dat[3]; _pars := map(rhs, _dat[4]); _n := nops(_vars)-1; _solnproc := _dat[1]; if not type(_xout, 'numeric') then if member(x_lsode, ["start", 'start', "method", 'method', "left", 'left', "right", 'right', "leftdata", "rightdata", "enginedata", "eventstop", 'eventstop', "eventclear", 'eventclear', "eventstatus", 'eventstatus', "eventcount", 'eventcount', "laxtol", 'laxtol', "numfun", 'numfun', NULL]) then _res := _solnproc(convert(x_lsode, 'string')); if 1 < nops([_res]) then return _res elif type(_res, 'array') then return eval(_res, 1) elif _res <> "procname" then return _res end if elif member(x_lsode, ["last", 'last', "initial", 'initial', "parameters", 'parameters', "initial_and_parameters", 'initial_and_parameters', NULL]) then _xout := convert(x_lsode, 'string'); _res := _solnproc(_xout); if _xout = "parameters" then return [seq(_pars[_i] = _res[_i], _i = 1 .. nops(_pars))] elif _xout = "initial_and_parameters" then return [seq(_vars[_i+1] = [_res][1][_i+1], _i = 0 .. _n), seq(_pars[_i] = [_res][2][_i], _i = 1 .. nops(_pars))] else return [seq(_vars[_i+1] = _res[_i+1], _i = 0 .. _n)] end if elif type(_xout, `=`) and member(lhs(_xout), ["initial", 'initial', "parameters", 'parameters', "initial_and_parameters", 'initial_and_parameters', NULL]) then _xout := convert(lhs(x_lsode), 'string') = rhs(x_lsode); if type(rhs(_xout), 'list') then _res := _solnproc(_xout) else error "initial and/or parameter values must be specified in a list" end if; if lhs(_xout) = "initial" then return [seq(_vars[_i+1] = _res[_i+1], _i = 0 .. _n)] elif lhs(_xout) = "parameters" then return [seq(_pars[_i] = _res[_i], _i = 1 .. nops(_pars))] else return [seq(_vars[_i+1] = [_res][1][_i+1], _i = 0 .. _n), seq(_pars[_i] = [_res][2][_i], _i = 1 .. nops(_pars))] end if elif type(_xout, `=`) and member(lhs(_xout), ["eventdisable", 'eventdisable', "eventenable", 'eventenable', "eventfired", 'eventfired', "direction", 'direction', NULL]) then return _solnproc(convert(lhs(x_lsode), 'string') = rhs(x_lsode)) elif _xout = "solnprocedure" then return eval(_solnproc) elif _xout = "sysvars" then return _vars end if; if procname <> unknown then return ('procname')(x_lsode) else _ndsol; _ndsol := pointto(_dat[2][0]); return ('_ndsol')(x_lsode) end if end if; try _res := _solnproc(_xout); [seq(_vars[_i+1] = _res[_i+1], _i = 0 .. _n)] catch: error  end try end proc

(2)

solSG(parameters = [.1, 1, .1, 1, .1, 0.1e-3, 0]);

[phi = .1, F = 1., H = .1, S_oi = 1., S_or = .1, t0 = 0.1e-3, z0 = 0.]

(3)

NULL

Loading plots

plots:-odeplot(solSG, t = 0.1e-3 .. 10);

 

plots:-odeplot(solSG, t = 0.1e-3 .. 1);

 

plots:-odeplot(solSG, t = 0.1e-3 .. .1);

 

NULL


 

Download schechter_guo_v2_new.mw

In your code there are two "if", but only one "end if" .  Also what means  epsilon^() ?

The last initial condition  limit(diff((diff(f(x), x))/x, x), x = 0) = 0  follows from two conditions  D(f)(0)=0  and  (D@@2)(f)(0)=0 . But then the equation is obtained overdetermined (5 conditions instead of 4)  and Maple shows an error. The equation can be solved with the condition  D(f)(0)=0  and not very high accuracy:

restart;
ode := x^3*(diff(f(x), x, x, x, x))+alpha*(x^4*(diff(f(x), x, x))+x^3*(diff(f(x), x, x))-x^2*(diff(f(x), x)))-2*x^2*(diff(f(x), x, x, x))+3*x*(diff(f(x), x, x))-3*(diff(f(x), x))+R*x*f(x)^2-R*x^2*(diff(f(x), x, x))*(diff(f(x), x))-3*R*x*f(x)*(diff(f(x), x, x))+3*R*f(x)*(diff(f(x), x))+x^2*R*f(x)*(diff(f(x), x, x, x))-M^2*(x^3*(diff(f(x), x, x, x))-x^2*(diff(f(x), x))) = 0:
ics := f(0) = 0, f(1) = 1, D(f)(1) = 0, D(f)(0)=0:
sol:=dsolve(eval({ode, ics},[alpha=1,R=2,M=3]), method=bvp[midrich],numeric, maxmesh=1000, abserr=10^(-3));
plots:-odeplot(sol, [x,f(x)], x=0..1, color=red); 

                        


 

Edit.

f:=(R,h,l)->[(1/3)*Pi*R^2*h, Pi*R*l, Pi*R^2+Pi*R*l]:

Examples of use:

f(3,4,5);
map(t->f(t[]), L);
                          

You do not need any loops. See this toy example:

A:=Matrix([[["BrakePower", "BrakePower"], [2.356, 2.356], [2.749, 2.749], [3.142, 3.142], [3.534, 3.534], [3.927, 3.927], [4.32, 4.32]], [["BrakePower", "S2"], [2.356, .303], [2.749, .271], [3.142, .256], [3.534, .249], [3.927, .244], [4.32, .241]], [["BrakePower", "S4"], [2.356, .256], [2.749, .225], [3.142, .211], [3.534, .205], [3.927, .2], [4.32, .197]]]):
y := a*x^2+b*x+c:
CurveFitting[LeastSquares](convert(A[1,2..-1], list), x, curve = y);

 

For your "polynomial" you can do so:

norm(subs(1.25=125, aa), infinity);


Here is a more general method that is suitable for a "polynomial" with any number of terms with fractional exponents:

max(abs~(map(p->`if`(type(evalf(op(1,p)),numeric),op(1,p),1),[op(aa)]))[]);
 


Edit.

Should be  s:=s+i  instead of  s:=s+a[i]

Doubt_on_list_new.mw

Explanation:  i  is a member of the list  , and  a[i]  is the member of the list  a standing at  i_th place.

f:=x->1/(1+x^2):
f1:=[[0,f(0)], [1/3,f(1/3)]]:
f2:=[[1/3,f(1/3)], [2/3,f(2/3)]]:
f3:=[[2/3,f(2/3)], [1,f(1)]]:
plot([f(x), f1, f2, f3], x=0..1, color=[red,blue,green,black], view=[0..1,0..1], legend=['f','f1','f2','f3']);


In your question, you wrote  f(x)=1/1+x^2. But this is just  f(x)=1+x^2 . Therefore, I assumed that the parentheses are omitted.


Addition. If you want all functions to be plotted on the same interval  0 .. 1 , then do so:

f:=x->1/(1+x^2):
g:=(x1,y1,x2,y2)->y1+(y2-y1)*(x-x1)/(x2-x1):
f1:=g(0,f(0),1/3,f(1/3)):
f2:=g(1/3,f(1/3),2/3,f(2/3)):
f3:=g(2/3,f(2/3),1,f(1)):
plot([f(x), f1, f2, f3], x=0..1, color=[red,blue,green,black], view=[0..1,0..1.2], legend=['f','f1','f2','f3']);


Edit.
 

Should be

plot(eval([(exp((1/2)*x))*((1/2)*x+2*t*(1/3)), (exp((1/2)*x))*(1+t((-256)+240-108+27)/2^7+t(168-24+27)^2/2^7+(1/3)*t^3*((-16)+9)/2^6+(1/4)*t^4/2^7), (exp((1/2)*x))*(1+t(256*(-1.01)+240*(-1.01)^2+108*(-1.01)^3+27*(-1.01)^4)/2^7+t(168*(-1.01)^2+24*(-1.01)^3+27*(-1.01)^4)^2/2^7+(1/3)*t^3*(16*(-1.01)^3+9*1.01^4)/2^6+(1/4)*t^4*(-1.01)^4/2^7)], t=5), x = -4 .. 4);


Edit.

This can be done in several ways. The shortest one:

G := {A=exp1, B=exp2}:
assign(G);

A, B;

                                      exp1, exp2

If  alpha  occurs not in one, but in several places at once, then it is more convenient to use freeze  and  thaw commands.

Example:

restart;
expr:=-sin(alpha)*(sin(theta1)*cos(theta)-cos(theta1)*sin(theta))+2*cos(alpha)*sin(theta)*cos(theta):
combine(subs([sin(alpha)=freeze(sin(alpha)), cos(alpha)=freeze(cos(alpha))], expr)):
thaw(%);

                              sin(alpha)*sin(-theta1+theta)+cos(alpha)*sin(2*theta)

Obviously this is a bug. The problem (assuming all variables should be binary) is easily solved by simple code in a for loop:

Max:=-infinity:
for x__1 from 0 to 1 do
for x__2 from 0 to 1 do
for x__3 from 0 to 1 do
for x__4 from 0 to 1 do
for x__5 from 0 to 1 do
if 3*x__1+5*x__2+6*x__3+2*x__4+x__5 <= 10 then M:=3*x__1+14*x__2+18*x__3+6*x__4+2*x__5;
if M>Max then S:=[[x__1,x__2,x__3,x__4,x__5], M]; Max:=M fi;fi;
od: od: od: od: od:
S;

                                                  [[0, 0, 1, 1, 1], 26]


Here's another way to solve the same problem (more compact method suitable for more variables):

P:=combinat:-permute([0$5,1$5], 5):
Z:=(x__1,x__2,x__3,x__4,x__5) -> 3*x__1+14*x__2+18*x__3+6*x__4+2*x__5:
f:=(x__1,x__2,x__3,x__4,x__5) -> 3*x__1+5*x__2+6*x__3+2*x__4+x__5:
[seq(`if`(f(p[])<=10, [p, Z(p[])], NULL), p=P)]:
sort(%, (a,b)->a[-1]>b[-1])[1];

                                                   [[0, 0, 1, 1, 1], 26]


The third workaround is Mariusz Iwaniuk's way from here to increase  Digits :

restart;
Digits:=20:
Optimization:-LPSolve(3*x__1+14*x__2+18*x__3+6*x__4+2*x__5, {3*x__1+5*x__2+6*x__3+2*x__4+x__5 <= 10}, x__1 = 0 .. 1, x__2 = 0 .. 1, x__3 = 0 .. 1, x__4 = 0 .. 1, x__5 = 0 .. 1, assume=binary, maximize);

                           [26, [x__1 = 0, x__2 = 0, x__3 = 1, x__4 = 1, x__5 = 1]]

 

Edit.

Maybe you want it:

A:=Matrix(2, 2, {(1, 1) = (1/6)*sqrt(3)+(1/2)*I, (1, 2) = (1/6)*sqrt(3)-(1/2)*I, (2, 1) = (1/6)*sqrt(3)-(1/2)*I, (2, 2) = (1/6)*sqrt(3)+(1/2)*I});
A1:=(sqrt(3)/6)%*(Matrix(2,(i,j)->Re(A[i,j]))/(sqrt(3)/6))%+((1/2)%*(Matrix(2,(i,j)->A[i,j]-Re(A[i,j]))/(1/2)));   
# Or
A2:=(sqrt(3)/6)%*(Matrix(2,(i,j)->Re(A[i,j]))/(sqrt(3)/6))%+((1/2)%*(Matrix(2,(i,j)->Im(A[i,j]))/(1/2))%*I);

              

 

 

 

If you want to calculate the values of an expression for different values of a variable, it is convenient to immediately specify it as a function, and not as an expression. Then in the future it will be very easy to calculate the value of this function symbolically or numerically.

Your example:
f := x->2*sin(x)-x^2/10:
f(5),  f(5.);
                                   
2*sin(5)-5/2,  -4.417848549                    

Here are 3 ways to solve the problem by an example.

The problem: find the smallest root of equation  sin(100*x)+0.1*x=0  in the range  1 .. 2 . In this range there are several dozen roots.

The first way by  fsolve  command. Using  plot  command, we reduce the range to a single root:

restart;
eq:=sin(100*x)+0.1*x=0:
fsolve(sin(100*x)+0.1*x=0, x = 1 .. 2);
plot(lhs(eq), x = 1 .. 2);
plot(lhs(eq), x = 1 .. 1.1);
fsolve(lhs(eq), x = 1 .. 1.02);


The second way by  RootFinding:-Analytic  command, which provides all the real and complex roots in the range  re=1..2, im=-1..1  and we select the smallest real one:

[RootFinding:-Analytic(lhs(eq), re=1..2, im=-1..1)];
min(%);


The third way by  Student:-Calculus1:-Roots  command, which provides all the real roots in this range and we select the smallest one:

evalf(Student:-Calculus1:-Roots(lhs(eq), x = 1 .. 2));
min(%);




 

 

First 139 140 141 142 143 144 145 Last Page 141 of 292