求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)

您所在的位置:网站首页 x一036x16解方程 求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)

求解非线性方程f (x)= 0的MATLAB数值法指令介绍(solve、fzero的方法与实例)

2024-07-12 05:15| 来源: 网络整理| 查看: 265

一、符号方程求解

       在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')

在这里插入图片描述 代码:

x= solve('x+x*exp(x)-10', 'x') %仅标出方程的左端 二、求方程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;

在这里插入图片描述 从曲线上可以看出,函数的零点大约在x1= - 4和x2=5附近        ②直接使用指令fzero求出方程在x1≈ - 4时的根

x1= fzero ('x^2+4*sin(x)-25',-4)

       若键入:

fzero ('x^2+4*sin(x)-25',-4, optimset('disp', 'iter'))

       将会显示迭代过程        中间数据表明,求根过程中不断缩小探测范围,最后得出- 4附近满足精度的近似根        ③求x2≈ 5的根:

x2= fzero ('x^2+4*sin(x)-25',5)

(2) 若fun为函数f (x)的M函数文件名 将方程x2 + 4sin(x) = 25编成M函数文件(实用中在函数较为复杂、而又多次重复调用时,才这样做),用fzero求解。        ①在M文件编辑调试窗中键入:

function yy=fan (x) yy= x^2+4*sin(x)-25;

       以fan为文件名存盘,退出编辑调试窗,回到指令窗。        ②确定根的大体位置;        ③在指令窗中键入下述指令可求出 - 4 附近的根:

x1= fzero ('fan',-4)

       键入下述指令可求出5附近的根:

x2= fzero ('fan',5)

       我还要再举个栗子: 如:求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)

在这里插入图片描述

       从f(x)的曲线看出曲线的零点有两个,一个在x=-2附近,另一个在x=0.5附近        ①建立函数文件funx.m。(function [输出变量列表]=函数名(输入变量列表))

functionfx=funx(x) fx=x-10.^x+2;

       ②调用fzero函数求根。

z=fzero('funx',0.5)


【本文地址】


今日新闻


推荐新闻


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