[Matlab]中solve函数与subs函数的使用方法(解方程组与赋值)

一、solve函数用法:

1. 求解单变量方程

%-----例子1------syms xeqn=sin(x)==1;solve(eqn,x)%-----例子2------syms xeqn=sin(x)==1;[solx,params,conds]=solve(eqn,x,'ReturnConditions',true)%-----例子3---------------%如果返回empty,则表明解不存在。如果返回empty+warning,则解可能存在,但是solve找不到syms xsolve(3x+2,3x+1,x)

2.求解多变量方程

%---例1-----------------%为了避免求解方程时对符号参数产生混乱,需要指明一个等式中需要求解的变量。%如果不指明的话,solve函数就会通过symvar选择一个变量(认为该变量是要求解的变量)clc,clearsyms a b c xsola=solve(ax^2+bx+c==0,a)   %待求解的变量是asol=solve(ax^2+bx+c==0)  %待求解的变量是x%----例子2--------------%当求解的变量大于1个时,你声明变量的顺序就是slove返回解的顺序syms a b[b,a]=solve(a+b==1,2*a-b==4,b,a)

3.solve返回的解带有:参数&条件

%为了返回一个方程的完整的解(即解中含有的参数,及对参数的限制),需要指定ReturnConditions 为:true%---例子1:关于解的约束----clc,clearsyms xS=solve(sin(x)==0 ,x,'ReturnConditions',true);SS.xS.parametersS.conditions%为了找到x的数值解,以一个值(利用函数subs)代替k。用函数isAlways检验该值是否满足关于k的限制%检验k=4是否满足in(k, 'integer')isAlways(subs(S.conditions,S.parameters,4))%isAlways返回的是logical 1(true),这意味着:对于k而言,4是一个合法值。%利用4代替k,得到x的一个解。利用函数vpa获得该逼近的数值解(vpa设置数值精度:保留几位有效数字、几位小数)solx=subs(S.x,S.parameters,4)vpa(solx)%为0<x<2*pi寻找一个k的合法解,符合下面的前提:条件(S.conditions)、利用solve求解k的约束条件。替代解x中的k的值assume(S.conditions)solk=solve(S.x>0,S.x<2*pi,S.parameters)solx=subs(S.x,S.parameters,solk)

4. 求解方程组(为变量分配解)

%当求解方程组的时候,利用多个输出项对应求解的输出变量。%solve返回一个符号数组(为每个相互独立的变量)%-----例子1--------------syms a u v[sola,solu,solv]=solve(au^2+v^2==0,u-v==1,a^2+6==5a,a,u,v)solutions=[sola,solu,solv]%----例子2------------syms x y z[solx,soly,solz]=solve(35(y-x)==0,-7x-xz+28y==0,xy-3z==0,x,y,z)solutions=[solx,soly,solz]

5. 返回方程组完整的解(包括:参数和约束条件)

%需要指定ReturnConditions 为:true%输出则要多附加两项:parameters 、conditionsclc,clearsyms x y[solx,soly,params,conditions]=solve(sin(x)==cos(2*y) , x^2==y , [x,y],'ReturnConditions',true)solutions=[solx,soly]

6. 返回数值解

%解析解(analytical solution):用严格的公式表示的解。%数值解(numerical solution):无法用严格的公式表示,是采用某种计算方法(有限元、逼近、插值)得到的。%symbolic solver无法找到精确的用符号表示的解,因此在调用numeric solver之前会事先声明(warning)。因为等式不是多项式,所以想要找到全部可能的解需要很长时间。%numeric solver不会尽力去找等式的全部numeric solution,它仅仅返回它找到的第一个解。clc,clearsyms xsolve(sin(x)==x^2-1,x)%验证上面的等式确实有一个正值解:画出等式的左右两部分的曲线ezplot(sin(x),-2,2)hold onezplot(x^2-1,-2,2)hold off%也可以直接用函数vpasolve求出数值解(需要定义(寻找)解的范围)vpasolve(sin(x)==x^2-1,x,[0 2 ])

7. 求解不等式

%solve能求解满足约束条件的不等式%需要指定ReturnConditions 为:true。这样可以返回解中涉及到的任何参数和约束条件% x>0% y>0% x^2+y^2+xy<1clc,clearsyms x yS=solve(x^2+y^2+x*y<1,x>0,y>0    ,   [x,y], 'ReturnConditions',true);solx=S.xsoly=S.yparams=S.parametersconditions=S.conditions%利用subs和isAlways检验u=7/2和v=1/2是否满足约束条件isAlways(subs(S.conditions,S.parameters,[7/2,1/2]))%isAlways返回loogical 1(true)表示这些值满足约束条件。将这两个参数的值带入(函数subs)S.x和S.y中,找到一个x和y的解solx=subs(S.x,S.parameters,[7/2,1/2])soly=subs(S.y,S.parameters,[7/2,1/2])%用函数vpa得到解的数值形式vpa(solx)vpa(soly)

8.返回实数解

clc,clearsyms xsolve(x^5==3125,x)%如果仅仅需要一个实数解,那么就把选项Real设置成truesolve(x^5==3125,x,'Real',true)

9.返回一个解(主值Principal)

%不是返回一个无限多元素的周期解的集合,而是选择其中的最为实际的3个解(实际的、实用性的be most practical)syms xsolve(sin(x)+cos(2*x)==1,x)%利用选择PrincipalValue设置为true选择一个解(主值)solve(sin(x)+cos(2*x)==1,x,'PrincipalValue',true)

10. 应用简化规则来缩短结果

%solve默认是不对解采用简化规则的,但是这些解从数学上来讲,不总是正确的。这样以来,solve就不能symbolically求解方程了。clc,clearsyms xsolve(exp(log(x)log(3x))==4 , x)%将IgnoreAnalyticConstraints (忽略解析约束)设置为true,这样就会应用简化规则,有可能让solve找到一个结果。%简化规则的目的就是为了找到一个解。%但是也不是任何情况下都可以应用简化规则,因此,应用简化规则后,应该对解的正确与否进行核实S=solve(exp(log(x)log(3x))==4 , x,'IgnoreAnalyticConstraints',true)

11.忽略有关变量的假设

%sym和syms函数可以让你对符号变量进行假设(设置assumptions)。例如,可以声明x为正值clc,clearsyms x positive%那么,在上述假设下,求得的解只能是符合假设的解solve(x^2+5*x-6==0,x)%如果想要得到方程全部的解,则需要将IgnoreProperties 设置为truesolve(x^2+5*x-6==0,x,'IgnoreProperties ',true)%为了后续计算,清除之前的假设syms x clear

12.数值逼近符号解(that Contain RootOf)

%当求解多项式的时候,solve可能返回包含RootOf的解。为了数值逼近这些解,可以采用vpa函数。clc,clearsyms x s=solve(x^4+x^3+1==0,x)%因为解中没有参数,所以可以采用vpa进行数值逼近vpa(s)

13. 求解高阶的多项式等式

%当求解高阶的多项式方程的时候,solve可能采用 RootOf表示求得的解clc,clearsyms x asolve(x^4+x^3+a==0,x)%为了得到方程的显式解,尝试调用带有参数MaxDegree的solve函数。该选项规定了多项式最大的degree,solve以此标准返回显式解。%默认值是3。增大该数值,就可以得到高阶多项式的显式解。s=solve(x^4+x^3+a==0,x,'MaxDegree',4)pretty(s)

**二,**Matlab subs函数的用法

​ matlab中subs()是符号计算函数,详细用法可以在Matlab的Command Windows输入:help subs。subs()函数表示将符号表达式中的某些符号变量替换为指定的新的变量,常用调用方式为:

  • R = subs(S, new) 利用new的值代替符号表达式S中的默认符号。

  • R = subs(S) 用由调用函数或Matlab工作空间中获取的值替代了在符号表达式S中的所有当前的变量。

  • R = subs(S, old, new) 利用new的值代替符号表达式中old的值。old为符号变量或是字符串变量名。new是一个符号货数值变量或表达式。也就是说R = subs(S,old,new)在old=new的条件下重新计算了表达式S。这种替换第一次作为Matlab表达式被尝试,如果所有在new中的数值是双精度的,计算是以双精度算术运算进行的。讲new值转化为符号可以验证符号货变量的运算精度。
    ​ 如果old和new是大小和类型相同的向量或是元包数组,每一个old的元素都将被相应新的元素替换。

​ 如果S和old是标量,new是数组或元包数组,则扩展标量去计算一个数组结果。

如果new是个数值矩阵元包数组,替换讲运行为/智能元素/(i.e., subs(x*y,{x,y},{A,B}) returns A.*B when A and B are numeric)。

​ 如果subs(s,old,new) 没有改变S,则将会试行subs(s,new,old)。这将为前面的版本提供向前的兼容性,消除记忆参数顺序。subs(s,old,new,0)不改变参数,如果S没有改变。

subs函数的用法:

例1:

syms a b x %注意:定义的是符号变量

f = a*sin(x)+b

(符号-符号置换)

f1 = subs(f,sin(x),‘log(y)’)

(符号-数字置换)

f2 = subs(f,a,2.89)

(替换所有变量)

f3 = subs(f,{a,b,x},{2,5,sym(‘pi/3’)})

代码实现如下:

>> syms a b x        %注意:定义的是符号变量f = a*sin(x)+bf =b + a*sin(x)>> f1 = subs(f,sin(x),'log(y)')f1 =b + a*log(y)>> f2 =  subs(f,a,2.89)f2 =b + (289*sin(x))/100>> f3 = subs(f,{a,b,x},{2,5,sym('pi/3')})f3 =3^(1/2) + 5

例2:

syms x y z %声明三个符号变量

S = x2+y2

1、将变量x替换为数值1:

subs(S,x,1)

2、将变量x替换为变量z:

subs(S,x,z)

3、同时将变量x和y分别替换为1和z:

subs(S,{x,y},{1,z})

4、将单变量替换为数组:

subs(S,x,[1 2;3 4])

代码实现如下:

>> syms x y z %声明三个符号变量S = x^2+y^2 S =x^2 + y^2>> subs(S,x,1)ans =y^2 + 1>> subs(S,x,z)ans =y^2 + z^2>> subs(S,{x,y},{1,z})ans =z^2 + 1>> subs(S,x,[1 2;3 4])ans =[ y^2 + 1,  y^2 + 4]
[ y^2 + 9, y^2 + 16]
>>

[Matlab]中solve函数与subs函数的使用方法相关推荐

  1. matlab中load seamout,matlab中的save与load函数

    matlab中的save与load函数 用save函数,可以将工作空间的变量保存成txt文件或mat文件等. 比如: save peng.mat p j 就是将工作空间中的p和j变量保存在peng.m ...

  2. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文

    Matlab中一个很有用的函数:regionprops 已有 6712 次阅读 2010-1-30 22:52 |个人分类:开发经验|系统分类:科研笔记| 有用的函数, regionprops Mat ...

  3. 函数调用matlab,Matlab中一个函数调用另外一个函数的操作方法

    这篇文章为各位带来的内容是Matlab中一个函数调用另外一个函数相关的,对此感兴趣的用户可以去下文看看Matlab中一个函数调用另外一个函数的操作教程. Matlab中一个函数调用另外一个函数的操作方 ...

  4. matlab怎么调用主函数,Matlab中一个函数调用另外一个函数的操作步骤

    原创Matlab中一个函数调用另外一个函数的操作步骤 编辑:小安 来源:PC下载网时间:2019-11-18 13:27:35 最近很多伙伴才刚刚安装入手Matlab这款软件,而本节就重点介绍了关于M ...

  5. Matlab中用于数据预测spline()函数的使用

    Matlab中用于数据预测spline()函数的使用 ​ 再matlab中spline函数是利用三次方样条数据插值 语法 s = spline(x,y,xq) pp = spline(x,y) s = ...

  6. Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵

     Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SI ...

  7. Matlab中print, fprint, fscanf, disp函数的用法

    最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法 一.print() 函数可以把函数图 ...

  8. matlab中提示错误使用* BLAS loading error解决方法

    matlab中提示错误使用* BLAS loading error解决方法 参考文章: (1)matlab中提示错误使用* BLAS loading error解决方法 (2)https://www. ...

  9. matlab中画的图导出高分辨率图片的方法

    论文投稿时要求分辨率要300dpi,在 matlab 中画的图导出300dpi图片的方法如下: 如何画图我就不介绍了,假设已经把图画出来了,如下图所示: 直接保存或者另存为图片的分辨率很低,因此要这么 ...

  10. MATLAB中的varargin,varargout在函数中运用

    varargin,表示用在一个函数中,输入参数不确定的情况,这增强了程序的灵活性.               例如:function g=fun(f,varargin)               ...

最新文章

  1. 【飞行术】Web2.0如何改变电信业
  2. [转]/tomcat/conf/server.xml配置文件的源码解析
  3. 触摸屏校准没反应,启动时出现No raw modules loaded.ts_config:No such file or directory错误的解决
  4. 美团java研发岗二面:java静态方法存储在哪个区
  5. 攻击linux的samba,Samba 中间人攻击漏洞(CVE-2015-5296)
  6. drupal_Drupal社区在DevOps采纳中的地位
  7. js已知文件路径得到file对象_Node之文件流与文件路径操作
  8. Java中string,map,json之间的常用转换方法(json转map,map转json,json转string等)
  9. 计算机组成原理bzc指令,计算机组成原理课程设计-09级.ppt
  10. Linux安装deb安装包命令
  11. leetcode 155. Min Stack最小栈(中等)
  12. 查看oracle归档日志scn,Oracle 归档日志
  13. 简历模板,简历通用模板,程序员求职简历模板
  14. 安卓手机真的不行了,搞不定卡顿问题,只能抄袭苹果iOS系统,然而各怀鬼胎的它们终究画虎不成反类犬...
  15. iPhone(IOS10)忘记了访问限制的密码该怎么办?
  16. 大道至简:软件工程实践者的思想读后感
  17. RTCP关键协议翻译
  18. 壁纸 | iOS 14 内置这几张壁纸,你喜欢吗?
  19. xlrd是python自带的库_xlrd库报错
  20. 数组按照中文名称排序

热门文章

  1. Best Buy百思买验厂反恐标准手册/反恐程序要求
  2. 2018.6清北学堂day3下午笔记
  3. java罗盘说明_综合罗盘各层应用说明
  4. select标签 selected 选中状态动态查询
  5. API是什么意思,具体是什么?
  6. 大学毕业生如何成功应聘高薪IT职位 [转]
  7. db2import详解_DB2中import详解 - yishueitian326的日志 - 网易博客
  8. 汽车冬季养护的四个重点
  9. 电商产品设计:如何设计产品分销体系
  10. c++ 与 duckduckgo