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)
文章来源:https://www.toymoban.com/news/detail-461630.html
总结
这几个函数看起来都很相似,不仔细对比一下总是傻傻分不清,笔者也是饱受困扰所以花了点时间分类对比了一下,希望对你有帮助。如果你是注册登录状态,点个赞或者评论就更棒了!文章来源地址https://www.toymoban.com/news/detail-461630.html
到了这里,关于Matlab求解方程或函数的根,root,fzero,solve,fsolve的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!