学习MATLAB方程式求根

简介

Today:
•Symbolic approach 利用符号的方式求根
•Numeric root solvers 利用数值方式求根
•Recursive functions 递归

Symbolic Root Finding Approach 符号寻根

在这里插入图片描述

 syms x          %定义x为  “symbolic variables”

Symbolic Root Finding: solve() 求根

在这里插入图片描述
在命令行窗口输入第一组代码会得到
在这里插入图片描述
在命令行窗口输入第二组代码
在这里插入图片描述
下面是两个练习
在这里插入图片描述

Symbolic Differentiation: diff() 求导/微分

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

syms x
y = 4*x^5;
yprime = diff(y)

结果
在这里插入图片描述
练习
在这里插入图片描述
代码

syms x
y=exp(x^2)/(x^3-x+3);
yprime=diff(y)

结果
在这里插入图片描述
练习
在这里插入图片描述
代码

syms x y
>> g=(x^2+x*y-1)/(y^3+x+3);
>> gprime=diff(g)

运行结果
在这里插入图片描述

Symbolic Integration: int() 积分

在这里插入图片描述
代码

syms x;
y=x^2*exp(x);
z=int(y);
 z=z-subs(z,x,0)

结果
在这里插入图片描述
输入前三行代码得到的结果如下
在这里插入图片描述
此时将x=0带入z得z=2,与初始值不符合,所以增加最后一行代码,以符合题设所给条件。
练习
在这里插入图片描述
代码

syms x
int((x^2-x+1)/(x+3),0,10)

在这里插入图片描述

Symbolic vs. Numeric 符号和数值寻根的比较

在这里插入图片描述
接下来再一次复习Handles(@),上次课已经复习过,可能是因为比较重要

Review of Function Handles (@)

在这里插入图片描述

fsolve() 求根

在这里插入图片描述
因为不知道解是多少,所以给了0一个猜测值,使得结果向猜想点处收敛
初始值不同可能会对结果有影响,比如方程有很多个零解,那么给不同的初值可能会收敛到其它解去
运行结果
在这里插入图片描述
练习
在这里插入图片描述
代码

equ=@(x)[2*x(1)-x(2)-exp(-x(1));-x(1)+2*x(2)-exp(-x(2))];
x=fsolve(equ,[-5,-5])

结果
在这里插入图片描述
fsolve只能一个变量,但是可以用一个变量的向量组

fzero()求根

fzero在使用时,函数穿过x轴才有效果,否则算不出来结果。fsolve则没有这种限制。
在这里插入图片描述
输入上面代码进行验证
验证fzero
在这里插入图片描述
验证fsolve
在这里插入图片描述
但是,此时显然这个结果的精度过低
所以,我们需要将进行
一些高级操作
例如
可以设置,迭代次数和精度
在这里插入图片描述
代码

f=@(x)x.^2;
options=optimset('Maxiter',1e3,'TolFun',1e-10);
>> fsolve(f,0.1,options)

结果
在这里插入图片描述

Finding Roots of Polynomials:roots() 求根

roots仅仅是用来解决多项式问题的
在这里插入图片描述
代码

 roots([1 -3.5 2.75 2.125 -3.875 1.25])

运行结果
在这里插入图片描述
练习
在这里插入图片描述
代码

roots([1 -6 -12 81])

运行结果
在这里插入图片描述

Numeric Root Finding Methods 数值寻根

数值寻根的两种方式
二分法(需要在一个区间内)
牛顿法-梯度下降法(需要求得导数)
在这里插入图片描述

Bisection Method (Bracketing) 二分法

在这里插入图片描述
对应流程图
在这里插入图片描述

Newton-Raphson Method (Open)牛顿法

在这里插入图片描述
对应流程图
在这里插入图片描述

Bisection vs. Newton-Raphson 两种方法比较

在这里插入图片描述

Recursive Functions 递归函数

在这里插入图片描述

Factorial Recursive Function


The function includes a recursive case and a base case

The function stops when it reaches the base case
代码

function output = fact(n) % fact recursively finds n!
if n==1 
   output = 1;
else
    output = n * fact(n-1);
end
end

在这里插入图片描述
以上这两种方法在最优化中都有学习

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值