MATLAB中方程求解方法总结

MATLAB中方程求解方法总结

一、符号定义与基础函数

符号定义

使用  syms  定义符号变量:

  • 单个变量定义:如  syms x ,定义符号变量  x 。

  • 多个变量定义:如  syms x a b c ,定义符号变量  x 、 a 、 b 、 c  。

  • 更多变量定义:如  syms x y a b ,定义  x 、 y 、 a 、 b  四个符号变量。

方程求解函数

  • solve(s,x) :返回表达式  s  关于变量  x  的所有符号根/精确根。

  • [x,y]=solve(s1,s2,x,y) :求解由  s1  和  s2  组成的方程组,返回变量  x  和  y  的解。

求函数零点的函数

  • x = fzero(Fun,x0) :返回函数  Fun  在初始值  x0  附近的一个零点。

  • x = fzero(Fun,[a,b]) :返回函数  Fun  在区间  [a,b]  内的一个零点。

  • [x,fval,exitflag] = fsolve(Fun,x0) :返回函数  Fun  在初始值  x0  附近的一个零点,同时输出函数值  fval  和退出标志  exitflag  。

二、示例代码

一元二次方程求解

求解方程  ax² + bx + c = 0 :

matlab
 
syms x a b c;
f = a*x^2 + b*x + c;
solve(f,x);
 

注:如需对参数  a  求解,可使用  solve(f,a) ,但这种情况不常见。
``
方程组求解

求解方程组 \begin{cases}x² - y = a \\ x + y = b\end{cases}:

matlab

syms x y a b;
S1 = x^2 - y - a;
S2 = x + y - b;
[x,y] = solve(x^2 - y - a, x + y - b, x, y);
 

三、\sin(4x)-\log(x)=0 方程求解不同方法

使用  solve  函数求解

matlab

syms x;
y = solve(sin(4*x) - log(x), x)
 

运行结果提示 “Unable to solve symbolically. Returning a numeric solution using vpasolve.”,
无法符号求解,改用  vpasolve  给出数值解,结果  y = - 227.5052470321715202967611647339 - 0.63142516921359725860486070631205i  ,为复数解。

使用绘图和  fzero 、 fsolve  函数求解

  • 绘图

matlab

ezplot('sin(4*x) - log(x)', [0.1, 4]);
grid on;
 

绘制函数 \sin(4x)-\log(x) 在区间  [0.1, 4]  的图像,辅助观察零点位置。

  • fzero 函数求解
定义函数  f = inline('sin(4*x)-log(x)', 'x'); 
 
 
-  y1 = fzero(f, 0.7) :以  0.7  为初始值,可找到一个零点。
 
-  y2 = fzero(f, [0.5, 1]) :在区间  [0.5, 1]  内寻找零点,能正常运行。
 
-  y3 = fzero(f, [0.5, 2]) :运行报错 “Error using fzero (line 274) The function values at the interval endpoints must differ in sign.”,原因是区间端点函数值同号,不满足  fzero  函数要求。
  • fsolve  函数求解

matlab

[x, f0, h] = fsolve(f, 0.7)
 

以  0.7  为初始值,得到解  x = 0.8317 ,函数在该点的值  f0 = 1.3518e-12  接近 0, h = 1  表示方程成功求解。

四、方程组 \begin{cases}x{2}-y=0 \ e^{-x}-y = 0\end{cases} 求解方法

法1

matlab
  
clear;
fun=inline('[t(1)^2-t(2)^3,exp(-t(1))-t(2)]','t');
t0=[1,1];
[t1,f,h]=fsolve(fun,t0)
fun=@(t)[t(1)^2-t(2)^3,exp(-t(1))-t(2)];
 
 
-  clear; :清除工作区所有变量。
 
-  fun=inline('[t(1)^2-t(2)^3,exp(-t(1))-t(2)]','t');  :用  inline  函数定义方程组, t  代表  [x, y] 。
 
-  t0=[1,1];  :设置初始猜测值。
 
-  [t1,f,h]=fsolve(fun,t0)  :用  fsolve  函数求解, t1  返回解, f  返回解处函数值, h  返回求解状态。
 
-  fun=@(t)[t(1)^2-t(2)^3,exp(-t(1))-t(2)];  :用匿名函数重新定义方程组,功能同  inline  函数。
法2
 
- step1:编写  fun.m  文件
 
matlab
  
function y=fun(t)
y(1)=t(1)^2-t(2)^3;
y(2)=exp(-t(1))-t(2);
end
 

定义函数  fun ,输入  t (代表  [x, y] ),输出  y  是包含两个方程表达式的向量。

  • step2:在命令行使用  fsolve('fun',[1,1])  调用  fsolve  函数求解,初始猜测值为  [1,1]  。

通过上述两种方法,利用  fsolve  函数并合理定义方程组和初始值,可求解给定方程组。

posted @ 2025-02-26 09:51  无敌烤肉大王  阅读(3401)  评论(0)    收藏  举报