求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)
《家庭健康指南》- 介绍实用的家庭健康护理方法 #生活技巧# #健康生活方式# #健康生活方式书籍# #健康家庭疗法#
一、符号方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:
solve(s)(求解符号表达式s的代数方程,求解变量为默认变量,当方程右端为0时,方程可以不标出等号和0,仅标出方程的左端)
solve(s,v)(求解符号表达式s的代数方程,求解变量为v)
solve(s1,s2,…,sn,v1,v2,…,vn)(求解符号表达式s1,s2,…,sn组成的代数方程组,求解变量分别为v1,v2,…,vn)
让我举个栗子:
求解如下方程:
代码:
x=solve('2*sin(3*x-pi/4)=1') 1
代码:
x= solve('x+x*exp(x)-10', 'x') %仅标出方程的左端 1
二、求方程f ( x ) = 0数值解的基本方法
并非所有的方程 f ( x ) = 0 都能求出精确解或解析解,存在这种解的方程就需要用数值解法求出近似解,有几种常见的数值解法:
1.二分法 2.迭代法:切线法、割线法(弦截法)注:二分法简单方便,但收敛速度慢;
迭代法虽然收敛速度稍微快点,但需要判断能否收敛;
只要初值选取得当,切线法具有恒收敛且收敛速度快的优点,但需要求出函数的导数;
弦截法不需要求导数,特别是前面介绍的快速弦截法,收敛速度很快,但是需要知道两个近似的初始根值才能作出弦,要求的初始条件较多。
三、方程f(x) = 0数值解的MATLAB实现
MATLAB中求方程数值解的办法很多,有的是专用指令,有的是根据方程性质而借用其他专用指令求得的
这里我们就先介绍求函数零点指令fzero吧
求解方程f ( x ) = 0的实数根也就是求函数f ( x)的零点。MATLAB中设有求函数f (x)零点的指令fzero,可用它来求方程的实数根。该指令的使用格式为:fzero (fun, x0, options)
①输入参数fun为函数f (x)的字符表达式、内联函数名或M函数文件名。
②输入参数x0为函数某个零点的大概位置(不要取零)或存在的区间[xi,xj],要求函数f (x)在x0点左右变号,即f (xi)f (xj) < 0。
③输入参数options可有多种选择,若用optimset (‘disp’, ‘iter’)代替options 时,将输出寻找零点的中间数据。
④该指令无论对多项式函数还是超越函数都可以使用,但是每次只能求出函数的一个零点,因此在使用前需摸清函数零点数目和存在的大体范围。为此,一般先用绘图指令plot, fplot或ezplot画出函数f (x)的曲线,从图上估计出函数零点的位置。
让我再举个栗子:
如:求方程 x^2 + 4sin(x) = 25 的实数根(-2π<x < 2π)
解:
(1)若fun为函数f (x)的字符表达式
①首先要确定方程实数根存在的大致范围。为此,先将方程变成标准形式f(x) =x2 + 4sin(x) - 25 = 0,作f(x)的曲线图:
x=-2*pi:0.1:2*pi; f=x.^2+4*sin(x)-25; plot(x,f);grid on; 123
从曲线上可以看出,函数的零点大约在x1= - 4和x2=5附近
②直接使用指令fzero求出方程在x1≈ - 4时的根
x1= fzero ('x^2+4*sin(x)-25',-4) 1
若键入:
fzero ('x^2+4*sin(x)-25',-4, optimset('disp', 'iter')) 1
将会显示迭代过程
中间数据表明,求根过程中不断缩小探测范围,最后得出- 4附近满足精度的近似根
③求x2≈ 5的根:
x2= fzero ('x^2+4*sin(x)-25',5) 1
(2) 若fun为函数f (x)的M函数文件名
将方程x2 + 4sin(x) = 25编成M函数文件(实用中在函数较为复杂、而又多次重复调用时,才这样做),用fzero求解。
①在M文件编辑调试窗中键入:
function yy=fan (x) yy= x^2+4*sin(x)-25; 12
以fan为文件名存盘,退出编辑调试窗,回到指令窗。
②确定根的大体位置;
③在指令窗中键入下述指令可求出 - 4 附近的根:
x1= fzero ('fan',-4) 1
键入下述指令可求出5附近的根:
x2= fzero ('fan',5) 1
我还要再举个栗子:
如:求f(x)=x-10^x+2=0在x0=0.5附近的根
解:
x=-2.5:0.01:0.5; fx=x-10.^x+2; plot(x,fx) 123
从f(x)的曲线看出曲线的零点有两个,一个在x=-2附近,另一个在x=0.5附近
①建立函数文件funx.m。(function [输出变量列表]=函数名(输入变量列表))
functionfx=funx(x) fx=x-10.^x+2; 12
②调用fzero函数求根。
z=fzero('funx',0.5) 1
网址:求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例) https://www.yuejiaxmz.com/news/view/439092
相关内容
基于麻雀搜索算法的线性规划问题求解matlab程序牛顿法在非线性优化问题中的应用与挑战1.背景介绍 非线性优化问题在现实生活中非常常见,例如机器学习、图像处理、物理学等领
直接迭代法求方程f(x)=0的根时,首先要由方程f(x)=0直接推出迭代函数x=
最优化方法的Matlab实现在生活和工作中人们对于同一个.DOC 免费在线阅读
设函数y=f(x)是微分方程y”+y'一e=0的解,且f(xo)=0,则f(x)
设f(x)为[一a,a]上的连续偶函数,且f(x)>0,令 F(x)=∫
求解函数方程函数f:R→R,f((x
【数学建模】线性规划模型基本原理与案例分享
MATLAB图像处理(包括图像类型转换)
matlab 使用各种迭代法解分线性方程x^3+2*x^2+10*x