星期二, 八月 29, 2006

Cool Tips:Mathematica Notebook 输出文本控制

Mathematica里的文本输出是Print方法。
在Mathematica里,文本的被抽象为text和Form.
标准的对象构造方法为:Text.
Show[Graphics[Text["hi",{10,10}]]]


可以控制字体各种属性的构造方法为: StyleForm
StyleForm["2005 Year",
FontSize -> 24, FontWeight -> "Bold", FontColor ->
RGBColor[1, 0, 0],Background->GrayLevel]];

输出大字:2005 Year

StyleForm是最常用的用来控制艺术文字输出的。
但有时侯需要输出格式化的数学公式之类的,就需要用其他的Form
StyleForm的标准构造如下。
StyleForm[expr, options]
其中expr可以接受表达式的输入。
比如输出一个数学公式,需要用M的函数StandForm来格式化。
values=BesselJ[5,Range[20]];
ListPlot[values, PlotLabel -> StyleForm[
StandardForm[1/x^2],
FontSize -> 24, FontWeight -> "Bold", FontColor -> RGBColor[
1, 0, 0], Background -> GrayLevel[0.5]]]
得到如图:


Graphics有两个Hook方法.Prolog和Epilog分别是在绘画主图前和后调用来产生图形同主图形
透视的函数。
比如想在一个圆点内写上字,就应该如下:
Show[Graphics[{{PointSize[.075], RGBColor[1, 0, 0], Point[{0, 0}]}}], Epilog -> Text["1", {0, 0}, TextStyle -> {FontSize -> 24, FontStyle -> "BOLD", FontColor -> RGBColor[0, 1, 0]}]];

星期一, 八月 28, 2006

Mathimatica 里notebook的环境问题。

为了解决插值问题,简单几个语句,竟然无法得出正确的结果:
data={7,2,3,25,1,10};
f = InterpolatingPolynomial[data, x];
f
f /. x -> 5

得到一个很奇怪的结果。如图。
















经过在组里询问:mathgroup@smc.vnet.net 和GroupGroup.
http://groups.google.com/group/comp.soft-sys.math.mathematica
得到BOB及其他答案,认为是Mathemathica 的kernel不"干净"需要重新启动Mathematica 再看看。
最终。使用bob的方法。
:
data={7,2,3,25,1,10};
Clear[f];
f[x_]=InterpolatingPolynomial[data,x];
f[5]

终于得到正确的答案1

而且最近 被Mathematica的变量的范围问题(Variable Scope)弄的头大,
根据手册,Module和Block申明的变量应该是在外面不可见的。
但输入函数中的变量依然可以被看见,这就导致了,循环调用函数的时候,外部的
For 循环计数器同函数内部的变量冲突了。
Damned

星期六, 八月 26, 2006

Sun有发布两个新的服务网站,很不错

Javascript Development Center.
http://java.sun.com/javascript/

Development Services
http://developers.sun.com/services/

星期五, 八月 25, 2006

如何显示点图和连线图,在Mathematica 5

data = Import["E:/ebook/彩票数据/2006兰色球.txt", "TABLE"];
g1 = ListPlot[data, ImageSize -> {640,
480}, AxesLabel -> {"序号", "兰色球"}, PlotStyle -> {
PointSize[.04], RGBColor[1, 0, 0]}, PlotJoined -> True,
AxesOrigin -> {0, 0}](*好的*);
g2 = ListPlot[data, ImageSize -> {640,
480}, AxesLabel -> {"序号", "兰色球"}, PlotStyle -> {
PointSize[.04], RGBColor[1, 0, 0]}, PlotJoined -> False,
AxesOrigin -> {0, 0}](*好的*);

Show[g1,g2];

星期四, 八月 24, 2006

Mathematica 中的插值(Interpolation)函数及使用

Mathematica 支持所有的数学插值概念,比如拉格朗日(lagrange) 插值,牛顿(newTon)插值.
及其他插值方法。
各种插值方法:http://mathworld.wolfram.com/Interpolation.html
参考数值积分:http://mathworld.wolfram.com/NumericalIntegration.html


使用拉格朗日(lagrange) 插值的函数为InterpolatingPolynomial
参考: http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html
最后的结果用Newton-Cotes formula 牛顿-科茨公式形式

NewTon插值没有实现可以参看一个实现:
http://math.fullerton.edu/mathews/n2003/NewtonPolyMod.html
或这里:http://mathworld.wolfram.com/NewtonsDividedDifferenceInterpolationFormula.html



f = Interpolation[lsdata[[All, {3, 4, 5, 6, 7, 8, 9}]][[1]]]
f[4]

NumericalMath`PolynomialFit`
InterpolatingPolynomial[lsdata[[All, {3, 4, 5, 6, 7, 8}]][[1]], x]
N[f /. x -> 3]
(*freeze lock*)
InterpolatingPolynomial[lsdata[[All, {3, 4}]], x]
(*dead*)

星期一, 八月 21, 2006

Mathematica 图形IO接口

打开一个文件选择:
两种方法:
4.0之后,Mathematica 提供函数包 <FileBrowse
选择文件后,返回选择的文件完全路径

比如打开一个Access数据库,需要用户选择文件所在目录
Needs["DatabaseLink`"]
(*DatabaseExplorer[]*)
conn= OpenSQLConnection[JDBC["sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="<>Experimental`FileBrowse[]], "Name" -> "test",
"Description" -> "", "Username" -> "root", "Password" -> "",
"RelativePath" -> False, "Version" -> 1]

二,使用Java来编写一个跨平台的FileChooser
Needs["JLink`"]

FileChooserDialog[] := FileChooserDialog["Select a file:", "Open", Directory[]]

FileChooserDialog[title_String, okText_String, dir_String] :=
JavaBlock[
Module[{dlg, chosenFile, result = Null},
InstallJava[];
dlg = JavaNew["javax.swing.JFileChooser"];
dlg@setCurrentDirectory[JavaNew["java.io.File", dir]];
dlg@setDialogTitle[title];
If[dlg@showDialog[Null, okText] === JFileChooser`APPROVEUOPTION,
chosenFile = dlg@getSelectedFile[];
If[chosenFile =!= Null,
result = chosenFile@getPath[]
]
];
result
]
]
In[1]:=FileChooserDialog[]
返回选择文件路径。

星期六, 八月 19, 2006

Mathematica 有关微积分的函数包

Calculus`VariationalMethods`

里面包括Euler(?Lagrange) 方程的应用。

看到这里。我想得出 数学模型的建立和 数论之间的关系。

由此得出了,要想把模型建立的纯熟,<<数值分析>>Numerical Analysis的教材是必须要学习的。

所以 下载了一些教材。这里是老外的教材下载.
http://william.wang.googlepages.com/Numerical Analysis.rar

星期一, 八月 14, 2006

金山词霸 2005 XP 不能取词原因

必须保证XP的服务:
DCOM 服务器进程启动器
已经启动。

第二可能同数据执行保护(DEP)有关

微软提供的新功能??数据执行保护(DEP)惹的祸,要出现这个问题,需要满足以下两个条件:
1、系统支持数据执行保护(DEP)功能,目前知道2003sp1支持,估计XP sp2也支持
2、CPU支持硬件DEP,我的AMD Athlon64 2800+就有这个问题,而Athlon 1600+没有,单位的P4 2.66也没有。
(得到的结论就是:Athlon64支持硬件DEP。不支持硬件DEP的在设定DEP的界面有提示,说只能执行软件DEP云云。再给我偏爱的AMD做一次广告!)

解决办法:
我的电脑(鼠标右键)??〉属性??〉高级??〉性能(设置)??〉数据执行保护??〉添加金山词霸的主文件

需要重启系统才能生效

星期六, 八月 12, 2006

Mathematica 数据类型转换

如何把一个数字字符串,转换为数字?

方法:
使用ToExpression [expr]

比如:"33",使用
b=ToExpression["33"]
Head@b执行后得到:
Integer

非常隐秘的方法。

星期五, 八月 11, 2006

Mathematica 中的数据类型判断

如何判断一个变量的数据类型?

两种方法。
1.用Head方法
Head@变量名字.
如同Java InstanceOf,
2.用Q族方法。
NumberQ
NumericQ
IntegerQ
EvenQ
OddQ
PrimeQ;
ArrayQ
VectorQ
MatrixQ (for these there are nice element tests too)
PolynomialQ (element tests). There are built in "structural" tests
SameQ
UnsameQ
OrderedQ
MemberQ
FreeQ
MatchQ
ValueQ
AtomQ

星期四, 八月 10, 2006

Mathematica 快速访问 MS Access数据库

(*注意红色URL写法*)

Needs["DatabaseLink`"]
(*DatabaseExplorer[]*)
conn= OpenSQLConnection[JDBC["sun.jdbc.odbc.JdbcOdbcDriver", "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\lottery\history.mdb"], "Name" -> "test",
"Description" -> "", "Username" -> "root", "Password" -> "",
"RelativePath" -> False, "Version" -> 1]

星期五, 八月 04, 2006

Mathematica 一些表达式语法

1.单值函数调用 用 @ 符号

2.字符串连接用<> 符号. "ddd"<>"bbb" 得到 dddbbb

3.函数返回值。 最后一个表达式的结果 默认为函数的结果。

星期三, 七月 26, 2006

Mathematica 中如何使用数据库?

http://documents.wolfram.com/mathematica/Add-onsLinks/DatabaseLink/

Needs["DatabaseLink`"]
DatabaseExplorer[]

1.如何把数据库的JDBC的驱动加入?
把JDBC的jar文件复制到Mathematica DataBaseResource 属性location 指定的目录下。如图





2.这样就可以建立了DatabaseResource资源了,然后就可以在notebook程序中使用了。
使用语法,如果熟悉ODBC或JDBC就非常容易理解了。

Needs["DatabaseLink`"]
(*DatabaseExplorer[]*)
conn= OpenSQLConnection[JDBC["org.gjt.mm.mysql.Driver", "jdbc:mysql://10.2.5.240:3306/HK_PCD55"], "Name" -> "test",
"Description" -> "", "Username" -> "root", "Password" -> "",
"RelativePath" -> False, "Version" -> 1]
(*建立连接,也可以通过配置文件的方式来设置,可参看具体的http://documents.wolfram.com/mathematica/Add-onsLinks/DatabaseLink/DatabaseConnections/EstablishingAConnection/DatabaseLink2.2.1.html*)
SQLSelect[conn,"att_L_LeaveType"]
SQLExecute[conn,"select * from att_L_LeaveType"]
CloseSQLConnection[conn]

可以通过:JDBCDriverNames[] 来得到当前Mathematica内所有的配置数据库
得到某个具体的数据源的具体配置通过命令: J
DBCDrivers["mysql"]

星期一, 七月 17, 2006

如何用HTML来显示对应UTF-8的汉字?

HTML默认支持Unicode的方式是UTF-8编码。
所以任何Unicode字符集的 字体要用HTML表示出来,必须得到对应的UTF-8编码。

比如符号:? 对应的Unicode的字符集合编码为:A87C.
但是对应的UTF-8的编码就为:8525(十六进制)
所以用HTML来表示就为 &#x2585;
显示出来:?
注意:要根据原来UNICODE字符集合的高低位顺序确定HTML的字节表示方法。
UTF-8根据:低位->高位来表示字符顺序

Encoding Representation
UTF-8 EF BB BF
UTF-16 Big Endian FE FF
UTF-16 Little Endian FF FE
UTF-32 Big Endian 00 00 FE FF
UTF-32 Little Endian FF FE 00 00

星期日, 七月 09, 2006

Mathematica 5.0 All 关键词的妙用

lotterydata={
{12,13,17,19,29,30,32,2006001},
{02,13,14,23,32,34,35,2006002},
{03,08,09,13,29,31,35,2006003},
{06,09,16,23,31,33,34,2006004},
{11,12,21,23,26,30,34,2006005},
{06,07,09,18,20,22,28,2006006},
{01,04,05,07,09,17,24,2006007},
{03,17,18,20,22,31,35,2006008},
{04,05,07,15,17,19,28,2006009},
{02,06,15,20,26,32,35,2006010},
{02,04,06,11,23,24,32,2006011},
{04,06,09,13,24,31,35,2006012},
{05,06,07,22,25,26,30,2006013},
{07,17,18,19,23,28,32,2006014},
{04,09,17,19,22,24,35,2006015},
{13,16,20,23,25,26,33,2006016},
{01,02,06,10,12,19,25,2006017},
{01,02,06,15,16,31,34,2006018},
{15,17,22,23,24,33,35,2006019}}
lotterydata[[All,3]](*取出每一纬第3个数据*)
得到结果:{17,14,9,16,21,9,5,18,7,15,6,9,7,18,17,20,6,6,22}

星期五, 七月 07, 2006

Java Headless 测试代码for jdk >1.3

import java.awt.*;
import java.io.*;
import java.awt.print.*;

import javax.imageio.*;
import java.io.*;
import java.util.logging.*;
import java.awt.image.BufferedImage;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Color;
import java.awt.Font;
import javax.imageio.ImageIO;
import java.awt.font.*;
import java.awt.geom.*;
import javax.naming.*;

public class HeadlessBasics
{
public static void main(String[] args) throws Exception
{
// Set system property.
// Call this BEFORE the toolkit has been initialized, that is,
// before Toolkit.getDefaultToolkit() has been called.
System.setProperty("java.awt.headless", "true");

// This triggers creation of the toolkit.
// Because java.awt.headless property is set to true, this
// will be an instance of headless toolkit.
Toolkit tk = Toolkit.getDefaultToolkit();
// Standard beep is available.
tk.beep();

// Check whether the application is
// running in headless mode.
GraphicsEnvironment ge =
GraphicsEnvironment.getLocalGraphicsEnvironment();
System.out.println("Headless mode: " + ge.isHeadless());
HeadlessBasics hb=new HeadlessBasics();

ImageIO.write(hb.DisplayTextPicture("dddd") , "png", new File("first"));

}
public BufferedImage DisplayTextPicture(String willtext)
{
int width = 48;
int height = 48;
float size = 8.0f;
int StringH = 8;
BufferedImage buffer = new BufferedImage(width,
height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 =(Graphics2D)buffer.getGraphics();
Font font = new Font("serif", Font.BOLD, StringH);
font = font.deriveFont(size);
FontRenderContext fc = g2.getFontRenderContext();
Rectangle2D bounds = font.getStringBounds(willtext,
fc);
width = (int) bounds.getWidth();
height = (int) bounds.getHeight() * 2;
buffer = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
g2 = (Graphics2D)buffer.getGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setFont(font);
g2.setColor(Color.white);
g2.fillRect(0, 0, width, height);
g2.setColor(Color.red);
String[] tem = willtext.split("\n");
for (int i = 0; i < tem.length; i++)
g2.drawString(tem[i], 0,
(int) - bounds.getY() + i * StringH);
return buffer;
}
}

星期四, 六月 29, 2006

Java 把数字从低向高排序


import java.io.*;

public class Order
{
public static void main(String[] args) throws Exception
{
if(args.length<1) dataf=" new" style="font-weight: bold; color: rgb(255, 0, 0);">BufferedReader d = new BufferedReader(new InputStreamReader(new FileInputStream(dataf)));
String line="";
StringBuffer out =new StringBuffer();
while( (line=d.readLine())!=null)
{
String[] all=line.split("[\t,]");
int[] number = Str2Int(all);
java.util.Arrays.sort(number);
out.append(int2Str(number)).append("\n");
}
System.out.println(out);
}

/*
*把int数组转换为字符串数组
*/
static String int2Str(int[] ori)
{
StringBuffer result = new StringBuffer();
for(int i=0;i<ori.length;i++)
result.append(ori[i]).append("\t");
return result.toString();
}
/*
*把数组转换为字符int串数组
*/

static int[] Str2Int(String[] ori)
{
int[] result= new int[ori.length];
for(int i=0;i<result.length;i++)result[i]=Integer.parseInt(ori[i]);
return result;
}

}

星期三, 五月 31, 2006

Mathematica 中的常用函数

Mathematica 中的常用函数

如果你是第一次使用Mathematica,那么以下几点请你一定牢牢记住:

1. Mathematica 区分大小写,如 Name、name是不同的变量名或函数名。

2. 系统所提供的功能大部分以系统函数的形式给出,内部函数一般写全称,
以大写英文字母开头,如 Sin[x],Conjugate[z]等;
有时一个函数名是由几个单词构成,则每个单词的首写字母也必须大写
如:求局部极小值函数 FindMinimum[f[x],{x,x0]等

3. 乘法即可以用“*”,也可以用空格表示,如 2 3=2*3=6 等;
乘幂可以用“^”表示,如 x^0.5, Tan[x]^y 等

4. 自定义的变量可以取几乎任意的名称,但为了不与系统函数产生混淆,
我们自定义的变量应该是以小写字母开始,后跟数字和字母的组合,
长度不限,不可以数字开头。

5. 给变量赋值后,除非明显地改变该值或使用Clear[变量名]或“变量名=.”取消该值,
否则它将始终保持原值不变。

6. 一定要注意四种括号的用法:
() 圆括号表示项的结合顺序,如(x+(y^x+1/(2x)));
[] 方括号表示函数,如Log[x],BesselJ[x,1];
{} 大括号表示一个“表”(一组数字、任意表达式、函数等的集合),
如 {2x,Sin[2 Pi],{1+A,y*x}};
[[]] 双方括号表示“表”或“表达式”的下标,如a[[2,3]]、{1,2,3}[[1]]=1。

7. Mathematica的语句书写十分方便:
一个语句可以分为多行写,同一行可以写多个语句(但要以分号间隔)。
当语句以分号结束时,不做输出(输出语句除外),否则将输出计算结果。

常用函数

1.运算符及特殊符号

Linel   执行Line,不显示结果

Linel,line2 顺次执行Line1,Line2,并显示结果

?name 关于系统变量name的信息

??name 关于系统变量name的全部信息

!command 执行Dos命令

N! N的阶乘

!!filename 显示文件内容

<>filename 打开文件写

Expr>>>filename 打开文件从文件末写

() 结合率

[] 函数

{} 一个表

<*MathFun*> 在c语言中使用math的函数

(*Note*) 程序的注释

#n 第n个参数

## 所有参数

Rule& 把role作用于后面的式子

% 前一次的输出

%% 倒数第二次的输出

%%%(k) 倒数第k次的计算结果

%n 例出行Out[n])的结果(用时要小心)

Var::mote 变量var的注释

"Astring" 字符串

Context 上下文

A+b, a-b, A*b或a b, A/b 加减乘除

2.系统常量

Pi  3.1415的无限精度数值

E 2.17828的无限精度数值

Catalan 0.915966 Catalan常数

EulerGamma 0.5772 Euler常数

Khinchin 2.68545 Khinchin

Glaisher 0.915966 Glaisher

GoldenRatio 1.61803黄金分割数

Degree Pi/l80角度弧度换算

I 复数单位

Infinity 无穷大

-Infinity 负无穷大

Complexlnfinity 复无穷大

Indeterminate 不定式

3.代数计算

Expand[expr] 展开表达式

Factor[expr] 对表达式进行因式分解

Simplify[expr] 化简表达式

FullSimplify[expr] 将特殊函数也进行化简

PowerExpand[expr] 展开所有的幂次形式

ComplexExpand[expr,{x1,x2,...)] 按复数实部虚部展开

FunctionExpand[expr] 化简表达式中的特殊函数

Collect[expr,x] 合并同次项

Collect[expr,{x1,x2,...)] 合并x1,x2,...的同次项

Together[expr] 通分

Apart[expr] 部分分式展开

Apart[expr,var) 对var的部分分式展开

Cancel[expr] 约分

xpandAll[expr] 展开表达式

ExpandAll[expr,patt] 展开表达式

FactorTermsrpoly] 提出共有的数字因子

FactorTerms[poly,x] 提出与x无关的数字因子

FactorTerms[poly,(x1,x2,...)] 提出与xi无关的数字因子

Coefficient[expr,form] 多项式expr中form的系数

Coefficient[expr,form,n) 多项式expr中form^n的系数

Exponent[expr,form] 表达式expr中form的最高指数

Numerator[expr] 表达式expr的分子

Denominator[expr] 表达式expr的分母

ExpandNumerator[expr] 展开expr的分子部分

4. 解方程

Solve[eqns,vats] 从方程组eqns中解出Vats

Solve[eqns,vats,elims] 从方程组eqns中削去变量elims,解出vats

DSolve[eqn,y,x] 解微分方程,其中、y是x的函数

DSolve[{eqnl,eqn2,...},{y1,y2,...}] 解微分方程组,其中yi是x的函数

DSolve[eqn,y,{x1,x2,...}] 解偏微分方程

Eliminate[eqns,Vats] 把方程组eqns中变量vars约去

SolveAlways[eqns,vars] 给出等式成立的所有参数满足的条件

Reduce[eqns,Vats] 化简并给出所有可能解的条件

LogicalExpand[expr] 用&&和,将逻辑表达式展开

InverseFunction[f] 求函数f的反函数

Root[f,k] 求多项式函数的第k个根

Roots[1hs==rhs,var] 得到多项式方程的所有根

5. 微积分

D[f,x]  求f[x]的微分

D[f,{x,n}] 求f[x]的n阶微分

D[f,x1,x2,...] 求f[x]x1,x2,...偏微分

Dt[f,x] 求f[x]的全微分df/dx

Dt(f) 求f[x]的全微分df

Dt[f,{x,n}] n阶全微分df^n/dx^n

Dt[f,x1,x2..] 对x1,x2..的偏微分

Integrate[f,x] f[x]对x在的不定积分

Integrate[f,{x,xmin,xmax}] f[x]对x在区间(xmin,xmax)的定积分

Integrate[f,{x,xmin,xmax},{y,ymin,ymax}] f[x,y]的二重积分

Limit[expr,x->x0] x趋近于x0时expr的极限

Residue[expr,{x,x0}] expr在x0处的留数

Series[f,{x,x0,n)] 给出f[x]在x0处的幂级数展开

Series[f,{x,xO,nx},{y,y0,ny}] 先对y幂级数展开,再对x幂级数展开

Normal[expr] 化简并给出最常见的表达式

SeriesCoefficient[series,n] 给出级数中第n次项的系数

SeriesCoefficient[series,{n1,n2,...}] 一阶导数

InverseSeries[s,x] 给出逆函数的级数

ComposeSeries[seriel,serie2,...] 给出两个基数的组合

SeriesData[x,x0,{a0,a1,..},nmin,nmax,den] 表示一个x0处x的幂级数

O[x]^n n阶小量x^n

6. 多项式函数

Variables[poly] 给出多项式poly中独立变量的列表

CoefficientList[poly,var] 给出多项式poly中变量var的系数

CoefficientList[poly,{varl,var2,...)) 给出多项式poly中变量var(i)的系数列

PolynomialMod[poly,m] poly中各系数mod m同余后得到的多项式,m可为整式

PolynomialQuotient[p,q,x] 以x为自变量的两个多项式之商式p/q

PolynomialRemainder[p,q,x] 以x为自变量的两个多项式之余式

Po1ynomialGCD[polyl,poly2,...] poly(i)的最大公因式

PolynomialLCM[polyl,poly2....] poly(i)的最小公倍式

PolynomialReduce[poly,{polyl,Poly2,...},{xl,x2,...}]
得到一个表 I(a1,a2,...),b) 其中 Sum[ai*polyi]+b=poly


Resultant[polyl,poly2,var] 约去polyl,poly2中的var

Factor[poly] 因式分解(在整式范围内)

FactorTerms[poly] 提出poly中的数字公因子

FactorTerms[poly,{x1,x2,...)] 提出poly中与xi无关项的数字公因子

FactorList[poly],
FactorSquareFreeList[p01y],
FactorTermsList[poly,{x1,x2,...}] 给出各个因式列表


Cyclotomic[n,x] n阶柱函数

Decomposet[poly,x] 迭代分解,给出{p1,p2,...),其中P1(p2(...))=poly

InterpolafinSPolynomial[data,Var] 在数据data上的插值多项式

RootSum[f,form] 得到f[x]=0的所有根,并求得Sum[form[xi]]

7. 随机函数

Random[type,range]  产生type类型且在range范围内的均匀分布随机数

Random[] 0-1上的随机实数

SeedRandom[n] 以n为seed产生伪随机数

Randomldistribution] 可以产生各种分布

8. 数值函数

N[expr]  表达式的机器精度近似值
N[expr,n] 表达式的n位近似值,n为任意正整数


NSolve[lhs==rhs,val] 求方程数值解
NSolvel[eqn,Var,n] 求方程数值解,结果精度到n位


NDSolve[eqns,y,{x,xmirl,xmax}] 微分方程数值解
NDSolve[eqns,{y1,y2,...},{x,xmin,xmax}] 微分方程组数值解


FindRoot[1hs==rhs,{x,x0)1 以x0为初值,寻找方程数值解
FindRoot[1hs=--rhs,{x,xstart,xmin,xmax}]
以xstart为初值,在[xmin,xmax]范围内寻找方程数值解


NSum[f,{imin,imax,di}] 数值求和,出为步长
NSum[f,{imin,imax,di},{j,..},..] 多维函数求和


NProduct[f,{i,imin,imax,di}] 函数求积

NIntegrate[f,{x,xmin,xmax}] 函数数值积分

FindMinimum[f,{x,xO}] 以x0为初值,寻找函数最小值
FindMinimum[f,{x,xstart,xmin,xmax}]
以xstart为初值,在[xmin,xmax]范围内寻找方程解


ConstrainedMin[f,{inequ},{x,y,...}] inequ 为线性不等式组,
f 为x,y,...之线性函数,得到最小值及此时的x,y,...取值


ConstrainedMax[f,{inequ),{x,y,...}] 得到最大值及此时的x,y,...取值

LinearProgramming[C,m,b]
解线性组合c.x在m.x>=b&&x>=0约束下的最小值,x,b,c为向量,m为矩阵


LatticeReduce[{v1,v2...}] 向量组Vi的极小无关组


Fit[data,funs,vats] 用指定函数组对数据进行最小二乘拟合

Interpolation[data] 对数据进行插值

Lisfinterpolation[array] 对离散数据插值,array可为n维

ListInterpolafion[array,{{xmin,xmax},{min,ymax},..}]
在特定网格上进行插值


FunctionInterpolation[expr,{x,xmin,xmax},{y,ymin,ymax},..]
以对应expr[xi,yi]的数值为数据进行插值


Fourier[list] 对复数数据进行傅氏变换

InverseFourier[list] 对复数数据进行傅氏逆变换

9. 表的操作

制表函数

{e1,e2,...} 一个表,元素可以为任意表达式,无穷嵌套

Table[expr,{imax}] 生成一个表,共imax个元素

Table[expr,{i,imax}} 生成一个表,共imax个元素expr间

Table(expr,{i,imin,imax},{j,jmin,jmax},..] 多维表

Range[imax] 简单数表{1,2,..., imax}

Range[imin,imax,di] 以di为步长的数表

Array[f,n] 一维表,元素为fI¨(i从1到n)

Array[f,{n1,n2..}] 多维表,元素为玎i小.1 (各自从1到ni)

IdentityMatrix[n] n 阶单位阵

DiagonalMatrix[list] 对角阵


元素操作

Part[expr,i]或expr[[i]] 第i个元素

expr[[-i]] 倒数第i个元素

expr[{i,j,..}] 多维表的元素

expr[{i1,i2,..}] 返回由第i(n)的元素组成的子表

First[expr] 第一个元素

Last[expr] 最后一个元素

Head[expr] 函数头,等于expr[[0]]

Extract[expr,list] 取出由表list指定位置上expr的元素值

Take[list,n] 取出表list前n个元素组成的表

Take[list,{m,n}] 取出表list从m到n的元素组成的表

Drop[list,n] 去掉表list前n个元素组下的表

Rest[expr] 去掉表list第一个元素剩下的表

Select[USt,crit] 把crit作用到每一个list的元素上,为True的所有元素组成的表

Length[expr] expr第一层元素的个数

Dimensions[expr] 表的维数返回{n1,n2..},expr为一个nl*n2...的阵

TensorRank[expr] 秩

Depth[expr] expr最大深度

Level[expr,n] 给出expr中第n层子表达式的列表

Count[USt,paUem] 满足模式的list中元素的个数

MembefQ[1ist,form] list中是否有匹配form的元素

FreeQ[expr,form] MemberQ的反函数

FreeQ[expr,form] 表中匹配模式pattern的元素的位置列表

Cases[{e1,e2,...},pattem] 匹配模式pattem的所有元素ei的表


表的操作

Append[exp,elem] 返回在表expr的最后追加elem元素后的表

Prepend[expr,elem] 返回在表expr的最前添加elem元素后的表

Insert[1ist,elem,n] 在第n元素前插入elem

lnsert[expr,elem,{i,j,...}] 在元素expr[[{i,j,..}]]前插入elem

Delete[expr,{i,j,..}] 删除元素expr[[{i,j,..}]]后剩下的表

DeleteCases[expr,pattem] 删除匹配pattern的所有元素后剩下的表

ReplacePart[expr,new,n] 将expr的第n元素替换为new

Sort[list] 返回list按顺序排列的表

Reverse[expr] 把表expr倒过来

RotateLeft[expr,n] 把表expr循环左移n次

RotateRight[expr,n] 把表expr循环右移n次

Partition[list,n] 把list按每n个元素为一个子表分割后再组成的大表

Flatten[list] 抹平所有子表后得到的一维大表

Flatten[1ist,n] 抹平到第n层

Split[1ist] 把相同的元素组成一个子表,再合成的大表

10. 绘图函数

二维绘图

Plot[f,{x,xmin,xmax}] 一维函数f[x]在区间[xmin,xmax]上的函数曲线

Plot[{fl,f2..},{x,xmin,xmax}] 在同一图形上画几条曲线

ListPlot[{y1,y2,..}] 绘出由离散点对(n,yn)组成的图

ListPlot[{{x1,y1},{x2,y2},}} 绘出由离散点对(xrl,yrl)组成的图

ParametricPlot[{fx,fy},{t,tmin,tmax}] 由参数方程在参数变化范围内产生的曲线

ParametricPlot[{fx,fy},{gx,gy},...],{t,tmin,truax}]


二维设置

PlotRange->{0,1} 作图显示的值域范围

AspectRatio->1/GoldenRatio 生成图形的纵横比

PlotLabel->label 标题文字

Axes->{false,True} 分别制定是否画x,y轴

AxesLabel->{xlabel,ylabel} x,y轴上的说明文字

Ticks->None,Automatic,fun 用什么方式画轴的刻度

AxesOrigin->{x,y} 坐标轴原点位置

AxesStyle->{{xstyle},{ystyle}} 设置轴线的线性颜色等属性

Frame->True,False 是否画边框

FrameLabel->{xmlabel,ymlabel,xplabel,yplabel} 边框四边上的文字

FrameTicks 同Ticks 边框上是否画刻度

GridLines 同Ticks 图上是否画栅格线

Framestyle->{{xmstyle},{ymstyle}} 设置边框线的线性颜色等属性

ListPlot[data,PlotJoined->True] 把离散点按顺序连线

Plotsytle->{{style1},{style2},..} 曲线的线性颜色等属性

PlotPoints->15 曲线取样点,越大越细致


三维绘图

Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}] 二维函数f[x,y]的空间曲面

Plot3D[{f,s},{x,xmin,xmax},{y,ymin,ymax}] 同上,曲面的染色由s[x,y]值决定

ListPlot3D[array] 二维数据阵array的立体高度图

ListPlot3D[array,shades] 同上,曲面的染色由shades[数据]值决定

ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}] 三维参数图形

ContourPlot[f,{x,xmin,xmax},{y,ymin,ymax}] 二维函数f[x,y]在指定区间上的等高线图

ListContourPlot[array] 二维函数fix,yJ在指定区间上的等高线图


三维设置

Contours->n 画n条等高线

Contours->{z1,z2,...} 在zi处画等高线

ContourShading->False 是否用深浅染色

ContourLines->True 是否画等高线

ContourStyle->{{stylel},{style2},..} 等高线线性颜色等属性


密度图

DensityPlot[f,{x,xmin,xmax},{y,ymin,ymax)] 二维函数f[x,y]在指定区间上的密度图

ListDensityPlot[array] 二维函数f[x,y]在指定区间上的密度图


图形显示

Show[graphics,options] 显示一组图形对象,options为选项设置

Show[g1,g2,...] 在一个图上叠加显示一组图形对象

GraphicsArray[{g1,g2,...}] 在一个图上分块显示一组图形对象

SelectionAnimate[notebook,t] 把选中的notebook中的图画循环放映


图元函数

Graphics[prim,options] prim为下面各种函数组成的表,表示一个二维图形对象

Graphics3D[prim,options] prim为下面各种函数组成的表,表示一个三维图形对象

SurfaceGraphics[array,shades] 表示一个由array和shade决定的曲面对象

ContourGraphics[array] 表示一个由array决定的等高线图对象

DensityGraphics[array] 表示一个由array决定的密度图对象

Point[p] p={x,y}或{x,y,2},在指定位置画点

Line[{p1,p2,..}] 经由Pi点连线

Rectangle[{xmin,ymin),{xmax,ymax}] 画矩形

Cuboid[{xmin,ymin,zmin},{xmaxffmax,zmax}] 由对角线指定的长方体

Polygon[{p1,p2,...}] 封闭多边形

Circle[{x,y},r] 画圆

Circle[{x,y},{rx,ry}] 画椭圆,rx,ry为半长短轴

Circle[{x,y},r,{a1,a2}] 从角度al-a2的圆弧

Disk[{x,y},r] 填充的园、椭圆、圆弧等参数同上

Raster[array,ColorFunction->f] 颜色栅格

Text[expr,coords] 在坐标coords上输出表达式

PostScrip["string"] 直接用Postscript图元语言写

Scaled[{x,y,...}] 返回点的坐标,且均大于0小于1


着色及其他

GrayLevel[level] 灰度level为0~1间的实数

RGBColor[red,green,blue] RGB颜色,均为0~I间的实数

Hue[h,s,b] 亮度,饱和度等,均为0~1间的实数

CMYKColor[cyan,magenta,yellow,block] CMYK颜色

Thicknessr[r] 设置线宽为r

PointSize[d] 设置绘点的大小

Dashing[{r1,r2,...}] 画一个单元的间隔长度的虚线

ImageSize->{x,y} 显示图形大小(单位为像素)

11. 流程控制

If[condition,t,f] 如果condition为True,执行t,否则执行f段

if[condition,t,f,u]
如果condition为Ture,执行t,为False执行f,既非True 又非False,则执行u


Which[test1,blockl,test2,block2,...] 执行第一为True的tesfi对应的blocki

Switch[expr,forml,blockl,form2,block2,...] 重复执行expr imax次

Do[expr,{imax}] 重复执行expr imax次

Do[expr,{i,imin,imax},{j,jmin,jmax}] 多重循环

While[test,body] 循环执行body直到test为False

For[start,test,incr,body] 循环执行body直到test为False

Throw[value] 停止计算,把value返回给最近一个Catch处理

Throw[value,tag] 停止计算,把value返回给最近一个Catch处理

Catch[expr] 计算expr,遇到Throw返回的值则停止

Catch[expr,form] 当Throw[value,tag]中Tag匹配form时停止

Return[expr] 从函数返回,返回值为expr

Return[] 返回值Null

Breakl[] 结束最近的一重循环

Continuel[] 停止本次循环,进行下一次循环

Goto[tag] 无条件转向Label[Tag]处

Label[tag] 设置一个断点

Check[expr,fmlexpr] 计算expr,如果有出错信息产生,则返回failexpr的值

Check[expr,failexpr,s1::t1,s2::t2,...] 当特定信息产生时则返回failexpr

CheckAbort[expr,failexpr] 当产生abort信息时返回failexpr

Interrupt[] 中断运行

Abort[] 中断运行

TimeConstrained[expr,t] 计算expr,当耗时超过t秒时终止

MemoryConstrained[expr,b] 计算expr,当耗用内存超过b字节时终止运算

Print[exprl,expr2,...] 顺次输出expri的值

Input[] 产生一个输入对话框,返回所输入的任意表达式

Input["prompt"] 同上,prompt为对话框的提示

Pause[n] 运行暂停n秒

Matchematica中有关建模的函数

优化函数:

FindMinimum[f, {x,x0}] 以x0为初值,寻找函数最小值
FindMinimum[f, {x, xstart, xmin, xmax}]
ConstrainedMin[f,{inequ},{x,y,..}]
inequ为线性不等式组,f为x,y..之线性函数,得到最小值及此时的x,y..取值
ConstrainedMax[f, {inequ}, {x, y,..}]同上
LinearProgramming[c,m,b] 解线性组合c.x在m.x>=b&&x>=0约束下的
最小值,x,b,c为向量,m为矩阵
LatticeReduce[{v1,v2...}] 向量组vi的极小无关组

数据处理:

Fit[data,funs,vars]用指定函数组对数据进行最小二乘拟和
data可以为{{x1,y1,..f1},{x2,y2,..f2}..}多维的情况
emp: Fit[{10.22,12,3.2,9.9}, {1, x, x^2,Sin[x]}, x]
Interpolation[data]对数据进行差值,
data同上,另外还可以为{{x1,{f1,df11,df12}},{x2,{f2,.}..}指定各阶导数
InterpolationOrder默认为3次,可修改
ListInterpolation[array]对离散数据插值,array可为n维
ListInterpolation[array,{{xmin,xmax},{ymin,ymax},..}]
FunctionInterpolation[expr,{x,xmin,xmax}, {y,ymin,ymax},..]
以对应expr[xi,yi]的为数据进行插值
Fourier[list] 对复数数据进行付氏变换
InverseFourier[list] 对复数数据进行付氏逆变换
Min[{x1,x2...},{y1,y2,...}]得到每个表中的最小值
变换
Min[{x1,x2...},{y1,y2,...}]得到每个表中的最小值
Max[{x1,x2...},{y1,y2,...}]得到每个表中的最大值
Select[list, crit] 将表中使得crit为True的元素选择出来
Count[list, pattern] 将表中匹配模式pattern的元素的个数
Sort[list] 将表中元素按升序排列
Sort[list,p] 将表中元素按p[e1,e2]为True的顺序比较list
的任两个元素e1,e2,实际上Sort[list]中默认p=Greater

星期五, 五月 26, 2006

各种函数算术

什么是导数?
设函数在点的某个邻域内有定义,当自变量在点处取得改变量()时,函数取得相应的改变量,如果极限

存在,则称函数在点可导,并称此极限值为函数在点处的导数(或变化率),记为

,或

如果上式极限不存在,就称函数在点不可导导数不存在

若令,则当时,有,所以函数在点处导数也可写成:

类似地,称

函数的导函数,简称导数

在处的左导数;

处的右导数。

关于处导数有如下两个结论:

(1) 存在的充分必要条件是存在且相等。

(2)可导与连续的关系是:如果函数在点处可导,则处连续。



1.幂函数y=xn (a为实数)的导数(变化率)
y'=n*xn-1

2.正弦函数Sin(x)的导数
Sinx'=Cosx.

3.对数函数y=loga(x)的导数(a>0,a<>1)
loga'(x)=1/(x*lna)

星期二, 五月 23, 2006

JBOSS LOG4J 的控制.

conf/log4j.xml 里控制指定logger的开关

编写一个class,名字为: com.company.hrm.test.testLogger.

包含如下语句:

package com.company.hrm.test;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;

public class testLogger
{
public testLogger()
{
}
public static void main(String[] args)
{
org.apache.log4j.BasicConfigurator.configure();
Logger log = org.apache.log4j.Logger.getLogger(testLogger.class.getName());
log.debug("来自testLogger的debug");
log.info("来自testLogger的info");
log.error("来自testLogger的error");
log.fatal("来自testLogger的fatal");
System.out.println("....................");

}
}

Log4j.xml:

<category name="com.company.hrm.test">
<priority value="FATAL"/>
</category>



priority 包含:ALL,DEBUG,INFO,WARN,FATAL,OFF 其中之一。

其中优先级别包含顺序为:ALL<DEBUG<INFO<WARN<FATAL<OFF
ALL的级别最低,如果想关闭某种类型的信息,需要把更高级的类型设置进去。

比如想关掉INFO级别的信息,只需要把priority的value设置为"OFF"或WARN,FATAL就可以了

星期二, 五月 16, 2006

MySQL Audit功能开启

在以下文件中加入如下行

/etc/my.cnf
[mysqld]
log_update=/var/log/mysql.update.log
log-long-format
set-variable = log=/var/log/mysql.log #一般完全SQL Plan记录

星期六, 五月 13, 2006

Mathematica Import输入Table数据文件

Mathematica Documentation: Import

Mathematica输入的数据文件,列必须用空格分开,空格的个数不限制。

如下:
001 28 12 15 21 19 01 999 03 11 08 01

data=Import["文件名","Table"]

星期五, 五月 12, 2006

MatheMatica 5 画图技巧之三:改变图形大小.

使用:ImageSize -> {620, 448} option来实现,如下:

ListPlot[fg, PlotStyle -> {PointSize[.02], RGBColor[
1, 0, 0]}, PlotJoined -> False, AxesOrigin -> {0, 0}, AxesLabel -> {"号码
", "频率"}, PlotLabel -> "2006年号码频率图", Frame ->
True, ImageSize -> {620, 448}];

星期二, 五月 09, 2006

lottery=
{{28,12,15,21,19,01},
{13,28,07,21,26,16},
{16,04,05,02,06,20},
{04,08,17,27,28,31},
{19,24,20,27,03,26},
{32,22,08,26,21,23},
{32,27,33,16,18,04},
{18,28,05,03,32,09},
{26,08,05,20,30,06},
{04,29,06,19,12,27},
{31,08,05,27,07,14},
{31,09,11,33,13,27},
{16,05,01,21,06,12},
{32,33,14,29,06,26},
{29,09,32,02,03,15},
{01,07,17,23,30,13},
{31,08,33,04,32,03},
{17,26,24,14,01,13},
{22,13,32,06,26,04},
{26,21,23,05,29,09},
{21,22,01,02,20,05},
{04,03,16,13,27,02},
{13,14,04,19,23,28},
{02,11,27,09,07,21},
{24,03,17,04,19,32},
{02,01,32,29,22,18},
{27,06,08,11,16,14},
{14,07,27,16,17,05},
{04,14,03,07,19,09},
{32,20,15,08,13,17},
{16,32,03,10,31,12},
{24,20,26,18,05,31},
{15,23,27,31,22,20},
{33,16,10,02,17,15},
{03,29,09,13,21,27},
{10,07,04,17,16,21},
{32,25,12,02,24,23}};

For[t = 1, t < Length[
lottery], t++; Show[ListPlot[lottery[[t]], PlotStyle -> {PointSize[.04], RGBColor[1, 0, 0] }]]]

星期一, 五月 08, 2006

Mathematica 5 画图之三,改变点的大小

Show[Graphics[{PointSize[.4],RGBColor[1,0,0],Point[{30,1}]},
Background\[Rule]GrayLevel[0.5]]]

Mathematica 5 绘图技巧二.

Plot[Sin[x], {x, 0, 2Pi},
PlotStyle -> {Thickness[0.02], Dashing[{0.03, 0.07}], RGBColor[1, 0, 0]}]

Mathematica 如何异步输出图象?

参数DisplayFunction(显示函数)
该参数决定图形的显示与否,当取值为Identity 时,图形不显示出来.
当取值为$DisplayFunction时恢复图形的显示.
1、 图形的组合显示函数Show

Plot的作用可以同时在同一坐标系的同一区间内作出不同函数的图像,但有时需要在同一坐标系的不同区间作出不同函数的图像,或者在同一坐标系作一个函数而要求函数的各个部分具有不同的形态(像分段函数),这个时候就需要使用Show函数.

实验13 在同一坐标系中作出y=ex和y=lnx的图像,并说明它们的图像关于直线y=x对称.
输入:
a=Plot[Exp[x],{x,-2,2},AspectRatio->Automatic,PlotStyle->RGBColor[0,1,0],
DisplayFunction->Identity]
b=Plot[Log[x],{x,0.3,3},AspectRatio->Automatic,PlotStyle->RGBColor[1,0,0],
DisplayFunction->Identity]
c=Plot[x,{x,-2,2},AspectRatio->Automatic,PlotStyle->Dashing[{0.09,0.04}],
DisplayFunction->Identity]
Show[a,b,c,DisplayFunction?$DisplayFunction]

如何设置Mathematica 5 的绘画参数?

Plot[Sin[x], {x, 0, 2Pi}, PlotStyle -> {RGBColor[1,
0, 0], Dashing[{0.03, 0.07}]}
]

星期日, 五月 07, 2006

巧用java来计算对数

巧用java来计算对数

毫无疑问,Java可以计算对数,然而在API中却有惊人的误差。但是如果运用了以下的方法,用Java处理数字所遇到的小麻烦就可以轻而易举的解决了。
  Sun的J2SE提供了一个单一的对数方法??double java.lang.Math.log(double),这很容易使用。请看如下代码:
  double x = Math.log(5);
  等价于下面的数学方程:
  x = ln 5
  或
  x = loge5
  其中e是内皮尔数或自然数。
  如果你想算底不同的对数又该如何做呢?很遗憾,我们还没有办法计算以10为底或以2为底的对数。但是它们却是在计算对数时用的最多的。要想解决这个问题,我们就要回想曾经在学校里学过的数学和对数方程:
  logx(y) =loge(x) / loge(y)
  这只需一段简单的Java程序来实现:
  package com.generationjava.math;
  public class Logarithm {
   static public double log(double value, double base) {
   return Math.log(value) / Math.log(base);
   }
  }
  计算100的以10为底的对数就变为非常简单了:
  double log = Logarithm.log(100, 10); // log is 2.0
  512的以2为底的对数是:
  double log = Logarithm.log(512, 2); // log is 9.0
  下面的两个简单的方法也都是很有用的:
  static public double log2(double value) {
   return log(value, 2.0);
   }
   static public double log10(double value) {
   return log(value, 10.0);
   }

星期二, 五月 02, 2006

Oscar Wilde 王?德 CSI said

http://www.brainyquote.com/quotes/quotes/o/oscarwilde117770.html

野心是失败者最后的庇护所
Ambition is the last refuge of the failure.