Matlab中fsolve的介绍
方程被定义为由等号给出的左右两边的表达式。方程有多种类型,其中之一就是非线性方程。非线性方程被定义为方程中的一个变量大于1的一组表达式。在数学上,有各种解决非线性方程的方法。在Matlab中,fsolve是用于解决非线性方程的函数。它解出方程,并返回语法中输入的目标函数的向量值。
fsolve在Matlab中的工作与语法和例子
在Matlab中,fsolve函数被用来获取在环境中定义或声明的任何非线性方程的解。请看以下在处理fsolve函数时使用的语法。
- a = fsolve(func,a0) : 这是从一个初始点a0开始,继续求解函数等于零的方程。
- a = fsolve(func,a0,options) : 这是用语法中提到的各种选项来求解非线性方程。Matlab中使用optimoptions来声明所需的选项。
- a= fsolve(problem): 这是用语法中提到的问题来解决非线性方程,它被指定为一个结构。
- [a,fval] = fsolve(___) : 这用于在输入中找到所宣布的目标函数在定义的解决方案a的值。
- [ a,fval,exitflag,output] = fsolve(___): 当我们想显示输出或exitflag时,就会使用这个语法。exitflag给我们提供了fsolve算法停止的原因,输出定义了优化的过程。
- [ a ,fval,exitflag,output,jacobian] = fsolve(___): 该语法用于显示所声明的函数的jacobian。
上述语法中提到的输入和输出参数需要遵循一定的规则和标准。func "是第一个输入参数,可以以函数句柄或函数名的形式指定。它接受其输入为一个向量,并返回一个向量。如果其中任何一个参数是以数组的形式给出的,那么它们将通过线性索引方法转换成向量。接受的数据类型有char、函数句柄和字符串。'a0'是另一个输入参数,它指定了初始点或起点。fsolve使用变量的数量和初始点(a0)的大小来决定函数应该接受的变量数量和大小。它可以以实数向量或实数组的形式给出。a0所接受的数据类型是double。problem "是另一个输入参数,被指定为一个结构。它有不同的字段,如objective(声明目标函数),a0(声明算法中需要的初始点),solver(fsolve解决方程),options(在整个过程中改变和修改优化的过程)。options "是一个输入参数,它有各种选项,可以通过使用optimoptions来设置。有些选项可以适用于所有的算法,有些则不适用。下面给出了其中的一些。
- 显示选项-这是用来决定显示的级别的,具体如下。
- 关闭 "选项意味着将没有输出显示。
- iter "选项意味着每次迭代都会有输出显示,并提供退出信息(默认)。
- iter-detailed'选项意味着每次迭代都会有输出显示,并提供退出信息(技术性)。
- final'选项意味着显示整个迭代过程的最终输出,并显示退出信息(默认)。
- final-detailed "意味着显示整个迭代过程的最终输出,并显示退出信息(技术)。
- MaxFunctionEvaluations选项。这意味着整个过程中允许的最大评估次数。默认的评估次数是100乘以变量的数量。它只以正整数的形式给出。
- MaxIterations选项。这意味着整个过程中允许的最大迭代次数。默认的迭代次数是400。
- 诊断选项。这个选项用于一些算法,它被用来显示需要解决或最小化的函数的诊断信息。它可以有两个值,即 "on",默认值为 "off"。
fsolve在Matlab中的例子
下面的例子说明了fsolve函数在Matlab中的应用。
例子#1
在一个矩阵中使用fsolve,并找出fval的值和它的exitflag值。
代码:
fun = @(a)a*a*a - [3,2;1,4];
a0 = ones(2);
[a,fval,exitflag,output] = fsolve(fun,a0);
a,fval,exitflag
输出
例#2
代码:
a0=[1,0,-2,1];
a=fsolve(@(a)[3*a(2)+3.*a(1).*a(4);2.*a(1)+a(2).*a(4);2.*a(3)+a(4);2-(a(1).^2)-0.5.*(a(3).^2)-a(4)],[a0])
输出
例子 #3
用下面的目标函数找到退出标志的值。
代码:
fun = @(a)a*a*a - [4,5;6,8];
a0 = [1,3;2,1] [a,fval,exitflag,output] = fsolve(fun,a0);
a,fval,exitflag
输出
语法部分提到的输出参数也有一定的标准,如'a'是一个输出参数,以实数向量或实数组形式返回。解的大小'a'与初始点'a0'的大小相同。Exitflag是另一个输出参数,告诉我们fsolve算法终止的原因。它可以有正值和负值,比如1,2,3,4,0,-1,-2,-3,每个值都有其终止的原因。输出是另一个参数,包含了整个优化过程的信息,它可以有几个字段,如iterations(显示所进行的迭代总数),funcCount(函数评估的总数),message(显示退出信息,算法(优化过程中使用的算法名称)。
如果有很多变量,那么为了节省内存和时间,那么算法选项应该被设置为 "信任区域"。
总结
fsolve在Matlab中被广泛使用,因此了解它的工作原理非常重要。在处理fsolve函数时,应该注意某些限制,其中之一是;需要解决的函数必须是连续的,如果整个过程是成功的,那么fsolve函数只给出一个单根。