DirectionFieldPlot[]
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1242] DirectionFieldPlot[]
- From: Xah Y Lee <xyl10060 at fhda.edu>
- Date: Fri, 26 May 1995 05:50:05 -0400
Hello, here is a little crude program that plot direction field.
---------------------------
FieldPlot::usage = "FieldPlot[ f[x,y], {x,xMin,xMax,(dx)},
{y,yMin,yMax,(dy)},
(LineLength->1)] Plots the direction field of a scaler function f[x,y].";
Clear[unitV, FieldPlot]
unitV[{x_,y_}] := {x,y}/Sqrt[x^2+y^2]
Options[FieldPlot] = {LineLength->Automatic};
FieldPlot[ fun_, {xmin_,xmax_,dx_:Automatic}, {ymin_,ymax_,dy_:Automatic},
opts___Rule]:=
Module[{ll,i,j,dx2,dy2, gridList, slopeList, gp},
ll = LineLength /. {opts} /. Options[FieldPlot];
If[dx===Automatic, dx2 = (xmax-xmin)/9, dx2 = dx];
If[dy===Automatic, dy2 = (ymax-ymin)/9, dy2 = dy];
If[ll===Automatic, ll = (dx2+dy2)/2 .9];
gridList =
N@Flatten[ Table[{i,j},
{i,xmin,xmax,dx2},{j,ymin,ymax,dy2}], 1];
slopeList = N@fun[Sequence@@#]& /@ gridList;
slopeList = slopeList /. m_/;NumberQ[m]->{1,m};
slopeList = gridList + ll * (unitV/@ slopeList);
gp = { MapThread[Line[{#1,#2}]& , {gridList, slopeList}],
Point /@ gridList};
Show[
Graphics[{Hue[0.],PointSize[.01], gp }, Axes->True,
AspectRatio->Automatic]
]
]/; NumberQ[N@xmin] && NumberQ[N@xmax] && NumberQ[N@ymin] &&
NumberQ[N@ymax]
FieldPlot[
expr_,{x_,xmin_,xmax_, dx_},{y_,ymin_,ymax_, dy_}, opts___Rule ]:=
FieldPlot[Function[{x,y},expr],{xmin,xmax,dx},{ymin,ymax,dy},opts];
FieldPlot[
expr_,{x_,xmin_,xmax_},{y_,ymin_,ymax_}, opts___Rule ]:=
FieldPlot[Function[{x,y},expr],{xmin,xmax},{ymin,ymax},opts];
----------------------------------
Example,
FieldPlot[ x^2-y, {x,-4,4,.5},{y,-4,4,.5}]
one can also use the package PlotField.m. For example,
Needs["Graphics`PlotField`"]
PlotVectorField[ unitV[{1,x^2-y}] , {x,-4,4},{y,-4,4},
Axes->True, ColorFunction->Hue
]
Xah 74631.731 at compuserve.com
Quote of the day:
Your nonsense is as good as mine. --Metamathematician of metaland.