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 函数并合理定义方程组和初始值,可求解给定方程组。