- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据输出
- MATLAB - 归一化数据
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策
- MATLAB - If End 语句
- MATLAB - If Else 语句
- MATLAB - If…Elseif Else 语句
- MATLAB - 嵌套 If 语句
- MATLAB - Switch 语句
- MATLAB - 嵌套 Switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - For 循环
- MATLAB - While 循环
- MATLAB - 嵌套循环
- MATLAB - Break 语句
- MATLAB - Continue 语句
- MATLAB - End 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - Return 语句
- MATLAB - 空函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - Filter 函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - Map 函数
- MATLAB - Mean 函数
- MATLAB - End 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - Try...Catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 2D 线性图
- MATLAB - 3D 图
- MATLAB - 格式化绘图
- MATLAB - 对数轴图
- MATLAB - 绘制误差条
- MATLAB - 绘制 3D 等值线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 2D 数组插值
- MATLAB - 3D 数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 2D 逆余弦变换
- MATLAB - 为坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消去法
- MATLAB - 高斯-约旦消去法
- MATLAB - 简化行阶梯形式
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 杂项
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 代数
到目前为止,我们已经看到所有示例都可以在 MATLAB 以及其 GNU 版本(也称为 Octave)中运行。但是,对于解决基本的代数方程,MATLAB 和 Octave 略有不同,因此我们将尝试在单独的部分中介绍 MATLAB 和 Octave。
我们还将讨论代数表达式的因式分解和化简。
在 MATLAB 中解决基本的代数方程
solve 函数用于解决代数方程。在最简单的形式中,solve 函数将用引号括起来的方程作为参数。
例如,让我们求解方程 x-5 = 0 中的 x
solve('x-5=0')
MATLAB 将执行上述语句并返回以下结果:
ans = 5
您还可以这样调用 solve 函数:
y = solve('x-5 = 0')
MATLAB 将执行上述语句并返回以下结果:
y = 5
您甚至可以不包含方程的右侧:
solve('x-5')
MATLAB 将执行上述语句并返回以下结果:
ans = 5
如果方程涉及多个符号,则 MATLAB 默认情况下假设您正在求解 x,但是,solve 函数还有另一种形式:
solve(equation, variable)
其中,您也可以提及变量。
例如,让我们求解方程 v – u – 3t2 = 0 中的 v。在这种情况下,我们应该写:
solve('v-u-3*t^2=0', 'v')
MATLAB 将执行上述语句并返回以下结果:
ans = 3*t^2 + u
在 Octave 中解决基本的代数方程
roots 函数用于在 Octave 中解决代数方程,您可以将上述示例编写如下:
例如,让我们求解方程 x-5 = 0 中的 x
roots([1, -5])
Octave 将执行上述语句并返回以下结果:
ans = 5
您还可以这样调用 solve 函数:
y = roots([1, -5])
Octave 将执行上述语句并返回以下结果:
y = 5
在 MATLAB 中解决二次方程
solve 函数还可以解决高阶方程。它通常用于解决二次方程。该函数返回方程的根,以数组的形式。
以下示例求解二次方程 x2 -7x +12 = 0。创建一个脚本文件并键入以下代码:
eq = 'x^2 -7*x + 12 = 0'; s = solve(eq); disp('The first root is: '), disp(s(1)); disp('The second root is: '), disp(s(2));
运行文件时,它会显示以下结果:
The first root is: 3 The second root is: 4
在 Octave 中解决二次方程
以下示例在 Octave 中求解二次方程 x2 -7x +12 = 0。创建一个脚本文件并键入以下代码:
s = roots([1, -7, 12]); disp('The first root is: '), disp(s(1)); disp('The second root is: '), disp(s(2));
运行文件时,它会显示以下结果:
The first root is: 4 The second root is: 3
在 MATLAB 中解决高阶方程
solve 函数还可以解决高阶方程。例如,让我们求解三次方程 (x-3)2(x-7) = 0
solve('(x-3)^2*(x-7)=0')
MATLAB 将执行上述语句并返回以下结果:
ans = 3 3 7
对于高阶方程,根很长,包含许多项。您可以通过将它们转换为双精度数来获得此类根的数值。以下示例求解四阶方程 x4 − 7x3 + 3x2 − 5x + 9 = 0。
创建一个脚本文件并键入以下代码:
eq = 'x^4 - 7*x^3 + 3*x^2 - 5*x + 9 = 0'; s = solve(eq); disp('The first root is: '), disp(s(1)); disp('The second root is: '), disp(s(2)); disp('The third root is: '), disp(s(3)); disp('The fourth root is: '), disp(s(4)); % converting the roots to double type disp('Numeric value of first root'), disp(double(s(1))); disp('Numeric value of second root'), disp(double(s(2))); disp('Numeric value of third root'), disp(double(s(3))); disp('Numeric value of fourth root'), disp(double(s(4)));
运行文件时,它会返回以下结果:
The first root is: 6.630396332390718431485053218985 The second root is: 1.0597804633025896291682772499885 The third root is: - 0.34508839784665403032666523448675 - 1.0778362954630176596831109269793*i The fourth root is: - 0.34508839784665403032666523448675 + 1.0778362954630176596831109269793*i Numeric value of first root 6.6304 Numeric value of second root 1.0598 Numeric value of third root -0.3451 - 1.0778i Numeric value of fourth root -0.3451 + 1.0778i
请注意,最后两个根是复数。
在 Octave 中解决高阶方程
以下示例求解四阶方程 x4 − 7x3 + 3x2 − 5x + 9 = 0。
创建一个脚本文件并键入以下代码:
v = [1, -7, 3, -5, 9]; s = roots(v); % converting the roots to double type disp('Numeric value of first root'), disp(double(s(1))); disp('Numeric value of second root'), disp(double(s(2))); disp('Numeric value of third root'), disp(double(s(3))); disp('Numeric value of fourth root'), disp(double(s(4)));
运行文件时,它会返回以下结果:
Numeric value of first root 6.6304 Numeric value of second root -0.34509 + 1.07784i Numeric value of third root -0.34509 - 1.07784i Numeric value of fourth root 1.0598
在 MATLAB 中解决方程组
solve 函数还可以用于生成涉及多个变量的方程组的解。让我们举一个简单的例子来演示此用法。
让我们求解以下方程:
5x + 9y = 5
3x – 6y = 4
创建一个脚本文件并键入以下代码:
s = solve('5*x + 9*y = 5','3*x - 6*y = 4'); s.x s.y
运行文件时,它会显示以下结果:
ans = 22/19 ans = -5/57
同样,您可以求解更大的线性系统。考虑以下方程组:
x + 3y -2z = 5
3x + 5y + 6z = 7
2x + 4y + 3z = 8
在 Octave 中解决方程组
我们有一个稍微不同的方法来解决'n'个未知数的'n'个线性方程组。让我们举一个简单的例子来演示此用法。
让我们求解以下方程:
5x + 9y = 5
3x – 6y = 4
这样的线性方程组可以写成单个矩阵方程 Ax = b,其中 A 是系数矩阵,b 是包含线性方程右侧的列向量,x 是表示解的列向量,如下面的程序所示:
创建一个脚本文件并键入以下代码:
A = [5, 9; 3, -6]; b = [5;4]; A \ b
运行文件时,它会显示以下结果:
ans = 1.157895 -0.087719
同样,您可以求解如下所示的更大线性系统:
x + 3y -2z = 5
3x + 5y + 6z = 7
2x + 4y + 3z = 8
在 MATLAB 中展开和收集方程
expand 和 collect 函数分别展开和收集方程。以下示例演示了这些概念:
当您使用许多符号函数时,您应该声明您的变量是符号变量。
创建一个脚本文件并键入以下代码:
syms x %symbolic variable x syms y %symbolic variable x % expanding equations expand((x-5)*(x+9)) expand((x+2)*(x-3)*(x-5)*(x+7)) expand(sin(2*x)) expand(cos(x+y)) % collecting equations collect(x^3 *(x-7)) collect(x^4*(x-3)*(x-5))
运行文件时,它会显示以下结果:
ans = x^2 + 4*x - 45 ans = x^4 + x^3 - 43*x^2 + 23*x + 210 ans = 2*cos(x)*sin(x) ans = cos(x)*cos(y) - sin(x)*sin(y) ans = x^4 - 7*x^3 ans = x^6 - 8*x^5 + 15*x^4
在 Octave 中展开和收集方程
您需要安装 symbolic 包,该包分别提供 expand 和 collect 函数来展开和收集方程。以下示例演示了这些概念:
当您使用许多符号函数时,您应该声明您的变量是符号变量,但 Octave 定义符号变量的方法有所不同。请注意 Sin 和 Cos 的用法,它们也在 symbolic 包中定义。
创建一个脚本文件并键入以下代码:
% first of all load the package, make sure its installed. pkg load symbolic % make symbols module available symbols % define symbolic variables x = sym ('x'); y = sym ('y'); z = sym ('z'); % expanding equations expand((x-5)*(x+9)) expand((x+2)*(x-3)*(x-5)*(x+7)) expand(Sin(2*x)) expand(Cos(x+y)) % collecting equations collect(x^3 *(x-7), z) collect(x^4*(x-3)*(x-5), z)
运行文件时,它会显示以下结果:
ans = -45.0+x^2+(4.0)*x ans = 210.0+x^4-(43.0)*x^2+x^3+(23.0)*x ans = sin((2.0)*x) ans = cos(y+x) ans = x^(3.0)*(-7.0+x) ans = (-3.0+x)*x^(4.0)*(-5.0+x)
代数表达式的因式分解和化简
factor 函数对表达式进行因式分解,simplify 函数对表达式进行化简。以下示例演示了该概念:
示例
创建一个脚本文件并键入以下代码:
syms x syms y factor(x^3 - y^3) factor([x^2-y^2,x^3+y^3]) simplify((x^4-16)/(x^2-4))
运行文件时,它会显示以下结果:
ans = (x - y)*(x^2 + x*y + y^2) ans = [ (x - y)*(x + y), (x + y)*(x^2 - x*y + y^2)] ans = x^2 + 4