octave符号计算及注意事项(和MATLAB还是有些区别的)(上)

本文详细介绍Octave中符号计算的基本概念、安装方法及各种运算技巧,包括符号表达式的创建、四则运算、提取分子分母、因式分解、展开、化简等,适合初学者快速掌握。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

octave中符号计算需要额外安装symbolic库,下面是安装方法,不安装无法使用
https://blog.csdn.net/weixin_39956356/article/details/106732134

1 octave符号计算简介

octave主要科学计算有两大类,数值计算和符号计算,今天这里分享的是符号计算,语法和MATLAB很像,或者说连参数完全一致。但是不能认为octave是MATLAB的盗版,octave是GNU的开源项目,代码开源,为了让MATLAB使用者不会感到有太大差距,也仿着做了octave。MATLAB在93年收购了Maple,在此基础上设计了符号工具箱,可以认为MATLAB是行业领先者,是行业的标准,而octave遵循这个标准,完成开发,有些地方比MATLAB做的还更有意思。
我写了注意的是octave和MATLAB有差别的地方
下面简单介绍两个概念,这里只是泛泛的讲,方便理解

  1. 符号:可以认为是在作业本上写的 x    y    z x\; y \;z xyz,比如常常见到的化简题目,一直化简,最后才带值计算
  2. 变量:在计算过程中是已知的,比如 x = 1    y = 2 x=1\;y=2 x=1y=2

1.1 符号计算及符号表达式的创建

有两种创建方式,不过第二种方式更常用

第一种:一次只能创建一个
符号量名(不给默认ans) = sym(符号字符串)
>> b = sym('b')
b = (sym) b
第二种:一次可以创建多个,注意中间不要用逗号
syms a b c d

符号表达式,这里分享最常用最容易理解的一种,即用已经定义的符号变量组成的表达式

# 一个求长方体体积的表达,生成的V自然而然的是符号变量
>> syms x y z
>> V = x*y*z
V = (sym) x*y*z

1.2 基本的符号运算

1.2.1 符号表达式的四则运算

基本的运算就是 +,-,*,/,^
比如两个多项式乘法,显示很友好,就像手写的一样

x 2 − x + 7 x^2 - x + 7 x2x+7 2 ∗ x 2 + 3 ∗ x − 5 2*x^2 + 3*x - 5 2x2+3x5相乘

>> f = x^2 - x + 7
f = (sym)

   2
  x  - x + 7

>> g = 2*x^2 + 3*x - 5
g = (sym)

     2
  2*x  + 3*x - 5

>> f * g
ans = (sym)

  / 2        \ /   2          \
  \x  - x + 7/*\2*x  + 3*x - 5/

1.2.2 符号表达式的提取分子,分母

注意:numden在octave没有像MATLAB那样化简

>> f = (x^2+3)/(2*x+1) + 3*x/(x-1)
f = (sym)

            2
   3*x     x  + 3
  ----- + -------
  x - 1   2*x + 1

>> [n, d] = numden(f)
n = (sym)

            2
   3*x     x  + 3
  ----- + -------
  x - 1   2*x + 1

d = (sym) 1

1.2.3 因式分解和展开

因式分解factor, 如 a 3 − b 3 a^3 - b^3 a3b3

>> A = a^3 - b^3
A = (sym)

   3    3
  a  - b

>> factor(A)
ans = (sym)

          / 2          2\
  (a - b)*\a  + a*b + b /

再举个例子,240的分解如下

>> factor(sym('240'))
ans = (sym)

   4  1  1
  2 *3 *5

因式展开expand, 如上 f ∗ g f*g fg

>> expand(f*g)
ans = (sym)

     4    3      2
  2*x  + x  + 6*x  + 26*x - 35

注意:collect在octave中没有,含义是按某个字母合并同类项

1.2.4 符号表达式化简

符号表达式化简simplify, 如化简 ( x 2 + y 2 ) 2 + ( x 2 − y 2 ) 2 (x^2+y^2)^2 + (x^2-y^2)^2 (x2+y2)2+(x2y2)2
注意:simple在octave中没有,MATLAB也弃用了

>> s = (x^2+y^2)^2 + (x^2-y^2)^2
s = (sym)

           2            2
  / 2    2\    / 2    2\
  \x  - y /  + \x  + y /

>> simplify(s)
ans = (sym)

     4      4
  2*x  + 2*y

1.2.5 符号表达式与数值表达式的转化

如数值表达式3.14转成符号表达式

>> sym(3.14)
warning: passing floating-point values to sym is dangerous, see "help sym"
warning: called from
    double_to_sym_heuristic at line 50 column 7
    sym at line 379 column 13
ans = (sym)

  157
  ---
   50

注意:有警告,不能传入浮点数,解决办法有两种,下面两种都可以

>> sym(314)/100
>> sym(3.14, 'r')

如符号表达式3.14转成数值

>> phi = '(1+sqrt(5))/2'
phi = (1+sqrt(5))/2
>> eval(phi)
ans =  1.6180

2 符号表达式默认C位变量

比如长方体体积的表达V = x*y*z,我们想知道里面的有几个符号变量,谁是C位?,为什么要知道谁是C位了(最核心的变量呢?),比如在求导,积分中默认是对C位变量求导,积分。除非指定其他变量
规定:离字母x最近的为C位变量。这里就是x了

>> findsym(V)		# 一共有三个符号变量
ans = x,y,z
>> findsym(V, 1)	# C位变量
ans = x

2.1 符号矩阵

数值计算关于矩阵的都可以用,不过结果是表达式而已。 比如求行列式的值det,秩rank,迹trace,上下三角矩阵tril,triu,

>> A = [sin(x) cos(x); acos(x) asin(x)]
A = (sym 2x2 matrix)

  [sin(x)   cos(x) ]
  [                ]
  [acos(x)  asin(x)]

>> det(A)
ans = (sym) sin(x)*asin(x) - cos(x)*acos(x)

3 看一个例子

λ \lambda λ使得齐次线性方程组有非零解
{ ( 1 − λ ) x 1 − 2 x 2 + 4 x 3 = 0 2 x 1 + ( 3 − λ ) x 2 + x 3 = 0 x 1 + x 2 + ( 1 − λ ) x 3 = 0 \begin{cases} (1-\lambda)x_1-2x_2+4x_3 = 0 \\ 2x_1+(3-\lambda)x_2 + x_3 = 0 \\ x_1 + x_2 + (1-\lambda)x_3 = 0 \end{cases} (1λ)x12x2+4x3=02x1+(3λ)x2+x3=0x1+x2+(1λ)x3=0

>> syms lambda
>> A = [1-lambda -2 4; 2 3-lambda 1; 1 1 1-lambda]
A = (sym 3x3 matrix)

  [1 - lambda      -2          4     ]
  [                                  ]
  [    2       3 - lambda      1     ]
  [                                  ]
  [    1           1       1 - lambda]

>> factor(det(A))
ans = (sym) -lambda*(lambda - 3)*(lambda - 2)

结果就是0, 2, 3.

4 总结

符号计算:更像是进行推导证明,结果是很精确的,而且octave输出很友好
数值计算:得到结果的一个有限小数,当然有些问题只有数值计算才能解决。

如有问题请留言。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值