Matlab中提供了很多求解非线性方程(y=f(x))的函数,刚開始使用,真的很困惑。全部。这里依据matlab的help文档对这些函数做一些小小的总结


fsolve函数

用来求解非线性方程组:F(x)=0;当中,x是一个向量或者矩阵,F(x)的返回值是一个vector。以下是详细用法(以x0为初始点。利用优化算法寻找函数fun(x)与y=0的交点,即fun(x) = 0的根):

局限性:仅仅能求解距离给定初始值近期的那个根

一个方程的情况

fun=x2+x+1

  • 在新的m文件里,书写该fun的计算函数
function y = fun(x)
y = x^2+x-6;
end
  • 求解根

初值为-1时:

x = fsolve(@fun,-1)

结果为:result=-3

初值为2时:

x = fsolve(@fun,2)

结果为:result=2

能够看到,当给定的初始值不同一时候。fsolve的返回值不同。这是因为。fsolve返回的是距离给定初始点较近的那个根(fsolve在计算时,由初始点開始。逐步向零点逼近,当找到零点值后,优化停止,所以。这种方式仅仅能返回距离给定初始值x0近期的那个零点)

  • options參数

这里在求解根的时候,全部的优化參数都是使用的默认值,但实际上,优化參数能够通过options进行设置。能够设置详细优化方法(Algorithm)、是否显示每步迭代的结果(Display)、最大迭代步数(MaxIter)等, 设置方法例如以下:

options = optimoptions('','','')

x = fsolve(@fun,2,options )

方程组(以包括两个方程的方程组为例)

y={ y1=x21+x1−6=0y2=2x22+x2−6=0

  • 在新的m文件里,书写该fun的计算函数
function y = fun(x)
y(1) = x(1)^2+x(1)-6;
y(2) = 2*x(2)^2+x(2)-6;
end
  • 求解根

初值为[-1,1]时:

x = fsolve(@fun,[-1,1])

结果为:result=[-3,1]


初值为[2,-1]时:

x = fsolve(@fun,2)

结果为:result=[2,-2]


fzero函数

用来求解非线性方程的根f(x)=0;该函数通过推断f(x)的符号是否发生变化来计算方程的根

详细地,假设x0是方程的根。那么。该函数在点x0+Δ和x0−Δ处的函数值符号一定相反,所以,该函数不能用来求解相似于x2=0这种方程

局限性:仅仅能求解距离给定初始值近期的那个根(与fsolve的局限性形同)

以下给出一个样例:

fun=x2+x+1

  • 在新的m文件里,书写该fun的计算函数
function y = fun(x)
y = x^2+x-6;
end
  • 求解根

初值为-1时:

x = fzero(@fun,-1)

结果为:result=-3


初值为2时:

x = fzero(@fun,2)

结果为:fzero=2


初值为区间[-5,5]时:

x = fzero(@fun,[-2,5])

结果为:fzero=2

注意:当给定fzero为初识区间时,要求fun函数在区间的两个端点的符号不同


能够看到。利用该方法求得的结果与利用fsolve的结果同样,也是仅仅能返回距离给定初始值较近的那个根

  • options參数

这里的options參数与fsolve的设置方法同样。比如:

options = optimoptions('','','')

x = fzero(@fun,2,options )


roots函数

该函数用来求解多项式方程的根,roots能够返回多项式函数的全部根,比如,计算例如以下多项式方程的根:

fun=x3+2

用法例如以下:

roots([1 0 0 2])

这里的[1 0 0 -2]各自是x3、x2、x1、x0的系数,结果为:

-1.2599 + 0.0000i

0.6300 + 1.0911i

0.6300 - 1.0911i


root函数

该函数用来求解符号多项式方程的根,root能够返回符号多项式函数的全部符号根,比如,计算例如以下多项式方程的根:

fun=x3+2

用法例如以下:

syms x
p = x^3 + 2;
result = root(p,x)
% or result = root(x^3 + 2,x)

结果为:

result =

root(x^3 + 2, x, 1)

root(x^3 + 2, x, 2)

root(x^3 + 2, x, 3)

该结果是符号计算结果(即result是符号变量),假设仅仅是须要该结果作为中间过程。那么直接将result带入其它计算过程就可以,但假设须要该result的数值结果。那么能够使用vpa函数,详细地:

result_vpa = vpa(result)

结果例如以下:

result_vpa =

-1.2599210498948731647672106072782

0.62996052494743658238360530363911 + 1.0911236359717214035600726141898i

0.62996052494743658238360530363911 - 1.0911236359717214035600726141898i

这三个数值就是多项式方程fun=x3+2=0的三个根

能够看到。与roots的计算结果同样


方程求解函数小结

fsolve:计算非线性方程组的某个根(距离初始值较近的)

fzero:计算非线性方程的某个根(距离初始值较近那个)

roots:计算多项式方程的全部根

root:计算符号多项式方程的全部根


Matlab的函数曲线绘制

ezplot函数

绘制函数曲线explot(fun)

默认的显示区间是[-2pi, 2pi]

实际中,能够设置显示区间,利用explot(fun,[xmin,xmax])

  • 绘制’显示函数’曲线(y=x2)

    eg1: figure;explot('x^2')

    结果例如以下:



    能够看到。因为没有指定曲线的x取值范围,所以是默认值[-6.28,6.28]

    eg2: figure;explot('x^2',[-1,1])

    结果例如以下:



    能够看到。因为设定了区间[-1,1]。所以x轴仅仅在区间[-1,1]内显示

  • 绘制’显示函数’曲线(x2−y=0)

    eg1: figure;explot('x^2-y')

    结果例如以下:



    能够看到,因为没有指定曲线的x取值范围,所以是x、y轴的默认值都是[-6.28,6.28]、[-6.28,6.28]

    eg2: figure;explot('x^2',[-1,1,-1,1])

    结果例如以下:



    能够看到。因为设定了区间[-1,1,-1,1],所以x轴、y轴在区间[-1,1,-1,1]内显示

  • 利用函数句柄

    首先。定义函数句柄

    fh = @(x,y) x.^2 + y.^3 - 2*y - 1;

    然后利用ezplot绘制该函数

    ezplot(fh)

    axis equal

    实验结果例如以下:



    增加区间限制后

    ezplot(fh[-10,10,-10,10])

    axis equal

    实验结果例如以下:



    能够看到,仅仅显示了区间[-10,10,-10,10]的图像

matlab-非线性方程求根函数及函数曲线绘制的更多相关文章

  1. tkinter内嵌Matplotlib系列(二)之函数曲线绘制

    目录 目录 前言 (一)对matplotlib画布的封装: (二)思路分析: 1.需求说明: 2.框架的设置: 3.文件说明: (三)各文件的源代码 1.main.py 2.widget.py 3.f ...

  2. 【matlab】绘制双三次插值函数曲线

    想要的效果: 编程时要用到分段函数曲线的绘制方法:..+.*(分段条件). 需要注意的是:函数表达式中的乘除和乘方都要加“.”.因为一般的函数都是数在乘变量运算. x=-:; a=-0.5; w=ab ...

  3. MATLAB曲线绘制

    一. 二维数据曲线图1.1 绘制 单根二维曲线plot 函数的基本调用 格式为:plot(x,y) 其中x和y为长度相同的向量,分别用于存储x坐标 和y坐标数据. 例1-1 在0≤x≤2p区间内,绘制 ...

  4. [转帖]MATLAB曲线绘制及颜色类型

    信号源产生的方法 来源:http://www.2cto.com/kf/201401/270494.html  matlab的checkerboard说明,GOOD! 来源:http://www.chi ...

  5. MATLAB相关快捷键以及常用函数

    MATLAB快捷键大全 F1帮助 F2改名F3搜索 F4地址 F5刷新 F6切换 F10菜单 CTRL+A全选 CTRL+C复制 CTRL+X剪切 CTRL+V粘贴 CTRL+Z撤消 CTRL+O打开 ...

  6. ROC曲线绘制

    ROC 曲线绘制 个人的浅显理解:1.ROC曲线必须是针对连续值输入的,通过选定不同的阈值而得到光滑而且连续的ROC曲线,故通常应用于Saliency算法评价中,因为可以选定0~255中任意的值进行阈 ...

  7. n阶贝塞尔曲线绘制(C/C#)

    原文:n阶贝塞尔曲线绘制(C/C#) 贝塞尔是很经典的东西,轮子应该有很多的.求n阶贝塞尔曲线用到了 德卡斯特里奥算法(De Casteljau's Algorithm) 需要拷贝代码请直接使用本文最 ...

  8. matlab 对图像操作的函数概览

    转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...

  9. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

随机推荐

  1. Selenium2+python自动化15-select下拉框【转载】

    前言最近由于工作原因,更新慢了一点,今天终于抽出一点时间给大家继续更新selenium系列,学习的脚本不能停止,希望小伙伴能多多支持. 本篇以百度设置下拉选项框为案例,详细介绍select下拉框相关的 ...

  2. uva12265 贩卖土地 单调栈

    输入一个n*m的矩阵,每个格子可能是空地,也可能是沼泽.对于每个空地格子,求出以它为右下角的空矩形的最大周长,然后统计每个周长出现了多少次. 输入包含多组测试数据,第一行输入一个正整数N,表示输入样例 ...

  3. Codeforces Round #299 (Div. 2) B. Tavas and SaDDas【DFS/*进制思维/位运算/一个数为幸运数,当且仅当它的每一位要么是4,要么是7 ,求小于等于n的幸运数个数】

    B. Tavas and SaDDas time limit per test 1 second memory limit per test 256 megabytes input standard ...

  4. 宠物收养所 (SBT)

    宠物收养所 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得 ...

  5. POJ 2739:Sum of Consecutive Prime Numbers(Two pointers)

    [题目链接] http://poj.org/problem?id=2739 [题目大意] 求出一个数能被拆分为相邻素数相加的种类 [题解] 将素数筛出到一个数组,题目转化为求区段和等于某数的次数,尺取 ...

  6. 从内存溢出看Java 环境中的内存结构

    作为有个java程序员,我想大家对下面出现的这几个场景并不陌生,倍感亲切,深恶痛绝,抓心挠肝,一定会回过头来问为什么为什么为什么会这样,嘿嘿,让我们看一下我们日常在开发过程中接触内存溢出的异常: Ex ...

  7. PHP生成GUID的函数

    GUID: 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) . GUID是一个通过特定算法产生 ...

  8. MailKit---如何知道文件夹下有多少封未读邮件

    如果在mailkit中,文件夹已经选中并打开了的话,那直接使用ImapFolder.Unread属性就可以获取到有多少封未读邮件了. 如果文件夹没有打开,那么你还可以使用查询状态的方法来获取未读状态的 ...

  9. [置顶] kubernetes资源对象--Label

    概念 Label机制是K8S中一个重要设计,通过Label进行对象弱关联,灵活地分类和选择不同服务或业务,让用户根据自己特定的组织结构以松耦合方式进行服务部署. Label是一对KV,对用户而言非常有 ...

  10. hmac的python实现

    Hash-based message authentication code,利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出 可以查看python的内置模块hmac.py的源码来学 ...