Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别

您所在的位置:网站首页 x-675=168解方程 Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别

Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别

2024-01-26 10:36| 来源: 网络整理| 查看: 265

1.引言

Matlab中有很多求解方程和方程组的函数,这些函数的使用可能有很多人都模棱两可,这里做一个简单的介绍,给个大方向,学会这些函数的基本使用场景。想要学习每个函数的更多细节和案例,Matlab官方帮助文档是最好的材料。假传万卷书,真传一案例,我们一起用例子来学习,走你~

2.四个函数

四个函数中用到了函数名字和函数句柄这两个概念,我们分别说明下。所谓函数名字就是函数变量名左右加上单引号,使其成为字符串,例如你在func.m中定义了一个名为为func的函数(function f=func(x)),那么它的函数名字就是'func'。至于函数句柄,简单理解就是一个函数指针,用@func来获取。匿名函数的结果直接就是一个函数句柄,例如f=@(x)x^2+1得到的f本身就是一个函数句柄了。

2.1 root

root函数针对的是多项式求根问题,如下

% 求解x^3-2*x^2+x+1=0; p=[1,-2,1,1]; roots(p) 2.2 fzero

一元非线性函数求根推荐使用fzero。 语法:x=fzero(f,x0),其中f为函数名字或者函数句柄。函数名字和函数句柄是什么请看上面。x0是根的一个初始猜测值或者猜测范围,如果是猜测范围,x0的定义就是[-1,1]这样子的。

% 案例一: 求解exp(x)+cos(x)=0 f=@(x)exp(x)+cos(x); % 第一个参数是函数名字,或者函数句柄。第二个参数是其实猜测值或者猜测区间 fzero(f,0) % 案例二: % 在function.m中定义一个名为function的函数 fzero('function',0) % 或者 fzero(@function,0) % 都可以求出函数的根 2.3 fsolve

多元/多维情况下,非线性方程组的求解用fsolve:

% 求解方程组 x^2+y-4=0, x-y-10=0 % 在test.m中定义如下函数 function r = test(x) r(1)=x(1).^2+x(2)-4; r(2)=x(1)-x(2)-10; end % 使用函数名或者函数句柄 fsolve('test',[0,0]) % 或者 fsolve(@test,[0,0]) 2.4 solve

还有个比较特殊的存在就是solve函数,它也可以进行函数的求根和方程的求解,而且它能做到远远不止这些,还可以进行优化。在进行函数求根或者方程求解时,它与其他上面三个函数显著不同的地方是,它针对的函数是符号函数或者等式,下面分别举例:

syms x; f = x^3+2*x^2-x+1; s = solve(f); % f为符号函数,当不采用包含等式==的方程时,默认求根,否则求方程的解 double(s) % solve的第一个参数是等式时 s = solve(x^3+2*x^2==x-1) double(s) %结果同上 2.5 其他

上述函数求根时,有时需要提供一个初始猜测,例如fzero和fsolve函数。所以一般最好先大致画一下函数看看解的大致范围,具体绘画函数的函数大概有以下这么几个,都可以简单尝试下

f = @(x,y) x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20; g = @(x,y) x.*y/2+(x+2).^2+(y-2).^2/2-2; % 隐函数绘制 fimplicit(g,'k') axis([-6 0 -1 7]) hold on % 等值线绘制 fcontour(f) % 三维曲面绘制 figure; fsurf(f)

fsurf(f)的结果

总结

这几个函数看起来都很相似,不仔细对比一下总是傻傻分不清,笔者也是饱受困扰所以花了点时间分类对比了一下,希望对你有帮助。如果你是注册登录状态,点个赞或者评论就更棒了!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3