利用MATLAB解方程(MATLAB的solve函数求非线性解方程或方程组)

首页常识更新时间:2023-05-11 18:26:36

solve函数可用来求解代数方程(组)与非线性方程(组),具体使用格式如下:

solve('F','var'):用于求解单个方程情形,F表示求解方程,var表示求解变量。当求解变量省略时, 表示对默认变量求解。若方程为符号方程,求解变量为符号变量时,上述格式中的单引号省略; [x1,x2,…,xn]=solve('F1','F2',…,'Fn','var1','var2',…,'varn'):用于求解n个方程组成的方程组问题, F1, F2, …, Fn表示各个方程,var1, var2, …, varn表示各个求解变量,[x1,x2,…,xn]表示求解结果。 S = solve(eqn,var) S = solve(eqn,var,Name,Value) Y = solve(eqns,vars) Y = solve(eqns,vars,Name,Value) [y1,...,yN] = solve(eqns,vars) [y1,...,yN] = solve(eqns,vars,Name,Value) [y1,...,yN,parameters,conditions]=solve(eqns,vars,'ReturnConditions',true)


实例求解

1.求解单变量方程

程序

clc; clear all; close all; syms x eqn = sin(x) == 1; solx = solve(eqn,x)

运行结果

solx = pi/2

程序

clc; clear all; close all; syms x %是必要的,这将会把x设为符号变量 eq=x^2 2*x 1;%eq也会变为一个符号变量用于储存方程 s=solve(eq,x) %方程的结果由solve函数返回,存储在s里。注意(eq,x)中x是说明eq这个方程中x为变量 %如果返回empty,则表明解不存在。如果返回empty warning,则解可能存在,但是solve找不到

运行结果

s = -1 -1


2.对方程组的求解

程序

clc; clear all; close all; syms x y eq1 = x 2*y-8; eq2 = 3*x 5*y-4; s1 = solve(eq1,eq2,x,y) s1.x s1.y [s11,s111] = solve(eq1,eq2,x,y)

运行结果

s1 = 包含以下字段的 struct: x: [1×1 sym] y: [1×1 sym] ans = -32 ans = 20 s11 = -32 s111 = 20 >>


3.返回数值解

程序

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

运行结果

ans = -0.63673265080528201088799090383828 ans = 1.4096240040025962492355939705895


4.求解不等式

程序

clc,clear syms x y S=solve(x^2 y^2 x*y<1,x>0,y>0 , [x,y], 'ReturnConditions',true); solx=S.x soly=S.y params=S.parameters conditions=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)

运行结果

solx = (- 3*v^2 u)^(1/2)/2 - v/2 soly = v params = [ u, v] conditions = 4*v^2 < u & u < 4 & 0 < v ans = logical 1 solx = 11^(1/2)/4 - 1/4 soly = 1/2 ans = 0.57915619758884996227873318416767 ans = 0.5 >>


5.返回实数解

程序

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

运行结果

ans = 5 - (2^(1/2)*(5 - 5^(1/2))^(1/2)*5i)/4 - (5*5^(1/2))/4 - 5/4 (2^(1/2)*(5 - 5^(1/2))^(1/2)*5i)/4 - (5*5^(1/2))/4 - 5/4 (5*5^(1/2))/4 - (2^(1/2)*(5^(1/2) 5)^(1/2)*5i)/4 - 5/4 (5*5^(1/2))/4 (2^(1/2)*(5^(1/2) 5)^(1/2)*5i)/4 - 5/4 ans = 5 >>


6.符号解求解多变量方程

程序

%为了避免求解方程时对符号参数产生混乱,需要指明一个等式中需要求解的变量。 %如果不指明的话,solve函数就会通过symvar选择一个变量(认为该变量是要求解的变量) clc,clear syms a b c x sola=solve(a*x^2 b*x c==0,a) %待求解的变量是a sol=solve(a*x^2 b*x c==0) %待求解的变量是x

运行结果

sola = -(c b*x)/x^2 sol = -(b (b^2 - 4*a*c)^(1/2))/(2*a) -(b - (b^2 - 4*a*c)^(1/2))/(2*a)


本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。

作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙

,
展开阅读全文
推荐内容
热门内容
热门文章

© 2007-2022 http://www.anhuiqq.cn,All Rights Reserved.