MATLAB的fsolve函数求解非线性方程(组)

fsolve()函数通常用于数值求方程或方程组的解,更常用于求解非线性方程组。fsolve是采用最小二乘法来求解非线性方程。


fsolve函数

fsolve()函数可以解决的方程形式为F(X)=0。

  用法为:
X = fsolve(FUN,X0,OPTIONS)
[x,fval,exitflag]=fsolve(fun,x0,options)
其中fun是方程,x0是初值,需要提前设定,options是一些设定要求,可以用optimset函数来实现;
exitflag用以描述出口条件(exit condition)其值如下:
1 fsolve converged to a root.
2 Change in X too small.
3 Change in residual norm too small.
4 Computed search direction too small.
0 Too many function evaluations or iterations.
-1 Stopped by output/plot function.
-2 Converged to a point that is not a root.
-3 Trust region radius too small (Trust-region-dogleg).
从上面看,当exitflag是1的时候是最理想的结果,2,3也可接受,负数则偏差太大或直接错误。

Fsolve求解简单的一维非线性方程

程序

clc;
clear all;
close all;
x = fsolve(@myfun,[0.5 2 4],optimset('Display','iter')); %求解在初值分别为0.5,2和4时方程的解
function F = myfun(x)
F = sin(x);
end

运行结果


Fsolve可以求解大型的非线性方程组

程序

clc;
clear all;
close all;
x0 = [51.6;rand;unifrnd(-1,1);rand];
h=optimset;
h.MaxFunEvals=20000;
h.MaxIter=5000;
h.Display='off';
[p,fval] = fsolve(@f,x0,h)

此时,方程组可以写成矩阵形式。

function F=f(x)
%方程组写成矩阵形式
F=[x(1)+x(2)*(1-exp(-(x(3)*(0)^x(4))))-51.61;
x(1)+x(2)*(1-exp(-(x(3)*(9.78)^x(4))))-51.91;
x(1)+x(2)*(1-exp(-(x(3)*(30.68)^x(4))))-53.27;
x(1)+x(2)*(1-exp(-(x(3)*(59.7)^x(4))))-59.68;];
end

运行结果

程序

clc;
clear all;
close all;
options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);
fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0,options)

root2d.m程序


function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end
function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;
end

运行结果


本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙

展开阅读全文

页面更新:2024-03-03

标签:时方   方程   函数   初值   方程组   负数   矩阵   形式   程序   内容

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top