MATLAB非线性方程简单优化求解

在学习求方程的根时,使用MATLAB经常会遇到困难,感觉简单的运算没有简单且好的方法。在非线性方程中,有多项式函数和复杂函数,对于多项式的求解比较系统化,使用roots命令或solve命令可以求解,但二者格式有些不同。对于复杂函数,以上两者直接求解会有问题,又希望避免复杂的算法,因此可以采用fzero命令来实现一个简单的非线性方程求解。

一、求多项式方程 x^5+2022x-10=0 的所有根

1、使用roots命令求解,代码如下:

clc;
clear all;
%求x.^5+2022*x-10=0的所有根
p=[1 0 0 0 2022 10];%多项式系数矩阵
roots(p)

结果:

ans =

   4.7429 + 4.7417i
   4.7429 - 4.7417i
  -4.7404 + 4.7417i
  -4.7404 - 4.7417i
  -0.0049 + 0.0000i

2、使用solve命令求解,代码如下:

clc;
clear all;
%求x.^5+2022*x-10=0的所有根
syms x;%定义变量
f=x.^5+2022*x-10;
solve(f,x)

结果:

ans =
 
 root(z^5 + 2022*z - 10, z, 1)
 root(z^5 + 2022*z - 10, z, 2)
 root(z^5 + 2022*z - 10, z, 3)
 root(z^5 + 2022*z - 10, z, 4)
 root(z^5 + 2022*z - 10, z, 5)

可以使用vpa命令将结果转化为数值解(二者所求结果相同),设置好所需精度。

读者也可以画图直观的看出方程解的大致位置,为求解指明方向。

二、求解方程  sinx=\frac{x}{10}  的所有根

对于非多项式方程,roots命令不适用,使用solve命令会出现如下问题:

clc;
clear all;
syms x;%定义变量
f=sin(x)-x./10;
solve(f,x)

ans =
 
0

只得出一个解,但通过画图可知,该方程应该有七个零点值:

 因此对非线性方程的优化解可以使用fzreo函数求解,注意fzero也只能求出给定的x附近一个零点。从图中可以看出,该方程的解在-10~10范围之内,可以以一定的步长遍历求解,代码如下:

clc;
clear all;
f=@(x)sin(x)-x./10;
a=0;
for x=-10:1:10
s=fzero(f,x);
a=a+1;
y(a,1)=s;
end
c=unique(y)
x=-50:50;
f=sin(x)-x./10;
plot(x,f);


c =

   -8.4232
   -7.0682
   -2.8523
   -0.0000
         0
    0.0000
    2.8523
    7.0682
    8.4232

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值