我想到的就这些,不知说道要点了么.R大多自习的,多看文档,论坛好多R的文档的.
这是R一本教程中编写的一个函数,命名为 bisect.R并存放在C:\R\work,
可以通过菜单操作调用程序.但这里说命令操作:
setwd("c:\\R\\work") #工作目录设定为C:\R\work
source("bisext.R") #将函数调用内存,否则在控制台直接输入会提示错误
fzero("x^3-x-1",1,2) #可以使用该函数了
#R中一个二分法求非线性方程根的函数
fzero
if (f(a)*f(b)>0)
list(fail="finding root is fail!")
else{
repeat {
if (abs(b-a)
x
if (f(a)*f(x)<0) b
}
list(root=(a+b)/2, fun=f(x))
}
}
%%作为对比,这是Matlab的二分法. 3年前的东西了,还好没删.
%%它命名为nabisect.m,位于c:matlab\work 中,work文件夹在 set path选项卡search path的搜索路径
%只要输入nabisect(fname,a,b,e)就可以运行,Matlab会在搜索路径搜索该函数,并自动加入内存.
%但 R需要用source(){或者通过菜单或者在控制台直接输入函数}来调入内存.
function x=nabisect(fname,a,b,e)
%Using: 二分法解非线性方程
%Fomart:x=nabisect(fname,a,b,e) fname为函数句柄或
%内嵌函数 表达式为f(x) a,b为区间端点,e为精度(默认
%为1e-4) x为返回值,程序要求函数在两端点值必须异号
%,中间变量fa fb fx的引用可以最大限度减少fname调用次数
% 例子:fun=inline('x^3-3*x-1');
% x=nabisect(fun,1,2,0.05)
if nargin<4,e=1e-4;end;
fa=feval(fname,a);fb=feval(fname,b);
if fa*fb>0,error('函数在两端点值必须异号');end
x=(a+b)/2;m=0;
while (b-a)>(2*e),
fx=feval(fname,x);m=m+1;
if fa*fx<0,
b=x;fb=fx;
else a=x;fa=fx;
end
x=(a+b)/2;
end
P.S.
filename.R 和 file.m 文件格式都可以用记事本打开,这表明.R和.m的文件同.txt文件仅仅扩展名不同.