软件OpenLu中的解方程函数
>>> [OpenLu的使用方法]
欢迎加解方程\优化\拟合QQ群:562025053
方程(组)的求解,难易程度差别较大。在OpenLu中,普通的方程(组)可借助LuMath库中的拟牛顿法netn和对分法btFindRoot求解,难度大的方程(组)须借助优化库LuOpt中的iFind、Find和Opt函数求解。
(1)math::btFindRoot(f,a,b,h,k,eps):对分法求非线性方程的实根
f:自定义一元函数句柄。函数自变量不能重新赋值。
a,b:求根区间的左端点和右端点(b>a)。
h:搜索求根时采用的步长(h>0)。
k: 可能的实根个数。可缺省,缺省值为10。
eps:控制精度(eps>0)。可缺省,缺省值为1e-6。
返回值:返回一个数组(存放搜索到的实根),或者返回nil。若返回数组的长度为k,则有可能在求根区间[a,b]内的实根未搜索完。
例子:
f(x)=x^6-5*x^5+3*x^4+x^3-7*x^2+7*x-20; //函数定义
math::btFindRoot[@f,-2.,5.,0.2].o[]; //函数o用于输出一个对象
结果:
-1.40246 4.33376
(2)math::netn(f,x,eps,t,h,k):求非线性方程组一组实根的拟牛顿法
f:自定义二元或2n(n>1)元函数句柄,由用户自编。
如果f是二元函数,则两个参数为等长的一维数组:
f(x,y)= //二元函数,x[i]为自变量,y[i]为方程右端点函数值
{
y[0]=f1(x[0],x[1],...,x[n-1]),
y[1]=f2(x[0],x[1],...,x[n-1]),
... ...
y[n-1]=fn(x[0],x[1],...,x[n-1])
};
或者:
f(x1,x2,...,xn,y1,y2,...,yn)= //2n元函数,xi为自变量,yi为方程右端点函数值
{
y1=f1(x1,x2,...,xn),
y2=f2(x1,x2,...,xn),
... ...
yn=fn(x1,x2,...,xn)
};
x:双精度实型一维数组,长度不小于n,存放一组初值,返回方程组的一组实根。
eps:控制精度(eps>0ÿ