使用matlab进行非线性方程组求解

今天,恰好遇到使用matlab进行了非线性方程组的求解。

情况是,一些无法手动表示,推导的方程组,比如像超越方程这种,可以用matlab进行直接求值,这在一些需要仿真数据的场景比较有用。

环境:matlab2015a

函数:Symbolic Math Toolbox里面的sym和solve函数。其中sym在第一个红框中,solve在第二个红框中。





1.solve

格式:(1)Y = solve(eqns,vars)

(2)[y1,...,yN] = solve(eqns,vars)

先解释两个参数吧,

①eqns就是你的方程组,方程组里面的各个方程是组织为一个数组的。

所以你可以直接使用 [方程1,方程2,。。。。,方程n] 对应于eqns输入参数。

也可以后面会将到,将eqns声明为一个数组,然后带入eqns输入即可,这样方便编辑。


②vars就是你想要返回的求得的未知变量,如果你不明确指定,那他就会按照sym的对应。


③返回值,有两种。Y代表一个结构体,将返回的变量通通放入结构体Y里面,然后访问和C语言的结构体一样,假设Y下面有两个成员,y1,y2,

你直接Y不会显示里面的值,要Y.y1 Y.y2才能显示。

[y1,y2,...,yN]就是直接对应于vars里面你直接想要求得的值,如果没有明确指定vars就按默认对应。


注:(1)vars如果你不明确指定的话,在参数少的时候也容易分清返回自己想要的,但是如果参数过多还是最好明确指定自己想要的参数。

(2)Y和[y1,y2,...,yN]两种返回赋值方式各有优缺点,Y你访问里面的元素的话比较麻烦,

[y1,y2,...,yN]这种情况如果N有几十个,你这样输入很烦,而这个时候全部存入Y中,再用一个for循环遍历就能存入一个向量中了。

(3)然而突然发现,在结构体中的元素并不能使用下标来遍历,目前还在纠结中。。。


2.sym

先讲下这个函数用来干什么的,在matlab中,你可以直接用变量,但是你必须要赋值。

比如你想要输入a=b+c;

你的a和b首先要初始化,即b和c是要有值的。

那么问题就来了,我求解方程的时候就是不知道未知数才求解,如何赋值呢?

这个时候就需要使用sym声明符号变量了。它声明的未知量不用赋值。


格式:A = sym('a',[m,n])


这个的意思就是说,生成一个m,n维的矩阵A,然后它的每一个元素用a来标识。


注意:用a的标识是它标识矩阵内部的元素,你要使用该未知量还是需要按照正常的矩阵元素访问方法,比如A(1,2)这样。


3.举个栗子

求解方程组:3x1+2x2=5

                      5x1+3x2=8

(1)求解


(2)直接使用 [方程1,方程2] 作为solve的参数


(3)用结构体返回值的形式


  • 23
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值