科学网

 找回密码
  注册

tag 标签: 函数

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

[转载]怎么用matlab把传递函数转成差分方程
willzhang198 2012-2-10 17:33
以下是PID控制的部分代码(matlab的m文件): ts=0.001;采样时间=0.001s sys=tf(400, );建立被控对象传递函数 dsys=c2d(sys,ts,'z');把传递函数离散化(问题1) =tfdata(dsys,'v');离散化后提取分子、分母 rin=1.0;输入为阶跃信号 u_1=0.0; u_2=0.0; 什么东西的初始状态(问题2) y_1=0.0; y_2=0.0; 是不是输出的初始状态 error_1=0;初始误差 x= ';PID的3个参数Kp Ki Kd组成的数组 p=100;仿真时间100ms for k=1:1:p r(k)=rin; u(k)=kpidi(1)*x(1)+kpidi(2)*x(2)+kpidi(3)*x(3) if u(k)=10 u(k)=10; end if u(k)=-10 u(k)=-10; end yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;(问题3) error(k)=r(k)-yout(k); %返回pid参数 u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k); x(1)=error(k); x(2)=(error(k)-error_1)/ts; x(3)=x(3)+error(k)*ts; error_2=error_1; error_1=error(k); end 问题1:把传递函数离散化 =C2D(SYSC,Ts,METHOD)这里面的method有好多种,而且用的method不一样得出的结果也不一样,这些参数究竟有什么区别? 问题2:这些是不是PID控制器输出的初始状态,“rin--①--PID控制器--②--被控对象--③---”是不是就是上面②的地方的信号值? 问题3(关键问题):这个式子是怎么得出来的?从传递函数得出差分方程是个什么步骤,要具体点的或者给本参考书。 又如:在《先进PID控制MATLAB仿真(第二版)》P146有 被控对象G(s)=133/(s^2+25s),采样时间为1ms,采用z变换进行离散化,经过z变换后的离散化对象为yout(k)=-den(2)yout(k-1)—den(3)yout(k-2)十num(2)u(k-1)+num(3)u(k-2)(实在是搞不明白怎么来的) 问题4:不是线性的对象可不可以写成差分方程的形式,比如G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1)带了个纯延迟的该怎么弄。或者换成个3阶对象怎么写成差分方程 最佳答案 1、c2d:假设在输入端有一个零阶保持器,把连续时间的状态空间模型转到离散时间状态空间模型。 =C2D(SYSC,Ts,METHOD)里面的method包括: zoh 零阶保持, 假设控制输入在采样周期内为常值,为默认值。 foh 一阶保持器,假设控制输入在采样周期内为线性。 tustin 采用双线性逼近。 matched 采用SISO系统的零极点匹配法 2、只有U_1是2处的初始状态值,而U_2是用来传递U(k)的,所以U_2是U_1在下一个ts时间内的值 3、从差分方程获取传递函数: y(k)+a1(k-1)+……+an(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m)在零初始条件下对,对方程两边进行Z变换,得到该系统的脉冲传递函数G(Z)=Y(Z)/X(X)= / 其中m《n 或等效形式G(Z)=Y(Z)/X(X)= / 其中m《n 从脉冲传递函数到差分方程 G(Z)=Y(Z)/X(X)= / 其中m《n 交叉相乘得Y(Z) =X(X) 对X(z)和Y(z)进行z逆变换的到差分方程y(k)+a1y(k-1)+……+any(k-n)=b0x(k)+b1x(k-1)+……+bmx(k-m) http://218.6.168.52/wlxt/ncourse/jsjkzjs/web/ppt/ch4.files/frame.htm 4、纯延迟系统G(s)=20e^(-0.02s)/(1.6s^2+4.4s+1) num= ; den= ; sys=tf(num,den,'inputdelay',0.02)
8996 次阅读|0 个评论
mysql 函数汇总
liujd 2012-2-10 15:05
1,instr函数 找到范围具体位置编号,注意这里的位置编号都是从1开始编码的。找不到返回的是0。和perl的index()不一样,找不到返回的是-1,找到的返回的是编号,编号从0编码。
个人分类: mysql|997 次阅读|0 个评论
[转载]略谈matlab中S函数的概念及使用
willzhang198 2012-2-9 22:27
最近看了一下无刷直流电机的相关概念及仿真,看到大多数的文献仿真中都使用到了S函数,因此下了点资料看了一番,在本博文中简单地说一下S函数的概念及使用。 S 函数即系统函数 System Function 的意思,为什么要使用 S 函数呢?是因为在研究中,有时需要用到复杂的算法设计等,而这些算法因为其复杂性不适合用普通的 Simulink 模块来搭建,即 matlab 所提供的 Simulink 模块不能满足用户的需求,需要用编程的形式设计出 S 函数模块,将其嵌入到系统中。如果恰当地使用 S 函数,理论上,可以在 Simulink 下对任意复杂的系统进行仿真。 S函数具有固定的程序格式,用matlab语言可以编写S函数,此外还允许用户使用C、C++、Fortran和Ada等语言进行编写,用非matlab语言进行编写时,需要采用编译器生成动态链接库DLL文件。 在主窗口中输入 sfundemos ,或者点击 Simulink-User-Defined Functions-S-Function Examples ,即可出现如图 1 所示的界面,可以选择对应的编程语言查看演示文件。 图1 S函数范例库 Matlab为了用户使用方便,有一个S函数的模板sfuntmpl.m,一般来说,我们仅需要在sfuntmpl.m的基础上进行修改即可。在主窗口输入edit sfuntmpl即可出现模板函数的内容,可以详细地观察其帮助说明以便更好地了解S函数的工作原理。模板函数的定义形式为function =sfuntmpl(t,x,u,flag),一般来说,S函数的定义形式为 =sfunc(t,x,u,flag,p1,…Pn),其中的sfunc为自己定义的函数名称,以上参数中,t、x、u分别对应时间、状态、输入信号,flag为标志位,其取值不同,S函数执行的任务和返回的数据也是不同的,pn为额外的参数,sys为一个通用的返回参数值,其数值根据flag的不同而不同,x0为状态初始数值,str在目前为止的matlab版本中并没有什么作用,一般str= ,那么每个连续的采样时间步都运行, 则表示按照所连接的模块的采样速率进行, 表示仿真开始的0.1s后每0.25s运行一次,采样时间点为TimeHit=n*period+offset。 S函数的使用过程中有2个概念值得注意:1、direct feedthrough,系统的输出是否直接和输入相关联,即输入是否出现在输出端的标志,若是为1,否则为0,一般可以根据在flag=3的时候,mdlOutputs函数是否调用输入u来判断是否直接馈通。2、dynamically sized inputs,主要给出连续状态的个数、离散状态的个数、输入数目、输出数目和直接馈通否。 S函数中目前支持的flag选择有0、1、2、3、4、9等几个数值,下面说一下在不同的flag情况下S函数的执行情况。1)flag=0。进行系统的初始化过程,调用mdlInitializeSizes函数,对参数进行初始化设置,比如离散状态个数、连续状态个数、模块输入和输出的路数、模块的采样周期个数、状态变量初始数值等。2)flag=1。进行连续状态变量的更新,调用mdlDerivatives函数。3)flag=2。进行离散状态变量的更新,调用mdlUpdate函数。4)flag=3。求取系统的输出信号,调用mdlOutputs函数。5)flag=4。调用mdlGetTimeOfNextVarHit函数,计算下一仿真时刻,由sys返回。6)flag=9。终止仿真过程,调用mdlTerminate函数。 图2 不同flag情况下S函数执行情况 在实际仿真过程中,Simulink会自动将flag设置为0,进行初始化过程,然后将flag的数值设置为3,计算模块的输出,一个仿真周期后,Simulink将flag的数值先后设置为1和2,更新系统的连续和离散状态,再将其设置为3,计算模块的输出,如此循环直至仿真结束条件满足。 在S函数的编写过程中,首先需要搞清楚模块中有多少个连续和离散状态,离散模块的采样周期是如何的,同时需要了解模块的连续和离散的状态方程分别是什么,输出如何表示。下面以实例说明S函数的具体应用。 实例一 :在进行 BLDC 的速度电流双闭环控制时候,如果电流采用滞缓控制,那么速度环的输出作为参考电流的输入 Is , A 、 B 、 C 三相的参考电流分别为 I_ar 、 I_br 、 I_cr ,转子的位置记为 Pos ,那么转子位置和三相参考电流之间的关系表如图 3 所示。 图3 转子位置和三相参考电流的关系表 分析系统情况:输入为两路,一是角度Angle,通过mod(angle,2*pi)转化为Pos,二是参考电流输入Is,输出为三路,分别为A、B、C的三相参考电流,离散和连续的状态均为0,输入端出现在输出端,将S函数命名为given_current,其程序代码如下所示: %参考电流模块 %Author:dingqian12345@126.com %很明显:2个输入分别为角度和速度控制器的输出、3个输出为三相电流的参考电流、为直通模型 function =cemf(t,x,u,flag) clc; switch flag case 0 =mdlInitializeSizes; %初始化 case 1 sys= ; %离散状态的更新 case 3 sys=mdlOutputs(u); %求取系统的输出信号 case 4 sys= ; %终止仿真 otherwise error( ); end %%%%%在flag=0的时候进行整个系统的初始化 function =mdlInitializeSizes sizes = simsizes; %读入初始化参数模板 sizes.NumContStates = 0; %连续状态个数 sizes.NumDiscStates = 0; %离散状态个数 sizes.NumOutputs = 3; %输出变量个数 sizes.NumInputs = 2; %输入信号个数 sizes.DirFeedthrough = 1; %输入直接传入输出信号否 sizes.NumSampleTimes = 1; % at least one sample time is neededWO 一般来说为1个 sys = simsizes(sizes); x0= ; ts= ; %采样周期若写成-1表示继承其输入信号 %%%%%%在flag=1的时候进行连续系统状态的更新 function sys=mdlDerivatives(t,x,u) sys = ; 如果某个flag对应的函数不起作用 ,我们将其所调用的函数设为空或者 sys= =comp(t,x,u,flag) clc; global Cflag; global Cont; global T0; Cont=20; T0=1.5; switch flag case 0 =mdlInitializeSizes; %初始化 case 1 sys=mdlDerivatives(t,x,u); %连续状态的更新 case 2 sys=mdlUpdates(t,x,u); %离散状态的更新 case 3 sys=mdlOutputs(t,x,u); %求取系统的输出信号 case 4 sys=mdlGetTimeOfNextVarHit(t,x,u); %计算下一时刻的仿真时间 case 9 sys=mdlTerminate(t,x,u); %终止仿真 otherwise error( ); end %%%%%在flag=0的时候进行整个系统的初始化 function =mdlInitializeSizes sizes = simsizes; %读入初始化参数模板 sizes.NumContStates = 0; %连续状态个数 sizes.NumDiscStates = 2; %离散状态个数 sizes.NumOutputs = 1; %输出变量个数 sizes.NumInputs = 1; %输入信号个数 sizes.DirFeedthrough = 0; %输入直接传入输出信号否 sizes.NumSampleTimes = 1; % at least one sample time is neededWO 一般来说为1个 sys = simsizes(sizes); x0= ; %状态初始化 str= ; %采样周期若写成-1表示继承其输入信号 %%%%%%在flag=1的时候进行连续系统状态的更新 function sys=mdlDerivatives(t,x,u) sys = ; 可以看出,这里的S函数比实例1的S函数多用到了离散状态更新函数mdlUpdates,注意状态的更新方程的写法,sys=x(n+1),可以通过help sfuntmpl查看。在以上代码中,在flag=2的时候调用了自编的子程序m=comp_decide(t,x,u),comp_decide的代码如下: %%%%%%用户自定义子程序 function cc=comp_decide(t,x,u) cc=0; if u0 x(1)=0 cc=1; end; if u0 x(1)=0 cc=-1; end; 最后,将S函数嵌入到Simulink中,所搭建的补偿仿真框图如图7所示,我们通过Scope4观察控制量U和补偿Ucomp,其中cont为20,To=1.5。图8为补偿系统中U和Ucomp仿真结果局部放大图,可见,系统可以捕捉到控制量过零点的时刻并给出相应的补偿量。 图7 补偿系统Simulink仿真框图 图8 补偿系统中U和Ucomp仿真结果局部放大图 参考文献 薛定宇 著.控制系统仿真与计算机辅助设计 .北京:机械工业出版社出版社,2009. 很好的S函数学习资料-Simulink的S-Function编写指导 . http://www.ilovematlab.cn/thread-71226-1-1.html . . Simulink-s_function使用及应用举例 . http://www.ilovematlab.cn/thread-62299-1-1.html . . 祁麟.交流伺服系统齿隙非线性控制及其网络化研究 .硕士论文.南京理工大学,2006. 2010年12月26日晚上完成于njust 电工楼 310房间 CopyRight:版权所有若需转载或使用请联系作者 Email:dingqian12345@126.com
5964 次阅读|0 个评论
如何编写R函数
热度 1 zjlcas 2011-10-26 19:28
如何编写 R 函数? 张金龙 jinlongzhang01@gmail.com R 语言实际上是函数的集合,用户可以使用 base , stats 等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写 R 函数十分困难,或者难以理解。这里对如何编写 R 函数进行简要的介绍。 函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让 R 脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差 sd , 求平均值,求生物多样性指数等。 R 数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对 R 中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。 对于初学者来说,最好的方法就是研究现有的 R 函数。因为 R 程序包都是开源的,所有代码可见。研究现有的 R 函数能够使编程水平迅速提高。 R 函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的 R 函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。 1 . 函数名称,即要编写的函数名称,这一名称就作为将来调用 R 函数的依据。 2 . 函数声明,包括 - function , 即声明该对象的类型为函数。 3 . 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。 R help 的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。 4 . 函数体 常常包括三部分 . ( 1 ) . 异常处理 输入的数据不能满足函数计算的要求,或者类型不符, 这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。 错误又分为两种。 第一种, 如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时, 此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经 进行了相应的转换。 第二种,数据完全不符合要求,这种情况下,就 要终止函数的运行,而告知因为什么,函数不能运行。这样,用户在 使用函数的情况先才不至于茫然。 ( 2 ) . 运算过程 包括具体的运算步骤。 运算过程和该函数要完成的功能有关。 R 运算过程中,应该尽量减少循环的使用,特别是嵌套循环。 R 提供了 apply , replicate 等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在 R 中实在太慢,那么核心部分只能依靠 C 或者 Fortran 等语言编写,然后再用 R 调用这些编译好的模块,达到更高的效率。 运算过程中,需要大量用到 if 等条件作为判别的标准。 if 和 while 都是需要数据 TRUE / FALSE 这样的逻辑类型变量,这就意味着, if 内部,往往是对条件的判别,例如 is.na, is.matrix, is.numeric 等等,或者对大小的比较,如, if ( x 0 ) , if ( x == 1 ) , if ( length ( x )== 3 ) 等等。 if 后面,如果是 1 行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。 例子 1 ## if 与条件判断 fun.test - function ( a, b, method = "add" ){ if ( method == "add" ) { ## 如果 if 或者 for/while ; res - a + b ## 等后面的语句只有一行,则无需使用花括号。 } if ( method == "subtract" ){ res - a - b } return ( res ) ## 返回值 } ### 检验结果 fun.test ( a = 10 , b = 8 , method = "add" ) fun.test ( a = 10 , b = 8 , method = "substract" ) for 循环有些时候是必须要用到的, for 循环内部,往往需要用下标,访问数据内的一定元素,例如向量内的元素,这时候用方括号表示。一维的数据组合,或者数组,常常称为向量。二维的数据组合,往往称为矩阵,或者数据框。具体的访问方式主要是方括号内部有没有逗号的区别。 for 循环或者 while 循环有时候让人觉得比较困惑,可能需要专门的时间进行讲解。 例 2 ### for 循环与算法 test.sum - function ( x ) { res - 0 ### 设置初始值,在第一次循环的时候使用 for ( i in 1 : length ( x )){ res - res + x ## 这部分是算法的核心, ## 总是总右面开始计算,结果存到左边的对象 } return ( res ) } ### 检验函数 a - c ( 1 , 2 , 1 , 6 , 1 , 8 , 9 , 8 ) test.sum ( a ) sum ( a ) 无论是什么样的函数,算法才是最关键的。往往需要巧妙得设计算法,让函数快捷高效。 ( 3 ) . 返回值。 返回值就是函数给出的结果。打个比方,编写一个函数,就像自己攒一个机器,例如现在攒好 一台豆浆机,该豆浆机要求输入大豆,输入的大豆就是参数, 返回的结果,就是豆浆。如果该豆浆机需要不停地输入大豆, 而不能产出豆浆,这样的机器就一定会被扔掉。函数也是一样的, 需要给出返回值。 R 中默认的情况是将最后一句作为返回值。但是为了函数的可读性起见,应该尽量指名返回值。返回值用 return () 函数给出。 函数在内部处理过程中,一旦遇到 return () ,就会终止运行, 将 return () 内的数据作为函数处理的结果给出。 下面举例说明 R 函数的编写方法。 例 3 计算标准差 sd2 - function ( x ) { # 异常处理,当输入的数据不是数值类型时报错 if (! is.numeric ( x )){ stop ( "the input data must be numeric!\n" ) } # 异常处理,当仅输入一个数据的时候,告知不能计算标准差 if ( length ( x ) == 1 ){ stop ( "can not compute sd for one number, a numeric vector required.\n" ) } ## 初始化一个临时向量,保存循环的结果, ## 求每个值与平均值的平方 x2 - c () ## 求该向量的平均值 meanx - mean ( x ) ## 循环 for ( i in 1 : length ( x )){ xn - x - meanx x2 - xn ^ 2 } ## 求总平方和 sum2 - sum ( x2 ) # 计算标准差 sd - sqrt ( sum2 /( length ( x )- 1 )) # 返回值 return ( sd ) } ## 程序的检验 ## 正常的情况 sd2 ( c ( 2 , 6 , 4 , 9 , 12 )) ## 一个数值的情况 sd2 ( 3 ) ## 输入数据不为数值类型时 sd2 ( c ( "1" , "2" )) 这样,一个完整的函数就编写完成了。当然,实际情况下,函数往往更为复杂,可能要上百行。但是好的编程人员往往将复杂的函数编写成小的函数。以便于程序的修改和维护,即使其中出现错误,也很好修改。 再有就是编写 R 函数时一定要注意缩进,编辑器用 Notepad ++ , TinnR, Rstudio 等,同时用等距字体(如 Consolas, Courier new 等)和语法高亮显示。这样便于快速寻找到其中的错误。 感谢 黄继红博士,杜彦君博士,毛岭峰博士,饶米德,冯刚对本文提出的意见和建议。 2011 年 8 月 19 日 于中科院植物所 2011 年 8 月 22 日修改
个人分类: 统计分析|44354 次阅读|3 个评论
excel中几种函数的应用
harmonica028 2011-7-10 15:44
excel中几种函数的应用
这几天分析数据,工作量巨大。琢磨着怎么省时省力,通过度娘新学了几个 excel 函数,帮助不小 Vlookup (说明较繁琐,建议直接看实例) 用途: 在表格或数值数组的首列查找指定的数值,并由此返回表格或数组当前行中指定列处的数值。 语法: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数: Lookup_value 为需要在数组第一列中查找的数值。 Lookup_value 可以为数值、引用或文本字符串。 Table_array 为需要在其中查找数据的数据表。可以使用对区域或区域名称的引用,例如数据库或数据清单。 Table_array 的第一列中的数值可以为文本、数字或逻辑值。文本不区分大小写。 Col_index_num 为 table_array 中待返回的匹配值的列序号。 Col_index_num 为 1 时,返回 table_array 第一列中的数值; col_index_num 为 2 ,返回 table_array 第二列中的数值,以此类推。如果 col_index_num 小于 1 ,函数 VLOOKUP 返回错误值值 #VALUE! ;如果 col_index_num 大于 table_array 的列数,函数 VLOOKUP 返回错误值 #REF! 。 Range_lookup 为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值;如果 range_value 为 FALSE ,函数 VLOOKUP 将返回精确匹配值。如果找不到,则返回错误值 #N/A 。如果 range_lookup 为 TRUE ,则 table_array 的第一列中的数值必须按升序排列: … 、 -2 、 -1 、 0 、 1 、 2 、 … ,否则,函数 VLOOKUP 不能返回正确的数值。如果 range_lookup 为 FALSE , table_array 不必进行排序。 实例: F 列单元格的公式为 =VLOOKUP(E2,$A$2:$C$15,2,FALSE) G 列单元格的公式为 =VLOOKUP(E2,$A$2:$C$15,3,FALSE) Hlookup (说明较繁琐,建议直接看实例) 用途: 在表格或数值数组的首行查找指定的数值,并由此返回表格或数组当前列中指定行处的数值。 语法: HLOOKUP(lookup_value,table_array,row_index_num,range_lookup) 参数: Lookup_value 为需要在数组第一行中查找的数值。 Lookup_value 可以为数值、引用或文本字符串。 Table_array 为需要在其中查找数据的数据表。可以使用对区域或区域名称的引用,例如数据库或数据清单。 Table_array 的第一行中的数值可以为文本、数字或逻辑值。文本不区分大小写。 Row_index_num 为 table_array 中待返回的匹配值的行序号。 Row_index_num 为 1 时,返回 table_array 第一行中的数值; row_index_num 为 2 ,返回 table_array 第二行中的数值,以此类推。如果 row_index_num 小于 1 ,函数 HLOOKUP 返回错误值值 #VALUE! ;如果 row_index_num 大于 table_array 的行列数,函数 HLOOKUP 返回错误值 #REF! 。 Range_lookup 为一逻辑值,指明函数 HLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值;如果 range_value 为 FALSE ,函数 HLOOKUP 将返回精确匹配值。如果找不到,则返回错误值 #N/A 。如果 range_lookup 为 TRUE ,则 table_array 的第一行中的数值必须按升序排列: … 、 -2 、 -1 、 0 、 1 、 2 、 … ,否则,函数 HLOOKUP 不能返回正确的数值。如果 range_lookup 为 FALSE , table_array 不必进行排序。 实例: A 列的数值是为了实现自动计算添加的 C10 单元格的公式为 =HLOOKUP(1,$C1:$H$7,A1,FALSE) C10 单元格下拉自动计算以下单元格,则 C11 单元格公式为 =HLOOKUP(1,$C2:$H$7,A2,FALSE) Proper 用途: 将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。 语法: PROPER(text) 参数: Text 是需要进行转换的字符串,包括双引号中的文字串、返回文本值的公式或对含有文本的单元格引用等。 实例: 如果 A1=ANNU REV PHARMACOL ,则公式 “=PROPER(A1)” 返回 “Annu Rev Pharmacol” Trim 用途: 除了单词之间的单个空格外,清除文本中所有的空格。在从其他应用程序中获取带有不规则空格的文本时可以使用 语法: trim ( text ) 参数: Text 是需要进行转换的字符串,包括双引号中的文字串、返回文本值的公式或对含有文本的单元格引用等 实例: =TRIM(" First Quarter Earnings ") ,返回 First Quarter Earnings
个人分类: 工作笔记|5511 次阅读|1 个评论
Lingo模型的函数
supermac 2011-6-5 16:23
1. 数学函数 l @abs(x) :返回 x 的绝对值; l @sin(x) :返回 x 的正弦值,用弧度值; l @cos(x) :返回 x 的余弦值; l @tan(x) :返回 x 的正切值; l @exp(x) :返回常数 e 的 x 次方; l @log(x) :返回 x 的自然对数; l @lgm(x) :返回 x 的 Gamma 函数的自然对数; l @sign(x) :符号函数,如果 x0 返回 -1 ,否则返回 1 ; l @floor(x) :返回 x 的整数部分。当 x=0 时,返回不超过 x 的最大整数;当 x0 时,返回不低于 x 的最大整数; l @smax(x) :返回 x1...xn 中的最大值; l @smin(x) :返回 x1...xn 中的最小值; l @sqr(x) :平方函数,返回 x 的平方的值; l @sqrt(x) :平方根函数,返回 x 的正的平方根的值; l @pow(x,y) :指数函数,返回 x 的 y 次方的值; l @mod(x,y) :模函数,返回 x 对 y 取模的结果,既 x 除以 y 的余数 , 这里 x 和 y 应该是整数。 2. 集合操作函数 l @in(set_name,primitive_index_1 ) 如果元素在指定集中,返回 1 ;否则返回 0 。 l @index( primitive_set_element) 该函数返回在集 set_name 中原始集成员 primitive_set_element 的索引。如果 set_name 被忽略,那么 LINGO 将返回与 primitive_set_element 匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。 l @wrap(index,limit) 该函数返回 j=index-k*limit ,其中 k 是一个整数,取适当值保证 j 落在区间 内。该函数相当于 index 模 limit 再加 1 。该函数在循环、多阶段计划编制中特别有用。 l @size(set_name) 该函数返回集 set_name 的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。 3. 集合循环函数 l @for :该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过 @for 函数允许只输入一个约束,然后 LINGO 自动产生每个集成员的约束。 l @sum :该函数返回遍历指定的集成员的一个表达式的和。 l @min 和 @max :返回指定的集成员的一个表达式的最小值或最大值。 4. 变量界定函数 l @bnd(L,x,U) :限制 L=X=U 。注意 LINGO 中没有与 LINDO 命令 SLB , SUB 类似的函数 @SLB 和 @SUB; l @Bin(x) :限制 x 为 0 或 1; l @Free(x) :取消对 x 的符号限制(即可取负数、 0 或正数) ; l @Gin(x) :限制 x 为正数。 5. 金融函数 l @fpa(I,n) :返回如下情形的净现值:单位时段利率为 I ,连续 n 个时段支付,每个时段支付单位费用。若每个时段支付 x 单位的费用,则净现值可用 x 乘以 @fpa(I,n) 算得。 l @fpl(I,n) :返回净现值。 6. 概率函数 l @pbn(p,n,x) :二项分布的累积分布函数。当 n 和(或) x 不是整数时,用线性插值法进行计算。 l @pcx(n,x) :自由度为 n 的χ 2 分布的累积分布函数。 l @peb(a,x) :当到达负荷为 a ,服务系统有 x 个服务器且允许无穷排队时的 Erlang 繁忙概率。 l @pel(a,x) :当到达负荷为 a ,服务系统有 x 个服务器且不允许排队时的 Erlang 繁忙概率。 l @pfd(n,d,x) :自由度为 n 和 d 的 F 分布的累积分布函数。 l @pfs(a,x,c) :当负荷上限为 a ,顾客数为 c ,平行服务器数量为 x 时,有限源的 Poisson 服务系统的等待或返修顾客数的期望值。 a 是顾客数乘以平均服务时间,再除以平均返修时间。当 c 和(或) x 不是整数时,采用线性插值进行计算。 l @phg(pop,g,n,x) :超几何( Hypergeometric )分布的累积分布函数。 pop 表示产品总数, g 是正品数。从所有产品中任意取出 n ( n ≤ pop )件。 pop , g , n 和 x 都可以是非整数,这时采用线性插值进行计算。 l @ppl(a,x) : Poisson 分布的线性损失函数,即返回 max(0,z-x) 的期望值,其中随机变量 z 服从均值为 a 的 Poisson 分布。 l @pps(a,x) :均值为 a 的 Poisson 分布的累积分布函数。当 x 不是整数时,采用线性插值进行计算。 l @psl(x) :单位正态线性损失函数,即返回 max(0,z-x) 的期望值,其中随机变量 z 服从标准正态分布。 l @psn(x) :标准正态分布的累积分布函数。 l @ptd(n,x) :自由度为 n 的 t 分布的累积分布函数。 l @qrand(seed) :产生服从 (0,1) 区间的拟随机数。 @qrand 只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个 m × n 的二维表, m 表示运行实验的次数, n 表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。 7. 输入和输出函数 输入和输出函数可以把模型和外部数据比如文本文件、数据库和电子表格等连接起来。 l @file 函数:该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格式为 @file(‘filename’) 。这里 filename 是文件名,可以采用相对路径和绝对路径两种表示方式。 @file 函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。 l @text 函数:该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为 @text( ) ,这里 filename 是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略 filename ,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。 @text 函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。我们把用接口函数产生输出的数据声明称为输出操作。输出操作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。 l @ole 函数: @OLE 是从 EXCEL 中引入或输出数据的接口函数,它是基于传输的 OLE 技术。 OLE 传输直接在内存中传输数据,并不借助于中间文件。当使用 @OLE 时, LINGO 先装载 EXCEL ,再通知 EXCEL 装载指定的电子数据表,最后从电子数据表中获得 Ranges 。为了使用 OLE 函数,必须有 EXCEL5 及其以上版本。 OLE 函数可在数据部分和初始部分引入数据。 @OLE 可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元 (cell) ,而对于 n 元的派生集每个集成员需要 n 个单元,这里第一行的 n 个单元对应派生集的第一个集成员,第二行的 n 个单元对应派生集的第二个集成员,依此类推。 @OLE 只能读一维或二维的 Ranges (在单个的 EXCEL 工作表 (sheet) 中),但不能读间断的或三维的 Ranges 。 Ranges 是自左而右、自上而下来读。 l @ranged(variable_or_row_name) :为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。 l @rangeu(variable_or_row_name) :为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。 l @status(): 返回 LINGO 求解模型结束后的状态: 0 Global Optimum (全局最优) 1 Infeasible (不可行) 2 Unbounded (无界) 3 Undetermined (不确定) 4 Feasible (可行) 5 Infeasible or Unbounded (通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界) 6 Local Optimum (局部最优) 7 Locally Infeasible (局部不可行,尽管可行解可能存在,但是 LINGO 并没有找到一个) 8 Cutoff (目标函数的截断值被达到) 9 Numeric Error (求解器因在某约束中遇到无定义的算术运算而停止) 通常,如果返回值不是 0 、 4 或 6 时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。
个人分类: 教学资料|9702 次阅读|0 个评论
R语言学习笔记(三)
热度 3 maolingfeng 2011-4-2 20:03
(联系方式: maolf小老鼠ibcas.ac.cn 或者 maolingfeng2008小老鼠163.com ) 3.22统计和作图(statistics and graphic) 1\quantile(x)函数为四等分点的边界数值 也可自己设置等分点,如 quantile(x,seq(0,1,0.1)),为十分 2、对于缺损值的处理,一定要加入,na.rm=T的参数设定 mean(vetor1,na.rm=T) 340.168 3\对于一个向量的基本统计如中值,最大最小,平均值,可以用summary() 4\直方图hist(x,breaks=a)其中a可以-c(0,1,4,20)枚举一些向量值 n - length(x) plot(sort(x),(1:n)/n,type="s",ylim=c(0,1)) 5、Q-Q plot 函数形式qqnorm(x) 6、对于箱式图boxplot case: data(IgM) par(mfrow=c(1,2)) boxplot(IgM) boxplot(log(IgM)) par(mfrow=c(1,1)) d对于两个向量的比较 a-rnorm(50) b-rnorm(50) boxplot(a,b) 7\hist(expend.lean,breaks=10,xlim=c(5,13),ylim=c(0,4),col="white") ###其中break代表的是分的group的组数, 8、一个矩阵的产生,并且赋予其行列名字 a-rnorm(24) caff.marital-matrix(a,nrow=4,byrow=T)##按行排列 caff.marital colnames(caff.marital)-c(1:6) rownames(caff.marital)-LETTERS ###字母的顺序为大写LETTERS 格式 caff.marital ##其中的rownames和colnames可以进行括号内双引号枚举 9、柱状图利用的函数是barplot,其中针对的是默认按照列来计算的,如果是行数据,怎进行t转置 beside=T barplot(prop.table(t(caff.marital),2), legend.text=colnames(caff.marital),col="white", beside=T) ##R语言将无法寻找到空白的位置放legend的内容,会覆盖其中的一个向量,因此,需要用函数locator(),见后面 10、对于t检验可以两个函数形式t.test()和wilcox.test,其中wilcoxon test在有些地方叫做Mann-Whitney test t test是假定为数据时从正态分布的里面出来的。 t检验可以个出95%置信区间的具体数值,t.test(x,conf.level=0.99,mu=34),mu中给出想要检测的值,缺省值mu=0 conf.level=0.99为给定具体的置信区间。 11、两组数据的显著性t检验, t.test(expend~stature)###里面包含了种不同的数值obese和lean两种类型, energy expend stature 1 9.21 obese 2 7.53 lean 3 7.48 lean ... 20 7.58 lean 21 9.19 obese 22 8.11 lean 例子:case expend - c(rnorm(10)) stature- c("obese","lean","obese","lean","obese","lean","obese","lean","obese","lean") d - data.frame(expend,stature) t.test(expend~stature) 11、两组数据变化var.test(expend ~ stature),t.test(vetor1~ vetor2,paired = T) 12\对于两组数据回归并且做回归线 线性回归为 veotr1- rnorm(20) vetor2- rnorm(20) plot(vetor1,vetor2) abline(lm(vetor1~vetor2)) 对于已经回归的函数可以除了summary可以提取到概况信息 外,还可以利用fitted()来提取 每个点对应的预测值(在回归最优化的那个方程下,计算的y值),和resid()来提取每个点对应的残差 a- lm(vetor1~vetor2) fitted(a) resid(a)###可以看到结果为每个元素对应的数值,这个可以变换预测值和真实值,并且进行回归分析 ####自编函数 vetor1- rnorm(20) vetor2- rnorm(20) pre_obv_grap- function(obvx,obvy) { regr- lm(obvy~obvx) b- fitted(regr) plot(b,obvy) a- list(b,regr,obvx,obvy) return(a) } pre_obv_grap(vetor1,vetor2) ########特别重要,当一个函数的返回值具有多个的时候,可以在函数里面用 ###这样函数内部的返回值的结构将不会变化,可以看到里面的对象list()里面不用““ lines((vetor1 ,fitted(regr)))###主要要利用is.na()函数去除数据中元素缺损的地方 ######明天重点关注残差作图page112 ## 在R中的指数回归形式可能是,有待进一步验证,再看看glm的帮助 glm(y~x,family=poisson(link=log),data=dataframe) 比如 glm(the.data$y~the.data$x+the.data$b) 可以写成 glm(y~x+b,data=the.data) 指数函数其实是非线性的,但是又是内在线性的,因为指数函数可以通过两端log之后变为线性函数,所以可以用glm线性模型做回归,poisson族里默认的link就是log,就是ln,得到的参数a,b可以直接写入函数y=exp(ax+b)中 x=c(1,1,2,2,2,3,3,4,5) y1=c(2.718,2.718,7.387524,7.387524,7.387524,20.07929023,20.07929023,54.57551085,148.3362385) glmexpo=glm(y1~x, family=poisson) summary(glmexpo) 意思就是通过这个回归出来的a,b对应的函数形式是y=exp(ax+b)而不是y=aln(x)+b的 resid(glmexpo) 回归函数R^2和P值的调用和获取的获取通过三步计算可以得到 1.计算模型残差平方和RSS. @#####函数resid()###里面要跟回归函数,这个回归函数就是指数或者其他的就可以选择 2.计算Y的样本方差SSY。 ####函数var() 3.R^2=1-(RSS/SSY) ####计算线性回归函数的R平方的函数,等同于cor(y,x) R_squa- function(y,x)###请输入两个变量其中如果换回归模型,如指数回归模型,则lm()函数变化 { RSS- sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和 SSY- sum((y)^2-mean(y)^2)###计算y值和平均值平方差的和 R_squa- 1-(RSS/SSY) return(R_squa) } a- read.csv("j1.csv",header= TRUE, row.names= 1) jjj- R_squa(a$ty,a$d) jjj ###测试关于指数回归的函数形式,明天继续研究? R_squa2- function(y,x)###请输入两个变量其中如果换回归模型,如指数回归模型,则lm()函数变化 { y- log(y) RSS- sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和 SSY- sum(y^2-(mean(y))^2)###计算y值和平均值平方差的和 R_squa- 1-(RSS/SSY) return(R_squa) } a- read.csv("j1.csv",header= TRUE, row.names= 1) jjj- R_squa2(a$ty,a$d) jjj summary(lm(a$ty~a$d)) 0.3174286#####明天印证excel,并且对a,和b,值进行反推 a- read.csv("j1.csv",header= TRUE, row.names= 1) y- log(a$ty) x- a$d RSS- sum(resid(lm(y~x))^2)###计算x,y线性回归的残差平方和 SSY- sum(y^2-(mean(y))^2)###计算y值和平均值平方差的和 R_squa- 1-(RSS/SSY) RSS- sum(resid(glm(a$ty~a$d,family=poisson))^2) Excel是这样拟合的,对拟合模型Y=a*ebX,先将模型转化为 ln(Y)=ln(a)+bX,然后对这个方程式用最小二乘法进行线性拟合。 ###用Linest帮助中R2定义来解决,引文如下: ####回归分析时,Microsoft Excel 计算每一点的 y 的估计值和实际值的平方差。这些平方差之和称为残差平方和 (ssresid)。然后 Microsoft Excel 计算总平方和 (sstotal)。当 const = TRUE 或被删除时,总平方和是 y 的实际值和平均值的平方差之和。当 const = FALSE 时,总平方和是 y 的实际值的平方和(不需要从每个 y 值中减去平均值)。回归平方和 (ssreg) 可通过公式 ssreg = sstotal - ssresid 计算出来。残差平方和与总平方和的比值越小,判定系数 r2 的值就越大,r2 是表示回归分析公式的结果反映变量间关系的程度的标志。r2 等于 ssreg/sstotal。 那么可以用公式计算ssreg和sstotal,然后可以得到R2 22.关于两个向量获取并调用其检验值P值的办法 sum.rst- summary(lm(y~d)) p_value- sum.rst$coefficients p_value ##计算提取回归p值的函数,记住是线性回归 p_value- function(y,x)##输入两个向量 { sum.rst- summary(lm(y~x)) p_value- sum.rst$coefficients return(p_value) }
个人分类: R语言学习笔记|24680 次阅读|3 个评论
R语言学习笔记(二)Introductory statistics whith R -Peter Da
热度 1 maolingfeng 2011-3-21 23:32
(cases form Introductory statistics whith R by Peter Dalgaard) ###R镜像官方网站( http://ftp.ctex.org/mirrors/CRAN/ ) 1、对矩阵的操作,可以利用matrix函数,并且,用rownames()函数给矩阵赋予名字 x - matrix(1:12,nrow=3,byrow=T) rownames(x) - LETTERS x A 1 2 3 4 B 5 6 7 8 C 9 10 11 12 2、对于矩阵的合并,按行合并或者按列合并cbind()\rbind() cbind(A=1:4,B=5:8,C=9:12) A B C 1 5 9 2 6 10 3 7 11 4 8 12 rbind(A=1:4,B=5:8,C=9:12) A 1 2 3 4 B 5 6 7 8 C 9 10 11 12 3、因子的定义 text.pain - c("none","severe", "medium", "medium", "mild") factor(text.pain) 4、利用data.frame()来讲两个向量合并成一个矩阵 vetor1 - rnorm(20) vetor2 - rnorm(20) d - data.frame(vetor1,vetor2) 5、条件选择,可以利用条件,对别的向量进行操作 vetor1 - rnorm(20) vetor2 - rnorm(20) a- vetor1 ##选出向量1中,当向量vetor2中数大于0所对于的数值。 6、对于缺损值NA,利用is.na(x)来寻找 7、d ,对于数据库d,在 , 1, mean)##代表对于矩阵a4,从2列到第6列开始,取平均值mean,其中参数“1”为按 ##行计算,如果括号中参数为2,则按列计算,mean可以变为sd,sum、中值median等计算。 case: m - matrix(rnorm(12),4) apply(m, 2, min) result: -1.1616653 -0.7892404 0.3189893 lapply(thuesen, mean, na.rm=T)和sapply(thuesen, mean, na.rm=T)是等效的,其中对于na.rm=T 代表的是缺损值不进入计算 6\高斯分布随机函数Gaussian(normal):形式为rnorm(n,mean=0,sd=1); 随机数runif(n, min=0, max=1) 7\排序range(x)其功能等同于才c(min(x),max(x)) 8\关于协方差的计算var(x,y),如果是矩阵或者数据框,则用cov(x,y)来表示。 ####二、关于制图 1、基本的制图函数形式 x - runif(50,0,2)##产生两个含50个元素,从0-2的的随机向量x,y。 y - runif(50,0,2) plot(x, y, main="Main title", sub="subtitle",xlab="x-label", ylab="y-label") ###其中main为主标题,sub为副标题,xlab为x轴的名字,ylab=为y轴的名字。其他参数还有很多,比如 ###add=FALSE为不叠加到前一个图形上,如果为TURE叠加到前面一个图上,如果有的话;axes=TURE则 绘制边框,如果是FALSE则不绘制边框。type="p":点图;“l”线图;“b”点连线图。xlim=c(1,10),xlim=rang(x) 用来指定xy轴的上下限 2、部分比较有用的绘图低级命令 points(x,y)添加点 lines(x,y)添加线 text(x,y,labels,)在(x,y)处添加用labels指定的文字,典型用法是plot(x,y,type="n");text(x,y,name) abline(h=y)在纵坐标y处化直线 abline(v=x)在横坐标x处画直线,很有用的函数 abline(lm.obj)画由lm.obj确定的回归线;如lm.obj-lm(x~y),执行abline(lm.obj)既添加上了回归线 3、关于坐标轴axis的设定 axis(2,at=seq(0.2,1.8,0.2))##其中,2代表y轴,如果是1则代表x轴,坐标轴的形式中的分界点 at为从0.2开始到1.8结束,中间间隔为0.2 box()设置外边框 4、联合不同的图形 x - rnorm(100) hist(x,freq=F) curve(dnorm(x),add=T) h - hist(x, plot=F) ylim - range(0, h$density, dnorm(0)) hist(x, freq=F, ylim=ylim) curve(dnorm(x), add=T) 5、编写函数的相关函数 x - y/2 repeat{ x - (x + y/x)/2 if (abs(x*x-y) 1e-10) break } x ###if给出条件语句,如果符合那么执行下面的步骤,case中即break中断 x - seq(0, 1,.05) plot(x, x, ylab="y", type="l") for ( j in 2:8 ) lines(x, x^j) ##for语句的应用及相关的格式 6、ls()给出所有的工作空间内的对象;rm(height, weight, bmi)移除相关的对象;rm(ls())移除所有对象 7、保存工作空间及所有的计算过程save.image("ZDVI_y2_3.rdata")注意保存文件名的后缀名.rdata 8、移除文件包detach("package:survival") 基本的学习结束。 三、概率和分布(probablity and distributions) 1\随机采样 sample(1:40,5)###在1到40的数中随机采集5个数 sample(c("H","T"), 10, replace=T)##当采样个数大于向量的元素个数时,利用replace可以重复 "T" "T" "T" "T" "T" "H" "H" "T" "H" "T" sample(c("succ", "fail"), 10, replace=T, prob=c(0.9, 0.1))##不均一的概率采样,其中prob中 设置0.9代表采集到succ的概率为90% "succ" "succ" "succ" "succ" "succ" "succ" "succ" "succ" "succ" "succ" 2、1/choose(40,5)###函数40个数中选择5个的概率 3、画随机曲线,dnorm(x),表示x的密度, x - seq(-4,4,0.1) plot(x,dnorm(x),type="l") 等效函数为curve(dnorm(x), from=-4, to=4); 4、1-pnorm(160,mean=132,sd=13)###对于平均值为132,标准差为13的一组数列,其中一个数值为160或者比这更大的概率为 0.01562612 5、pbinom(16,size=20,prob=.5) 0.9987116 6、###关于正态分布95%自信区间的获取 xbar - 83###一组数的平均值 sigma - 12###标准差sd n - 5 ###数据的长度length sem - sigma/sqrt(n)###平均的标准误差 sem 5.366563 xbar + sem * qnorm(0.025) 72.48173 xbar + sem * qnorm(0.975) 93.51827 ###获得95%置信区间的上下数值 In professional statistics they are used to create simulated data sets in order to study the accuracy of mathematical approximations and the effect of assumptions being violated. rbinom(10,size=20,prob=.5)###10为重演十次,20为可能性,prob=0.5为概率值 12 11 10 8 11 8 11 8 8 13 ###测试抛硬币的函数哪个要好点的算法,两个好像差不多 a-rbinom(10000,size=1,prob=.5)####注意两种选择,size等于1 b-sample(c(0,1), 10000, replace=T, prob=c(0.5,0.5)) sum(a) sum(b) ###关于正态分布的自编函数normal.fun() normal.fun- function(vetor1,a)##a的数值为0.05或者是0.001自己设定 { xbar - mean(vetor1)###一组数的平均值 sigma - sd(vetor1)###标准差sd n - length(vetor1) ###数据的长度length sem - sigma/sqrt(n)###平均的标准误差 border1 - xbar + sem * qnorm(a/2) border2 - xbar + sem * qnorm(1-a/2) vetor2 - c(border1,border2) return(vetor2) } b-rnorm(20) normal.fun(b,0.05)
个人分类: R语言学习笔记|20162 次阅读|1 个评论
R语言学习笔记(一)
maolingfeng 2011-3-12 23:30
(说明:前段时间的R语言学习笔记文件坏了,现在记录在博客上,以便于自己学习之用,感兴趣的人还可以看看。记录的东西也不一定正确,请大家指教,里面可能会引用到一些别人的资料等,作为学习之用) 读书笔记 Basic knowledge for R 2011-3-10 相关的函数记录与整理 1、source("文件名.r"):调取主程序的文件,在程序结构复杂的时候很有用,可以将一部分复杂的运算主程序放入其中。 2、install.packages("fields"):安装程序包 3、library(fields):导入程序包 4、t(x)转置函数,对于csv中横排的转置很有用 5、dev.off():中断函数 6、a - as.character(b):因子型转化为字符型函数 7、position - regexpr('_',a):regexpr()函数对字符的定位很有用,返回值position为特定字符,如字符串a中’_’的位置 8、结合定位函数,对字符串如x345_xbt,进行拆分,利用函数substring(要拆分的字符串,开始的字符位置,结束的字符位置) namecol1 - substring(a, 2, position - 1) namecol2 - substring(a, position + 1, nchar(a)) 结合regexpr()函数,这两个命令返回的值为,namecol1-345;namecol2-xbt; 9、合并向量data.frame(vetor1, vetor2, vetor3) cbind(vetor1, vetor2, vetor3) 10、取名字相同的交集unique()函数 例如对包含行名的向量R1、R2、 R3取名字相同的行,组成新的向量。 nam1 - rownames(R1) nam2 - rownames(R2) nam3 - rownames(R3) tnam - unique(c(nam1,nam2,nam3))返回结果为只剩下名字相同的行的数值和rownames 或者取一个向量中唯一一个值的数据,合并重复数据。unique(x, incomparables = FALSE, ...)在R中三个点…,表示可传递参数 11、对程序包里面的具体的函数源代码,通过安装包后直接输入函数名回车,可以看到函数;注意找到对应的子函数。也可以在R镜像网页中的packages中,下载package的数据包,减压后,看文件夹得R函数中,这个包含程序注释,更好。 12、t检验函数 t.test(x, ...) ## Default S3 method: t.test(x, y = NULL,alternative = c("two.sided", "less", "greater"), mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95, ...) ## S3 method for class 'formula' t.test(formula, data, subset, na.action, ...) 13、对于一个向量x中选择某个符合条件的数值出来(大于某个数或者是某个条件limit),直接利用表达式y-x 14、判断两个向量的交集部分选择%in% 1:10 %in% c(1,3,5,9) 15、帮助已经加载的程序包有哪些函数,可以用主界面的helphtml帮助 16、regression with damped exponential correlation回归的函数为rdec(),需要的函数包为RDEC 17、相关常用的R运算 计算 log(x) log10(x) exp(x) sin(x) cos(x) tan(x) asin(x) acos(x) min(x) max(x) range(x) length(x) 统计检验 mean(x) sd(x) var(x) median(x) quantile(x,p) cor(x,y) t.test() lm(y ~ x) wilcox.test() kruskal.test() 统计检验 lm(y ~ f+x) lm(y ~ x1+x2+x3) bartlett.test binom.test fisher.test chisq.test glm(y ~ x1+x2+x3, binomial) friedman.test ... 18、ls() 列出工作空间中的对象;rm() 删除工作空间中的对象 19、对象类型转换 as.numeric() #转换为数值型 as.logical() as.charactor() as.matrix() as.dataframe()
个人分类: R语言学习笔记|24134 次阅读|0 个评论
函数的对应关系及其具体的表达形式
热度 3 liwei999 2011-3-4 02:40
函数的对应关系及其具体的表达形式 作者: mirror (*) 日期: 03/03/2011 07:05:59 这也是个比较难以理解的事情。 这类事情在日常也常见。比如说,“爱”可以认为是一种对应关系。如何来表达这个“爱”呢?这就是“爱”的具体表达的问题。应该说爱有不少种表达方式。比如说送个花儿、钻戒5的,也算是一类表达方式了。需要把握的事情是这里面有两个层次。1)是要有爱情,2)如何表达这个爱情。做一个变换就是:第一是要有函数,第二是要研究这个函数的表达式。具体地说就是:有函数比如说δ函数——δ(x),其具体表达形式可以用分散趋于零的高斯函数。 ---------- 就“是”论事儿,就“事儿”论是,就“事儿”论“事儿”。
个人分类: 镜子大全|3095 次阅读|2 个评论
数、变数和函数
热度 1 liwei999 2011-3-3 17:09
立委按:这是镜兄的最新“科普”。可谓字字珠玑,妙趣横生。与其说是科普,不如说是趣文。因为所普的科学,老妪能解,中学生亦能解。可是慢慢品咂其文字,是如此醇厚芬芳,馥郁三日而不绝。不得不击节赞叹。 数、变数和函数 作者: mirror (*) 日期: 03/03/2011 00:15:35 在说这些“数”之前,插一个事例让大家有些“自信” 。比如说,有人声称 “高温超导已经解释啦!” ,并且说: Quote 烦请认为超导仍然是谜的朋友提一个问题、并说出要达到“已解释”应该是怎样的标准,让我试着回答看看。 可见这位曹老师很有“自信”。师姐们往往就缺乏这类“自信”。理解微积分、格林函数等也需要有“自信”。 需要牢记一个口号:不懂发生学,一样生孩子。 镜某对“已解释”要求的标准不很高。只要求用1-2个归一的因子,来解释超导临界温度高低和临界磁场的大小。 言归正传。 “数”比较好理解。1、2、3、4、5等等的。“变-数”是说这个数不固定,可以是2、可以是3,也可以是“不三不四”的某一个数。“函-数”是说把“变数”外加包装出来的东西。 把“变数”包起来的表达方式就是(变数)。嫌写“变数”麻烦就代以x,(变数)=(x)。 为了强调“加”了包装,就给个字符f=“房客神”,f(x)。因为x是可以变的,对应着每一个具体的x,比如说x1,x2,都有一个f(x1)、f(x2)值对应着。因此,也可以说“房客神”就是这种对应关系。也就是说,包起x的那个“数”f(x)叫做x的函数。作为对称性的思考,有函数,就可以有“逆”函数。从结构上说,如果F是f的逆函数,那么就有F(f(x))=x。 有函数,就可以有函数的函数。表达式就是g(f(x))。这里的g和f分别代表不同的对应关系。这样的说法比较抽象,说女婿他妈妈(=亲家母)就容易理解了。女婿是个对应,妈妈又是个对应。 对应着中学阶段的“未知数”问题,高等数学要探讨的是“未知函数”。与“函”可以有各式各样一样,数学上的“函数”也可以是各式各样。四则演算的符号可以读成“函”,根号,幂次,三角的正弦(sin)等等的也都是“函”。这个sin包上一个角度x,sin(x)就是所谓的“三角函数”。 需要习惯一些说法和用法。比如,三角形的面积是周长的函数的说法,圆的面积是半径的函数。当然,也可以说圆半径是圆面积的函数,表达式就是面积=S(r)。 ---------- 就“是”论事儿,就“事儿”论是,就“事儿”论“事儿”。
个人分类: 镜子大全|2953 次阅读|1 个评论
[转载]MATLAB 线性回归
jroy 2011-1-11 21:45
二、一元线性回归 2 . 1 .命令 polyfit 最小二乘多项式拟合 =polyfit ( x , y , m ) 多项式 y=a1xm+a2xm-1+ … +amx+am+1 其中 x= ( x1 , x2 ,…, xm ) x1…xm 为( n*1 )的矩阵 ; y 为( n*1 )的矩阵; p= ( a1 , a2 ,…, am+1 )是多项式 y=a1xm+a2xm-1+ … +amx+am+1 的系数; S 是一个矩阵,用来估计预测误差 . 2 . 2 .命令 polyval 多项式函数的预测值 Y=polyval ( p , x )求 polyfit 所得的回归多项式在 x 处的预测值 Y ; p 是 polyfit 函数的返回值; x 和 polyfit 函数的 x 值相同。 2 . 3 .命令 polyconf 残差个案次序图 =polyconf ( p , x , S , alpha )求 polyfit 所得的回归多项式在 x 处的预测值 Y 及预测值的显著性为 1-alpha 的置信区间 DELTA ; alpha 缺省时为 0.05 。 p 是 polyfit 函数的返回值; x 和 polyfit 函数的 x 值相同; S 和 polyfit 函数的 S 值相同。 2 . 4 命令 polytool ( x , y , m )一元多项式回归命令 2 . 5 .命令 regress 多元线性回归(可用于一元线性回归) b=regress( Y, X ) =regress(Y,X,alpha) b 回归系数 bint 回归系数的区间估计 r 残差 rint 残差置信区间 stats 用于检验回归模型的统计量,有三个数值:相关系数 R 2 、 F 值、与 F 对应的概率 p, 相关系数 R 2 越接近 1 ,说明回归方程越显著; F F1- α( k , n-k-1 )时拒绝 H 0 , F 越大,说明回归方程越显著;与 F 对应的概率 p 时拒绝 H 0 ,回归模型成立。 Y 为 n*1 的矩阵; X 为( ones(n,1),x1,…,xm )的矩阵; alpha 显著性水平(缺省时为 0.05 )。 三、多元线性回归 3 . 1 .命令 regress (见 2 。 5 ) 3 . 2 .命令 rstool 多元二项式回归 命令: rstool ( x , y ,’ model ’ , alpha ) x 为 n*m 矩阵 y 为 n 维列向量 model 由下列 4 个模型中选择 1 个(用字符串输入,缺省时为线性模型): linear (线性): purequadratic (纯二次): interaction (交叉): quadratic (完全二次): alpha 显著性水平(缺省时为 0.05 ) 返回值 beta 系数 返回值 rmse 剩余标准差 返回值 residuals 残差 四、非线性回归 4 . 1 .命令 nlinfit =nlinfit(X,Y,’’model’,beta0) X 为 n*m 矩阵 Y 为 n 维列向量 model 为自定义函数 beta0 为估计的模型系数 beta 为回归系数 R 为残差 J 4 . 2 .命令 nlintool nlintool(X,Y,’model’,beta0,alpha) X 为 n*m 矩阵 Y 为 n 维列向量 model 为自定义函数 beta0 为估计的模型系数 alpha 显著性水平(缺省时为 0.05 ) 4 . 3 .命令 nlparci betaci=nlparci(beta,R,J) beta 为回归系数 R 为残差 J 返回值为回归系数 beta 的置信区间 4 . 4 .命令 nlpredci =nlpredci(‘model’,X,beta,R,J) Y 为预测值 DELTA 为预测值的显著性为 1-alpha 的置信区间; alpha 缺省时为 0.05 。 X 为 n*m 矩阵 model 为自定义函数 beta 为回归系数 R 为残差 J
个人分类: Matlab|25237 次阅读|0 个评论
mirror - 有几个有趣的话题,可惜没有时间细论
liwei999 2010-2-26 05:51
有几个有趣的话题,可惜没有时间细论。 (6449 bytes) Posted by: mirror Date: February 25, 2010 08:30AM 一个是李老师的函数 ,一个是有人说废珠算 ,还有就是熵的话题 等等。 对函数的译法李老师有意见。这个译法不是国人的原装,而是来自英国人传教士伟烈亚力的口译和国人李善兰的笔述。微分之数有二,一曰常数、一曰变数。变数以天地人等字代之,常数以甲乙子丑等字代之。中略。。。凡此变数中函彼变数,则此为彼之函数。用今天的符号就是y=f(x)。函彼变数就是F括号彼变数。F括号彼变数说起来麻烦,就说是函数。这是个符号学的问题。有趣的是当初老祖宗把直线的y=ax+b写成地=甲天+乙。 总体来说理工地术语在翻译上问题不大。要命的是法律上的制度上的词汇和概念不好移植。比如说研究研究在字面上的意思与在实际生活中的意思显然不同。而外国人只能理解字面的意思,过些日子就要问研究的结果。殊不知,研究研究就是不办的意思呢。 不知道为什么,人们对时间增加的原理远不如对熵增加的原理感兴趣。也许是人这种动物对时间有特殊的感觉。至少除了人,没有其它动物作日历。人们都按照日历过日子。著名的《鲁滨逊漂流记》就有记日子的描述。原子分子不知道时间,如何过日子呢?它们就要有它们的日历。回到相空间(这是个术语)中来熵增加的原理与时间增加的原理是对自然等价的两个束缚条件。 PV=NRT的公式是个常识了。很少有人问道R是什么。曰(理想)气体常数。这个东西差一点儿就是S了。当然也不会有很多人问为什么是PV结对这样的问题了。走得更远一些,为什么叫热力学?葛老师某一天如果能够觉得aha,原来是如此的热力学,就可以不是上政治课式样的教书了。 力学的洋文有几种。mechanics,dynamics和analytical mechanics。什么是主流力学?当然是第三个analytical mechanics,国人称之为分析力学。热力学就是热的分析力学。分析力学的舞台就是相(位)空间。这个理论可以扩展到电磁的力学、相对论的力学以及量子论的力学。 相(位)空间里最重要的事情是不能缺项(相)。缺项力学方程就写不出来了。因此,力学上的变量的选择以及量之间都是有数学保证的东西。一旦人们发现了自然法则,那么自然就不那么自然了。利用这个体系,就可以解释为什么要PV配对,如果承认PV配对,ST配对就是同样的道理了。甚至说恒温动物的恒温也是因为这个第二法则的作用。必须这样来匹配熵的变化。学化学时往往只注意质量的匹配和能量的匹配,并不大介意熵的匹配。熵在反应式上不好直接表达出来是与反应式直交的一个轴向。作化学工程的人自然懂得如何做好熵的匹配,因为不做好这个匹配反应就无法持续下去。地球上最大的、最好用的也最普遍的熵匹配物质就是水了。地球是个有水的行星。之所以用水,工业上说是冷却,物理的本质则是配熵=保证需要的反应系统能够持续下去。水分的蒸发可以有效地带走系统中熵。这是个很隐性的事情。就如同人们上厕所要隐藏一样。 说了这么些大话,也该说说珠算的事情了。 现代的孩子学学珠算好。第一可以提供些就业机会,第二是习惯数字文化,第三知道机械计算的原理。也就是说:算盘是一个修养、一个奢侈,是个非日常的事情。与练琴、习字跳舞等等的都是一个路数。这些对孩子有用么?有这样疑问的只怕是连孩子都不要生好了。学东西是要花钱的。没有条件、没有实力,也不要与这样作的人家去攀比,对孩子的爱心有各种表达方式。 如何使用机械计算(相对于人脑)?算盘是个很好的例子。城里的孩子与乡下的差在哪里?差在经历得多寡。算盘也是一个经历。能看出来算盘与计算机当中的道理是一样的远比敲几个键算数字有意义。知道敲键的最多不过是当个打字员,而能看出算盘与计算机当中的道理是一样孩子能做的事情就多了,选择性也多了。可以这样说:算盘是儿童理解数字、运算最好的道具了。以为珠算是要实用而没有意义的人大约忘记了需要先上小学而后上大学的道理了。为什么不上来就教方程而要算鸡兔问题呢?这是为了孩子的大脑发育。先鸡兔后方程,可以形成一个思考方法。而先方程,小孩子能否理解暂且不论,鸡兔的思路就形成不了了。这样的问题与孩子的性教育也是挂在一起的。一定要让多数人做到先爱而后性。如果次序颠倒了,麻烦就多了。 什么是孩子的财富呢?良好的习惯!而各种学习就是培养良好习惯的实践。说句不中听的话,穷人很难这样去生活。诸如 引用: 珠算,可以休矣,什么珠算协会,把算盘放进博物馆后,也解散了吧。 云云的,明显的是破坏就业。这种思路是缺德的思路。不是说要对骗子们宽容,而是说:要搞活经济、开辟活路的话,其代价必然是要对骗子们宽容。不论人们在心情上愿意与否。好的拿来、坏的剔除不是很好么?对付这样的思维,镜某知道一个漂亮的段子: 引用: 教授说:下面我们讲一下辩证法的用途。我们要举一个更加复杂的例子:如何看待中国传统文化?   我说:那一定要用辩证的观点。   对。我们有许多大牌的辩证法学者,他们会充分利用辩证法的三大规律,理论联系实际,旁征博引,纵横捭阖。下笔万言,紧绕主体。最后给你得出一个结论:要取其精华,去其糟粕你佩服不佩服?   是啊。辩证法不是很有用吗?   以前我也这样认为。直到我见到一只丧家的野狗它改变了我的看法。  野狗?我莫名其妙。   是的。我家屋后有个垃圾堆,有一天来了一只丧家的野狗。它对其他东西看也不看,喀哧一口,咬住一块骨头。   这毫不奇怪,所有的狗都会这样。我说。   不错。问题是对于狗来说,这块骨头就是精华。垃圾堆里除了骨头以外,还有砖头、铁块、破水桶等等糟粕。他为什么只要骨头这个精华呢?他怎么知道取其精华,去其糟粕?难道它已经充分理解了大牌学者们的论述了吗?   好像不会。   肯定不会,所以说大牌学者们通过精确的论述,得到的精妙结论,其实是连一只丧家的野狗早就知道的东西。既然如此,我们为什么还要为他们喝彩,对他们崇拜呢? 是啊,为什么?   唯一的解释就是:辩证法已经成功地把你变成了一个傻瓜。   我明白了。   你明白以后一定要问:你说的没用。取其精华,去其糟粕谁都知道。问题是什么是精华,什么是糟粕。       对,看他怎么说。   你难不倒他。他又会充分利用辩证法的三大规律,理论联系实际,旁征博引,纵横捭阖。下笔万言,紧绕主体。最后给你得出一个结论:具体问题,具体分析。高明不高明?   是有道理。   可是我认为:这不仅是无聊,无用的问题,已经近于无赖了。   这怎么说?   难道世界上有人会具体问题,抽象分析吗?那只丧家的野狗,来到垃圾堆前,难道会象亚里斯多德一样,先把各种东西分门别类,搞清其内涵和外延,再通过归纳演绎,最后确定它是吃砖头还是吃骨头吗?这可能吗?   不可能。那样的话,他连吃砖头都有可能。   对,孺子可教。没有人会具体问题,抽象分析。具体问题,具体分析这句话,等于没说。不过辩证法学者倒是喜欢用抽象的方法,分析具体问题。因为辩证法是放之四海而皆准的普遍真理。所以如果你看到一只吃砖头的狗,千万不能小视。它可能是一个著名学者。  教授又收拾好讲义,说:辩证法的根本在于使用全面的,发展的,联系的观点看问题。象所有的谎言一样,这话听起来很显真理。下一节课讲辩证法的渊源,以及它和形而上学的关系。 说没有时间,又写了这么多。时间就如同女子的胸部挤一挤总会有的。选择这个说法的道理是这个它不违反第二法则。海绵有水挤不出来是第二法则的缘故。
个人分类: 镜子大全|4100 次阅读|1 个评论
关于电磁场泛函法的简单总结和归纳
williammilo 2010-1-28 09:22
我的博客已经搬家到 xiongbox.com 欢迎访问熊伟博士的网站! 本文永久链接 http://xiongbox.com/电磁场泛函法/ 1.泛函的 数学意义 是函数空间对数值空间的某种确定的 映射关系 ,泛函定义域中的每一种可取函数对应一个确定的泛函值。 2.电磁场的泛函法以泛函方程为电磁场问题 数学模型 的各种 近似解法 ,区别于以函数方程为数学模型的各种经典的 严格解法或近似解法 。 3.电磁场问题中的两类泛函── 参量值 的泛函和 误差 泛函,分别对应于两类求解方法,即 变分法 和 加权余量法 ,统称为泛函法。 4.利用 有限差分法 的概念,将加权余量法的子域未知函数表示成离散结点上未知函数取样值的 多项式插值函数 ,就发展成有限元法 。单矩法在实质上是数学边界上的 边界元法 与界内的 有限元法 (或有限差分法),以及界外的 分离变量法 三者的联合。
个人分类: 电子信息工程与计算机科学|3333 次阅读|0 个评论
收集的C#函数(二) (转)
billzhenxing 2009-10-30 01:44
//-------------时间函数--------------------------------------------- public static string GetTime() { return DateTime.Now.ToString(HH:mm:ss); } public static string GetDateTime() { return DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss); } public static string GetDateTime(int relativeday) { //+1重载 //返回增加了relativeday数的时间,当然也可以用 AddHours 增加小时了,还有分秒等等。。 return DateTime.Now.AddDays(relativeday).ToString(yyyy-MM-dd HH:mm:ss); } public static int GetTimeSpan(DateTime Dt_1, DateTime Dt_2) {//返回两个时间差,差为两数之间的总秒数 TimeSpan Dt_3 = Dt_1 - Dt_2; int _day = Dt_3.Days; int _hours = Dt_3.Hours; int _minutes = Dt_3.Minutes; int _seconds = Dt_3.Seconds; return ((((((_day * 60) + _hours) * 60) + _minutes) * 60) + _seconds); } public static DateTime GetDateTime(string str) { //用字符串来创建时间对象 string )) { switch (_num) { case 1: _year = Int16.Parse(strArray ); break; case 2: _month = Int16.Parse(strArray ); break; case 3: _day = Int16.Parse(strArray ); break; case 4: _hours = Int16.Parse(strArray ); break; case 5: _minutes = Int16.Parse(strArray ); break; case 6: _seconds = Int16.Parse(strArray ); break; default: break; } _num++; } } if (_num = 6) { //创建时间对象,否则就出错提示 return new DateTime(_year, _month, _day, _hours, _minutes, _seconds); } else { return new DateTime(1, 1, 1, 1, 1, 1); } }
个人分类: 编程积累|2879 次阅读|0 个评论
收集的C#函数(一)(转)
billzhenxing 2009-10-30 01:41
刚才看到朋友的BLOG中的好东西就拿过来了!!真不错 // Utils收集各种函数 public class Utils { public static int GetStringLength(string str) {//计算字符串字节长度 return Encoding.Default.GetBytes(str).Length; } /* public static string Trim(string str) { if (str.Substring(0, 1) == ) { for (int i = 0; i str.Length; i++) { if (str.Substring(i, 1) == ) { str = str.Remove(i, 1); } else { break; } } } if (str.Substring((str.Length - 1), 1) == ) { for (int i = (str.Length - 1); i = 0; i--) { if (str.Substring(i, 1) == ) { str = str.Remove(i, 1); } else { break; } } } return str; }*/ public static string Trim(string str) //去除前后空格 { return new Regex(^ \\s*|\\s*$).Replace(str , ); } public static string Cut_str(string str, int len) {//截取指定长度字符 int _a = 0; int _b = 0; string _s = ; for (int _i = 0; _i str.Length; _i++) { _b += 1; if (new Regex(^ +$).IsMatch(str.Substring(_i, 1))) { _a += 2; } else { _a++; } if (_a == len) { _s = str.Substring(0, _b); break; } else if (_a len) { _s = str.Substring(0, (_b - 1)) + .; break; } } return _s; } public static string Ubb(string str) {//ubb转换代码,.*虽然能匹配所有但是还要加上 ?贪婪模式 否则会出现点小问题 str = Regex.Replace(str, \\ (.*?)\\ , b$1/b); str = Regex.Replace(str, \\ (.*?)\\ , u$1/u); str = Regex.Replace(str, \\ (.*?)\\ , i$1/i); str = Regex.Replace(str, \\ (.*?)\\ , b$1/b); str = Regex.Replace(str, \\ (.*?)\\ , img src=\$1\/img); str = Regex.Replace(str, \\ (.*?)\\ , a href=\$1\$2/a); str = Regex.Replace(str, \\ (.*?)\\ , div align=\$1\$2/div); str = Regex.Replace(str, \\ (.*?)\\ , img src=\images/$1.gif\/img); return str; } public static int GetInArrayID(string str, string ) {//这样比较区分大小写 return _i; } } } else { for (int _i = 0; _i _num; _i++) { if (str.ToLower() == str_2 .ToLower()) { return _i; } } } return -1; //不存在返回-1 } public static string MD5(string str) {//md5加密函数 byte .ToString(x).PadLeft(2, '0'); return ret; } public static void ServerAlert(string str,string url ) { HttpContext.Current.Response.Write(script language=\javascript\alert(\+str+\);); HttpContext.Current.Response.Write(window.location.href=\+url+\;); HttpContext.Current.Response.Write(/script); HttpContext.Current.Response.End(); //公用类中不能直接用Response.因为这时候不是页面,也就没有Response对象 //而因该使用HTtpcontext类来显示 } //------------读写Cookie值--------------- public static void WriteCookie(string strName, string strValue) {//写Cookie值 HttpCookie cookie = HttpContext.Current.Request.Cookies ; if (cookie == null) { cookie = new HttpCookie(strName); } cookie.Value = strValue; HttpContext.Current.Response.AppendCookie(cookie); } public static void WriteCookie(string strName, string strValue, int expires) {//写cookie值+1重载函数 加时间 HttpCookie cookie = HttpContext.Current.Request.Cookies ; if (cookie == null) { cookie = new HttpCookie(strName); } cookie.Value = strValue; cookie.Expires = DateTime.Now.AddMinutes(expires); HttpContext.Current.Response.AppendCookie(cookie); } public static void WriteCookie(string strName, string strKeyName,String strKeyValue) {//写cookie值+1重载函数 加子键/值 HttpCookie cookie = HttpContext.Current.Request.Cookies ; if (cookie == null) { cookie = new HttpCookie(strName); } cookie.Values = strKeyValue; HttpContext.Current.Response.AppendCookie(cookie); } public static void WriteCookie(string strName, string strKeyName, String strKeyValue, int expires) {//写cookie值+2重载函数 加子键/值 过期时间分钟计算 HttpCookie cookie = HttpContext.Current.Request.Cookies ; if (cookie == null) { cookie = new HttpCookie(strName); } cookie.Values = strKeyValue; cookie.Expires = DateTime.Now.AddMinutes(expires); //这里过期时间能影响到所有该集合下所有子键的过期时间 HttpContext.Current.Response.AppendCookie(cookie); } public static string GetCookie(string strName) {//读cookie值 if (HttpContext.Current.Request.Cookies != null HttpContext.Current.Request.Cookies != null) { return HttpContext.Current.Request.Cookies .Value.ToString(); } return ; } public static string GetCookie(string strName,string strKeyName) {//读cookie值+1重载,读取Cookie子键值 if (HttpContext.Current.Request.Cookies != null HttpContext.Current.Request.Cookies != null HttpContext.Current.Request.Cookies .Values != null) { return HttpContext.Current.Request.Cookies .Values .ToString(); } return ; } public static void setFile(string str) { //把一个值写如文件,调试用 string strFile = @E:\CandC++\c#\session事件\01.txt;//这是路径 FileStream fs = new FileStream(strFile, FileMode.Append, FileAccess.Write); //这里Append是追加模式,但是只能写模式下用这个模式 StreamWriter sw = new StreamWriter(fs);//创建一个写字符串的流 sw.WriteLine(str); sw.Close();//关闭流写入磁盘文件 } //------------字段验证函数---------------- public static bool validateName(string str) { return new Regex(^ +$).IsMatch(str); } public static bool validateLoginName(string str) { return new Regex(^ +$).IsMatch(str); } public static bool validateEmail(string str) { return new Regex(^ +?@\\w+?\\-?\\w*?\\-?\\w*?( \\.\\w+)+?$).IsMatch(str ); } public static bool validateTel(string str) { return new Regex((^( \\d{4}\\-)?\\d{7,8}$)|(^1\\d{10}$)).IsMatch(str ); } public static bool IsNumber(string str) {//判断是否数字 return new Regex(^ +?$).IsMatch(str); } //----------------Request操作类------------------- public static bool IsPost() {//判断是否是POST传输 return HttpContext.Current.Request.HttpMethod.Equals(POST); } public static bool IsGet() { return HttpContext.Current.Request.HttpMethod.Equals(GET); } public static string GetFormString(string str) {//因为取不到值Form或Querystring为null赋给其他数据类型出错所以这里更改下 if (HttpContext.Current.Request.Form == null) { return ; } else { return HttpContext.Current.Request.Form .ToString(); } } public static string GetQueryString(string str) {//获得查询字符串 if (HttpContext.Current.Request.QueryString == null) { return ; } else { return HttpContext.Current.Request.QueryString .ToString(); } } public static string GetServerString(string str) {//获得服务器变量值 if (HttpContext.Current.Request.ServerVariables == null) { return ; } else { return HttpContext.Current.Request.ServerVariables .ToString(); } } public static int GetInt(string strName, int defValue) {//根据不同类型返回整数 string str = ; switch (defValue) { case 1: if (Utils.GetFormString(strName) != ) { str=Utils.GetFormString(strName); } break; case 2: if (Utils.GetQueryString(strName) != ) { str = Utils.GetQueryString(strName); } break; case 3: if (Utils.GetServerString(strName) != ) { str = Utils.GetServerString(strName); } break; default: break; } if (str == ) { return 0; } else { return Int32.Parse(str); } } public static string GetUrlReferrer() {//获取上一页的连接地址 string str = ; try { str = HttpContext.Current.Request.UrlReferrer.ToString(); //本页直接打开获取这个值就是一个异常,所以处理下 } catch { } return str; } public static string GetCurrentFullHost() {//获得主机和端口号 HttpRequest request = HttpContext.Current.Request; if (!request.Url.IsDefaultPort) { return string.Format({0}:{1}, request.Url.Host, request.Url.Port.ToString()); } return request.Url.Host; } public static string GetHost() {//直接获得的主机头 return HttpContext.Current.Request.Url.Host; } public static string GetRawUrl() {//获得当前请求的从虚拟目录开始的:URl如有查询字符串则也包括在内 return HttpContext.Current.Request.RawUrl; } public static string GetUrl() {//获得当前请求从HTTp:// Url如有查询字符串,则也包括在内 return HttpContext.Current.Request.Url.ToString(); } public static string GetPageName() {//返回当前页名字 string .ToLower(); } public static int GetParamCount() {//返回表单参数的总个数,无则返回0 return HttpContext.Current.Request.Form.Count + HttpContext.Current.Request.QueryString.Count; //两个参数加起来就好了 } public static bool IsIP(string ip) {//判断是否为IP return Regex.IsMatch(ip, @^((2 \d|25 | ?\d\d?)\.){3}(2 \d|25 | ?\d\d?)$); } public static string GetIP() {//获取ID地址 string result = String.Empty; result = HttpContext.Current.Request.ServerVariables ; if (null == result || result == String.Empty) { result = HttpContext.Current.Request.ServerVariables ; } if (null == result || result == String.Empty) { result = HttpContext.Current.Request.UserHostAddress; } if (null == result || result == String.Empty || !Utils.IsIP(result)) { return 0.0.0.0; } return result; } 转自:http://hi.baidu.com/qdseashore/blog/item/45eaad774f44d113b051b9a2.html
个人分类: 编程积累|3810 次阅读|0 个评论
求一函数最小值
zjzhang 2009-9-29 12:39
求一函数最小值
个人分类: 数学|2622 次阅读|1 个评论
我们的哲学是否能够用数理分析的语言定义和诠释?
yangxintie 2009-7-2 01:08
我们的哲学是否应当向数理分析发展一步? 数学和辩证法分别属于两个不同的范围.一般来说,人们将数学归于自然科学,将辩证法归于社会科学.自然科学研究自然界的运动规律,社会科学研究人类社会的发展规律.那么处在两个不同的范围内的学科有没有相同处?有没有可能探索一下他们的内在联系呢?上个世纪,恩克斯曾经做过探索,现在二十一世纪,现代科学飞速的发展,发展的科学要求我们 尽量用数理分析的的概念来描述关系,也要求我们能够利用辩证法来指导数理分析。 比如处理自组织系统的演化数学模型的基本数学处理原理居然与矛盾论中主要矛盾与次要矛盾的关系原理有着惊人的相似。对于社会管理系统这样的复杂系统,其线性微分方程组的函数解一般都不易得到,那么是否可以通过一定的数学方法突出系统主要要素,忽略其次要要素。这样,十分复杂的非线性微分方程组就可简化为可以通过一般的数学方法得到其解,这样就可以清楚地描述系统。 可是本文提出的是一个反问题, 哲学和辩证唯物论能不能采用数学分析式的语言描述呢?马克思,恩克斯曾用了很多数学分析来说明和讨论哲学规律,把这个想法引申一步,数学分析能不能不仅用来说明,而且用来描述哲学的规律呢? 比如,不成熟的说,大胆地把矛盾描述成变量,或者泛函那么矛盾的关系是否可以引入变量或者泛函的关系来替代,从而可以进行数学分析? 严格来说,矛盾这个概念包含在关系之中,矛盾是指相互依存,相互斗争的一对事物,它本身也是一种关系,用逻辑术语表示,矛盾属于关系,而关系这个概念同时也包含在矛盾这个范畴之中,关系也是指事物的两个方面,相互依存,相对而发展,用逻辑术语来说,关系也属于矛盾,所以我们认为,矛盾和关系有等价的概念,即矛盾恒等于关系.(1)也就是说矛盾和是数学上的函数相关变量是一一对应的.下面我们可以用几个方面对比的办法给出他们相似的地方. 一.矛盾关系和变量关系的对应形式 矛盾(关系)------函数(关系); 矛盾的对------函数的维数,变量的个数; 矛盾的的存在范围------函数的定义域,值域; 矛盾的普遍性,特殊性------函数的一般关系式; 基本矛盾数------函数的独立变量个数; 主要矛盾------函数的主要变量; 矛盾的简化------函数的简化分析; 矛盾的机械唯物论的方法------函数的线化; 矛盾的复合------复合函数; 矛盾的隐含------隐函数,隐参数; 矛盾的转化------函数的变化; 二.哲学规律的数学描述和简化分析 有了以上这些对应关系,我们就可以在处理矛盾现象时考虑如 何能转化成对应的数学方法来表示,或者进一步简化成为函数问题,甚至于线性函数关系来简化分析,在复杂的矛盾交织的情况下,最简单的办法是首先把它在瞬时,当地线性展开,用机械唯物论的线性的分析来进行剖析.这就有点像把一个复杂的函数关系在一点展开用线性关系来逼近,这时线性相关组的个数-秩,就代表了基本变量的个数,对矛盾来说也就代表了基本矛盾的个数,处理矛盾问题,我们常说换个角度看看,找出特征矛盾来进行分析,对应到数学描述来说就是采取一个线性变换,找出特征值和特征向量,在特征空间上对矛盾或数学变量来说都是一样的,主要矛盾,就是最大的特征值决定的特征变量. 如此说来,下面这些定义就应当加入到对哲学的词汇里面去了: 线性矛盾相关组,线性矛盾的秩,线性矛盾的特征值,特征向量, 最大的特征值... 由于矛盾现象的复杂,对于非线性的矛盾来说可以考虑矛盾的型和它的分型.如对二次型,可以分型成为, 椭圆形矛盾组,双曲性矛盾组,抛物型矛盾组. 对矛盾的集合来说,可以有矛盾的交集,并集,非集,零集... 对矛盾的投影来说,可以有矛盾的映射,矛盾的基,更有甚着,从矛盾近似的主值发展到矛盾的无穷逼近,以及它的泛函空间. 矛盾的极值,其效应的微分和积分, 矛盾的发展变化的概率和统计及预期的数学规律, 三.矛盾的规律的数学描述 总而言之,哲学规律是否可以用相对应的数学规律来描述.关键在于矛盾现象的量化,当然这里面还有一些矛盾现象量化困难,然而当今的数学分析,已经不仅是能够对数字量进行处理,对逻辑量,对概率量,对模糊量的概念也可以处理,及就是在社会学里面已经处处可见,那么,下面我们试着对哲学里面的矛盾发展规律进行描述. 1.变量变化中的量变到质变的规律相当于数学上的形态显著变化的阈值.在数学上就是一个界限,比如说X0,变量X超过了它以后因变量X-X0就是正的,没有超过它以前就是负值,这是最基本的矛盾组,我们还可以对它进行复合, 简单代数函数的复合为: y=(x-x0)**2;X量变到X0,Y发生质变,上升变下降 y=exp(x-x0);X量变到X0,Y发生质变,变化率由小于1变到大于1 y=sh(x-x0) ;X量变到X0,Y发生质变,由正变负 用微分方程描述的函数 DY/DX=(X-X0);和前面第一条一样X量变到X0,Y发生质变,上升变下降 对二次型来说,组合量的阈值决定了更丰富多彩的变化规律 曲线 a*x**2+b*x*y+c*y**2=0 微分方程a*y''+b*y'+c=0 偏微分方程 a*diff(U,x,x)+b*diff(U,x,y)+c*diff(U,y,y)=0 由于(b*b-4a*c)的变化,在超过阈值0时对函数关系产生的变化更是量变到质变. 2.否定之否定的规律相当于数学的极值规律 3。矛盾的线化分析,导致矛盾的线性最小相关组,矛盾的帙,矛盾的特征值和特征相量, 矛盾的线性变换,和线化考虑中的主要矛盾。 4。矛盾的非线性化,矛盾的变分和极值,否定之否定,矛盾的二次型(椭圆型,抛物型,双曲型) 之间的转化条件,突变理论。 5。矛盾的泛涵表示,矛盾的希尔伯特空间和不动点原理。多维矛盾在认知空间的投影和像的度量和分析, 矛盾的无穷逼近。 在国内提出形形色色把哲学和数理科学融合的理论面前,在资深的哲学家和数学家们面前,作者仅仅能带着童心提出此问题,能否解决问题需要哲学家和数学家漫长的合作才能知晓,所以不惜把问题整理后再提一遍: 我们的哲学到底能不能够向数理分析发展一步? 用数理分析的语言来定义和诠释哲学可行吗?
个人分类: 随感|925 次阅读|5 个评论
R中打开文件的函数
lobo 2009-3-16 16:52
偶然发现的: 调用choose.files或者file.choose就可以 详情的话用R自带的帮助就可以看到。 举个小例子吧: file.name-file.choose() new.data-read.csv(file.name,header=TRUE) 这样的好处是:在帮编程外行写数据处理函数时,不用详细告诉他们文件名在程序中的位置了。 调用的结果:
个人分类: 未分类|7656 次阅读|1 个评论
涉及勒让德函数的资料
jlpemail 2008-4-2 12:49
以下是关于球函数\涉及勒让德函数的资料.感兴趣的 读者可以点击. http://202.114.36.12/lgx/lectures/se6.pdf 或者:http://www.jyu.edu.cn/wuli/sxwlff/jiaoan/dshiz.ppt
个人分类: 资料库|3429 次阅读|1 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-2 17:23

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部