符号方程的求解 solve linsolve fsolve dsolve
matlab 符号函数 求解方程
标题:使用MATLAB符号函数求解方程第一部分:介绍MATLAB符号函数1. MATLAB符号函数的基本概念MATLAB符号函数是MATLAB中的一个重要功能模块,它可以用于求解复杂的数学问题,包括方程、微分方程、积分等。
使用符号函数,能够将数学问题表达为符号形式,从而进行精确的运算和分析。
2. MATLAB符号函数的基本语法在MATLAB中,可以使用syms命令定义符号变量,然后使用符号变量进行符号运算。
例如:syms x yf = x^2 + y^2;3. MATLAB符号函数的优势相比于数值计算,符号计算能够得到更为精确和准确的结果,适用于数学分析、推导、证明等领域。
第二部分:使用MATLAB符号函数求解方程1. 方程求解的基本概念对于给定的方程,可以使用MATLAB符号函数来进行求解。
求解方程的目的是找到满足该方程的未知数的取值,或者找到使得方程等号成立的值。
2. 求解一元方程对于一元方程,可以使用solve函数来求解。
例如:syms xeqn = x^2 - 2*x - 8 == 0;sol = solve(eqn, x);3. 求解多元方程组对于多元方程组,可以使用solve函数同时求解多个未知数。
例如:syms x yeq1 = x + y == 5;eq2 = x - y == 1;[solx, soly] = solve(eq1, eq2, x, y);第三部分:MATLAB符号函数求解方程的实例1. 实例一:一元二次方程考虑方程 x^2 + 2x - 8 = 0,使用MATLAB符号函数求解该方程,可以得到x1 = 2,x2 = -4。
2. 实例二:二元一次方程组考虑方程组x + y = 5x - y = 1使用MATLAB符号函数求解该方程组,可以得到x = 3,y = 2。
第四部分:总结与展望1. 符号函数的应用MATLAB符号函数在数学建模、科学计算、工程技术等领域都有广泛的应用,在方程求解、微分积分、代数运算等方面发挥着重要作用。
matlab求解符号方程
matlab求解符号方程
使用Matlab函数进行符号方程的求解是一种非常有效和方便的方法。
通过这种方法,我们可以得到符号解,从而避免了手工计算的复杂性和容易出错的风险。
在Matlab中,我们可以使用syms函数定义符号变量,然后使用solve函数求解符号方程。
在求解过程中,我们可以设置一些参数,如求解范围,求解精度等,以获得更加准确和可靠的结果。
此外,Matlab还提供了一些其他的符号计算工具,如求导,积分等,可以帮助我们更加轻松地处理复杂的符号计算问题。
总之,Matlab是一款非常强大和灵活的工具,可以帮助我们更加高效地求解符号方程和其他符号计算问题。
- 1 -。
符号微分方程求解matlab
符号微分方程求解MATLAB1. 引言在数学和工程学科中,微分方程是一个重要而广泛应用的领域。
而符号微分方程是微分方程的一种特殊形式,可以使用MATLAB来进行求解和分析。
本文将探讨符号微分方程求解的基本原理及使用MATLAB进行符号微分方程求解的方法。
2. 符号微分方程的概念符号微分方程是指微分方程中的未知函数和导数都是符号形式的函数,而非具体的数值。
符号微分方程包含了符号运算,可以用于描述物理系统和工程问题的动态行为。
3. MATLAB符号计算工具箱MATLAB提供了符号计算工具箱,可以用于处理符号运算和符号微分方程求解。
符号计算工具箱可以处理符号函数、符号变量和符号表达式,能够进行符号微分、积分、方程求解等操作。
4. 符号微分方程的求解方法符号微分方程求解的一般步骤包括建立符号微分方程模型、对模型进行符号求解、数值求解和结果分析。
在MATLAB中,可以使用符号计算工具箱来实现这些步骤。
4.1. 符号微分方程模型的建立在MATLAB中,可以使用符号变量和符号函数来表示符号微分方程的未知函数和导数。
首先需要定义符号变量,并将微分方程表示为符号表达式。
对于简单的一阶线性符号微分方程 dy/dx = f(x, y),可以使用符号变量 x 和 y,并定义符号函数 f(x, y) 来表示微分方程的右侧函数。
4.2. 符号微分方程的符号求解在MATLAB中,可以使用符号计算工具箱中的函数对符号微分方程进行符号求解。
通过调用符号求解函数,可以得到微分方程的解析解表达式。
对于线性微分方程 dy/dx + p(x)y = q(x),可以使用符号计算工具箱中的 dsolve 函数进行符号求解,得到微分方程的解析解表达式。
4.3. 符号微分方程的数值求解除了符号求解之外,还可以使用MATLAB中的数值计算工具箱对符号微分方程进行数值求解。
通过数值求解可以得到微分方程的数值解,用于进行模拟和仿真分析。
5. MATLAB中符号微分方程求解的例子接下来,我们通过一个简单的例子来演示在MATLAB中求解符号微分方程的方法。
3.7符号代数方程求解
3.7.1 符号代数线性方程求解
符。so1ve函数的求解如下所示:
【例3.7.1】 >>solve('p*sin(x)=r')
ans = asin(r/p)
如果符号表达式不含等号,则函数solve会自动 将表达式转换成等号右端为0的符号方程,例如: 【例3.7.2】 >>solve('p*tan(x)-r') ans = atan(r/p) 如果想对非默认变量求解,则solve函数必须指 定变量 。例如: 【例3.7.3】 >> solve('a*x^2+b*x+c','a') ans = -(b*x+c)/x^2
x=fsolve(fun,x0,options,pl,p2,…) pl,p2,…直接赋 给函数fun,即fun(x,p1,p2, …)。此时,若options使 用默认值,需要输入空矩阵。
【例3.7.7】用fsolve解方程组
2 x y e x 0 x 2 y e y 0
solve 函数也可解方程组。 【例3.7.4】 >>[x,y]=solve('x^2+x*y+y=3','x^2-4*x+3=0') x= [ 1] [ 3] y= [ 1] [ -3/2]
linsolve函数的求解如下例所示: 【例3.7.5】 >>a=sym('[9 0;-1 8] '); b=sym('[1;2] '); linsolve(a,b) ans = [ 1/9] [ 19/72] 实际上,x=linsolve(a,b)与x=sym(a)\sym(b) 的结果相同。 【例3.7.6】 >> a=sym('[9 0;-1 8] '); b=sym('[1;2]') a\b ans = [ 1/9] [ 19/72]
MATLAB基础教程笔记
MATLAB7.0基础教程清华大学笔记第一章MATLAB 7.0简介第二章MATLAB 7.0的安装和用户界面1.3.4.命令窗口查询函数查找具体的函数帮助help查找含有该字段的函数帮助lookfor第三章基本使用方法1.续行符…2.常用的操作命令Cd , clc , clear , clf , diary , dir , disp , echo , hold , load , pack , path , quit , save , type3.MATLAB 7.0 的常用常量Ans , beep , pi , eps , inf , nan , nargin , nargout , varagin , varagout , realmin , realmax , bitmax4.常用的函数Exp , log , log10 , fix , floor , ceil , round , rem , mod , sign , pow2 , sqrt , abs5.rem/mod(X,Y)当X,Y符号相同的时候,这两者一样,当符号不相同的时候才有差别,具体表现在rem结果的符号与被除数相同;mod结果的符号与除数相同6.表达式不能与复数I , j直接相连,只有数字能与复数I , j直接相连第四章数值计算功能1.等差向量的生成:(1)冒泡生成法,如:ans=[m:x:n] x代表步长(2) linspace 函数,如:ans=linspace(m,n,y), y代表向量个数,默认为100 2.向量与数的四则运算加法A+b 减法A-b3. 向量求点积:dot (向量维数要一致)向量求叉积:cross (向量维数要为3)向量求混合积:ans=dot(x1,cross(x2,x3)) (dot和cross的顺序不要搞错了)4. 矩阵的除法x=B\A 就是A*x=B的解,但是要求B与A行数一致x=B/A 就是x*A=B的解,但是要求B与A列数一致。
Matlab_5方程求解
1、solve :解代数方程20ax bx c ++=syms a b c xS = a*x^2 + b*x + c; solve(S)()()cos 2sin 1x x +=s = solve('cos(2*x)+sin(x)=1');220x y +=, 2x yα-= syms x y alpha;[x,y] = solve(x^2*y^2, x-y/2-alpha);245x y ux y v +=⎧⎨+=⎩方法1:clear u v x y syms u v x yS = solve(x+2*y-u, 4*x+5*y-v); sol = [S.x;S.y]方法2:A = [1 2; 4 5]; b = [u; v]; z = A\b2、fsolve (@myfunc, ‘初始条件’, ‘自变量列表’)非线性代数方程的优化1234x x x ⎡⎤⋅⋅=⎢⎥⎣⎦function F = myfun(x) F = x*x*x-[1,2;3,4];x0 = ones(2,2); % Make a starting guess at the solutionoptions = optimset('Display','off'); % Turn off Display[x,Fval,exitflag] = fsolve(@myfun,x0,options)x = -0.1291 0.8602 1.2903 1.16123、dsolve (‘eqn 1’, ‘eqn 2’, …… ,‘eqn n’, ‘初始条件’, ‘自变量列表’)偏微分方程Dy y t →∂∂,222D y y t →∂∂,333D y y t →∂∂ 默认自变量:t ;dsolve('Dy = a*x'); dsolve('Df = f + sin(t)');dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0'); dsolve('(Dy)^2 + y^2 = 1','y(0) = 0');求解方程: 21duu dt=+Matlab 方法:dsolve('Du=1+u^2','t')u = tan(t+C1)求解方程组:233453442dxx y z dt dyx y z dt dzx y z dt ⎧=-+⎪⎪⎪=-+⎨⎪⎪=-+⎪⎩Matlab 方法:[x,y,z]=dsolve('Dx=2*x-3*y+3*z','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z', 't');% 将x 化简x = simple(x);y = simple(y); z = simple(z);x = C2/exp(t)+C3*exp(t)^2;y = C2*exp(-t)+C3*exp(2*t)+exp(-2*t)*C1; z = C3*exp(2*t)+exp(-2*t)*C1;4、微分方程的数值计算 4.1 数值计算通式替换为设置:相对误差和绝对误差自变量函数值ode45ode23ode113ode15s ode23sf.mTs=[t 1,t 2]y(t 1)省缺值:10-310-6设置新值:re abs方法:options=odeset(‘relTol ’,re ,’absTol ’,abs )[t, y] = solver(’f ’,ts,y0,options)a) 在解n 个方程时,y0和y 均为n 维向量,f.m 中的方程组用数组y 定义; b) 高阶微分方程转换为一阶微分方程进行计算。
matlab求解符号方程
matlab求解符号方程
符号方程是一类包含未知量的方程,可以通过代数方法求解。
在MATLAB中,可以利用符号计算工具箱中的函数来求解符号方程。
首先需要定义未知量和方程式,然后使用solve函数求解。
具体步骤如下:
1. 定义未知量和方程式
在MATLAB中,可以使用syms函数定义未知量,例如:
syms x y z
然后可以定义方程式,例如:
eqn = x^2 + y^2 + z^2 - 1 == 0
2. 使用solve函数求解
使用solve函数可以求解方程式,例如:
sol = solve(eqn, x, y, z)
其中,第一个参数是方程式,后面的参数是未知量。
solve函数返回一个结构体,包含了未知量的解。
3. 输出结果
结果可以使用disp函数打印出来,例如:
disp(sol.x)
disp(sol.y)
disp(sol.z)
这样可以将解输出到命令窗口。
如果需要将结果用于其他计算或绘图,可以将解保存为变量,例如:
x = sol.x;
y = sol.y;
z = sol.z;
这样可以在后续的计算或绘图中使用这些解。
4 符号运算功能
符号表达式的化简和替换
[Y,SIGMA]=subexpr(S,SIGMA):指定用变量 SIGMA的值代替符号表达式S中重复出现的字 符串,替换后的结果由Y返回,被替换的字符 串由SIGMA返回; R=subs(S):用工作空间中的变量值代替表达 式S中对应的符号变量,如果没有指定的符号 变量的值,则返回值中符号变量不被替换; R=subs(S,old,new):用new代替S中的old; pretty(S):使符号表达式显示起来比较美观;
符号积分
int完成符号的积分,调用格式: (1)R=int(S,v):计算符号表达式S对自变量v的 不定积分; (2)R=int(S,v,a,b):计算符号表达式对自变量v 从a到b的定积分。 >>syms x t >>syms x t >> int(cos(x*t),x) >>int(cos(x*t),x,0,pi/2) ans = ans = 1/t*sin(x*t) sin(1/2*pi*t)/t
符号对象的基本运算
由于MATLAB采用了重载技术,使得构成符号 计算表达式的运算符和基本函数,与数值计算 中的运算符和基本函数几乎完全相同,包括基 本算术运算,关系运算,三角函数运算,复数 运算、矩阵的运算等。 符号计算以推理解析的方式进行,因此不受计 算误差累计所带来的困扰,从而可以得到任意 精度的数值解(如果希望计算结果精确,可能 需要牺牲计算时间和存储空间)。
符号对象的数学计算
符号运算的结果都是字符串,即使从形式上看是数 值,但从变量类型上,它们仍是字符串,若把任意 精度的符号解变成“真正的”数值解,需要用到以 下函数: digits(d):近似的解的精度变为d位有效数字,默 认值是32位; vpa(A,d):求符号解A的近似解,近似解的有效位 数由d指定,如果不指定d,则按照digits(d)指令设 置的有效位数输出; double(A):把符号矩阵或任意精度表示的矩阵A转 换成双精度矩阵。 注:vpa函数的输入既可以是符号对象,也可以是数值对象,而其输出一定为符号对象。
solve与fsolve区别
用命令函数fsolve( )来解非线性方程(组)。具体格式如下:
X=fsolve(fun,x0,options)
参数fun为定义好的待求解的非线性方程(组)的文件名。x0为求解方程的初始向量或矩阵。Options设置命令函数fsolve求解过程的各种参数。通常我们设为optimset(fsolve)。Options的其他参数项可通过帮助文档查询,或直接在MATLAB的命令行输入hel0)求解fun(x)=0的解,x0是初值,fun是函数,x就是解
因为fsolve使用迭代法求解方程的,所以总要有个迭代的初值吧,这个初值就是你给的x0。
比如解方程组
x(1).^2+x(2).^2=1
x(1)=2*x(2)
可以写成
f=@(x)([x(1).^2+x(2).^2-1;x(1)-2*x(2)])
x=fsolve(f,[1 1])
这里[1 1]就是初值,其实初值一般情况下可以随便给的。
用两个函数solve ( )和linsolve( )来解线性方程,具体格式如下:
X=solve('eqn1','eqn2'...'eqnN','var1','var2'...'varN')
X=linsolve(A,B)
Solve这个命令函数用来解符号方程与方程组。且这个命令还可以解超越方程,如三角方程等非线性方程。参数'eqnN'为方程组中第N个方程,特殊地,方程组可以是单一的一个方程。'varN'为方程组中第N个变量的声明,若没有变量声明,则系统会按人们的习惯确定符号方程中的待解变量。linsolve( )这个命令用来解线性方程组AX=B。参数A为线性方程组的系数矩阵,X为未知量矩阵,B为常数项矩阵。若定义命令函数linsolve的返回变量为[X,Z],则返回线性方程组的通解Z*P+X,否则返回为线性方程组的特解X。
matlab 求解符号方程
一、背景介绍Matlab是一种强大的数学软件,常用于数学建模、仿真、数据分析等领域。
在工程和科学研究中,求解符号方程是一个常见的问题,Matlab提供了丰富的符号计算工具,可以帮助用户高效地求解符号方程。
二、Matlab符号计算工具1. 符号变量定义在Matlab中,我们可以通过syms命令定义符号变量,使用符号变量进行符号运算。
例如:```matlabsyms x y```2. 求解符号方程Matlab提供了solve函数,可以用来求解符号方程。
solve函数的基本语法如下:```matlabsol = solve(equations, variables)```其中,equations表示要求解的方程组,variables表示待求解的变量。
solve函数会返回符号方程的解。
三、示例接下来,我们通过一个示例来演示如何使用Matlab求解符号方程。
假设我们要求解如下的符号方程:```matlabsyms xeqn = x^2 - 4*x + 3 == 0;sol = solve(eqn, x);disp(sol);```运行以上代码,可以得到方程x^2 - 4*x + 3 = 0的解为x = 1或x = 3。
四、注意事项在使用Matlab求解符号方程时,有一些需要注意的事项:1. 可能存在多解或无解的情况,在求解后需要对解进行检查;2. 符号计算是一种复杂的运算,可能存在数值精度问题,需要注意数值的精确性;3. 在求解复杂的方程组时,可能需要对方程组进行化简或变形,以提高求解效率。
五、总结通过Matlab的符号计算工具,我们可以较为方便地求解符号方程,实现高效的符号计算。
在工程和科学研究中,这些工具能够帮助我们快速解决复杂的数学问题,提高工作效率。
希望本文的介绍和示例能够帮助读者更好地理解和应用Matlab的符号计算工具。
Matlab在求解符号方程方面具有广泛的应用。
通过利用Matlab的符号计算工具,用户可以轻松地进行符号方程的求解和符号计算,并获得高精度的结果。
matlab解方程组的函数
matlab解方程组的函数在科学和工程计算中,解方程组是一项非常常见且重要的任务。
方程组是由多个方程组成的集合,其中每个方程都包含有待求解的未知变量。
解方程组的目标是找到一组满足所有方程的未知变量的值。
Matlab是一种功能强大的数值计算软件,它提供了许多用于解方程组的函数。
本文将介绍一些常用的Matlab解方程组函数,并使用实例演示它们的用法。
一、Matlab解方程组的函数概述Matlab提供了多种解方程组的函数,包括直接法和迭代法。
这些函数可以帮助我们高效地求解线性方程组和非线性方程组。
以下是一些常用的Matlab解方程组函数:1.linsolve函数:用于求解线性方程组。
它可以使用直接法(LU分解、Cholesky分解)或迭代法(Jacobi、Gauss-Seidel)来解线性方程组。
2.fsolve函数:用于求解非线性方程组。
它使用迭代法来逐步逼近非线性方程组的解。
3.ode45函数:用于求解常微分方程组。
它使用Runge-Kutta方法来数值求解微分方程组。
4.vpasolve函数:用于求解符号方程组。
它可以求解包含符号未知变量的方程组。
接下来,我们将详细介绍每个函数的用法,并给出相关的实例。
二、linsolve函数2.1 求解线性方程组linsolve函数用于求解线性方程组,语法如下:X = linsolve(A, B)其中,A是系数矩阵,B是常数向量。
函数将返回未知变量的解向量X。
2.2 示例考虑以下线性方程组:2x + 3y = 74x - 5y = 2我们可以使用linsolve函数求解:A = [2, 3; 4, -5];B = [7; 2];X = linsolve(A, B);结果X将包含未知变量x和y的解。
三、fsolve函数3.1 求解非线性方程组fsolve函数用于求解非线性方程组,语法如下:X = fsolve(fun, X0)其中,fun是一个函数句柄,表示非线性方程组的函数,X0是初始解向量。
matlab符号运算解方程
matlab符号运算解方程
MATLAB是一款强大的数学计算工具,可以利用其符号运算功能方便地解方程。
符号运算是指以符号运算的形式表示数学问题,而非数值运算的计算。
具体步骤如下:
1. 在MATLAB中定义符号变量,可以使用“syms”命令。
例如,定义未知数x和y,可以输入“syms x y”。
2. 使用等于号“=”表示方程,例如“x + y = 5”。
3. 使用solve命令解方程,例如“solve(x + y = 5, x)”表示解出未知数x的值。
4. 对于多元方程组,可以使用solve命令同时解出所有未知数的值。
例如“solve(x + y = 5, 2*x + y = 7)”表示解出未知数x和y的值。
符号运算可以求出解析式解,便于进一步分析。
同时,MATLAB也可以进行数值运算,将符号解析式替换成数值代入进行计算,以得到近似解。
第13讲:符号微积分及符号方程求解
13.3 符号函数积分
其语法格式分别为:
R = int(S)
R = int(S,v) R = int(S,a,b)
R = int(S,v,a,b)
其中:
S:为符号表达式,可能有多个参数 v:以 S 中的符号 v 进行求积分运算 a,b:定积分下限、上限,不指表示求不定积分
12
1 dx 例6:求积分 2 1 x
5
例2:计算函数的各种极限。
syms x
a t h;
limit(sin(x)/x)
limit(1/x,x,0,‘right’)
% sin(x)/x 趋于0 (默认)
% 1/x趋于0的右极限
limit((sin(x+h)-sin(x))/h,h,0) v
= [(1 + a/x)^x, exp(-x)]; % x趋于无穷时的左极限
4
例1:求极限
x(e sin x 1) 2(e tgx 1) lim x 0 sin 3 x
syms x;
%定义符号变量
%确定符号表达式
f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/sin(x)^3; %求函数的极限 w=limit(f) w = -1/2
syms x
int(1/(1+x^2))
ans = atan(x)
例7:计算二重不定积分
syms x y
xe
xy
dxdy
F = int(int('x*exp(-x*y)','x'),'y') F=
.符号微分方程求解(PDF)
3.8 符号微分方程求解符号微分方程求解可以通过函数“dsolve”来实现,dsolve函数的调用格式如下:dsolve(‘equ1’,’equ2’,…)输入参数“equl”、“equ2”代表微分方程与初始条件,几个微分方程与初始条件可以一起输入,只要以逗号分隔开即可。
默认的独立变量是’t’,用户也可以使用别的变量来代替’t’,只要把别的变最放在输入变量的最后即可。
字母‘D’代表微分算子,即d/dt后面所跟的数字代表几阶微分,如D2代表d^2/dr^2。
跟在微分算子后面的字母是被微的变量,如D3y代表对y(t)的三阶微分。
初始条件可以这样的形式给出:’y(a)=b’或’Dy(a)=b’。
此处的y是被微变量,a和b是常量。
如果初始条件的个数少于被微变量的个数,则结果解中会出现C1,C2这样的不定常数。
函数的输出结果可能存在三种情况:(1)一个方程和一个输出,则返回符号向量中非线性方程的联立解;(3)几个方程和一个输出,则返回解的结构。
(2)几个方程与相同个数的输出,返回的结果是按字母顺序排序,并且分配给输出参数;如果解不是显式形式,则被认为是隐式形式。
当一个隐式形式的解返回时,会给出警告。
如果解既不是显式形式,也不是隐式形式,也会给出警告,同时返回的是一个空字符串。
在一些非线性方程中,输出结果可能是降阶的微分方程或是积分方程。
>>S.fans=exp(t)*(cos(t)+2*sin(t))>>S.gans=exp(t)*(-sin(t)+2*cos(t))【例3.7.10】>> dsolve('Dy=y^2*(1-y)')Warning: Explicit solution could not be found; implicit solution returned.> In D:\MATLAB6P1\toolbox\symbolic\dsolve.m at line 292ans=t+1/y-log(y)+log(-1+y)+C1=0上例返回的是隐式的解。
符号方程求解
MATLAB7.0中的符号计算可以求解线性方程(组)、代数方程的符号解、非线性符号方程(组)、常微分方程(组),求解这些方程(组)是通过调用solve函数实现的,如求解代数方程的符号解调用solve函数的格式是solve('eq')、solve('eq','v')、[x1,x2,…xn]=solve('eq1','eq2',…'eqn')等,求解非线性符号方程是调用优化工具箱的fsolve函数,调用格式有 fsolve(f,x0)、fsolve(f,x0,options)、[x,fv]=fsolve(f,x0,options,p1,p2…)等,而解常微分方程(组)则是调用dsolve函数,调用的格式有[x1,x2,…]=dsolve('eq1,eq2,…','cond1,cond2…','v')。
现将各函数的调用格式列于下表(表5—1),在各个实例中说明各种格式的用法。
表5—1 符号方程求解的solve函数调用格式一、代数方程的符号解MATLAB7.0中求代数方程的符号解是通过调用solve函数实现的。
用solve函数求解一个代数方程时的调用格式一般是:solve('代数方程','未知变量')或x=solve('代数方程','未知变量')当未知变量为系统默认变量时,未知变量的输入可以省略。
当求解由n个代数方程组成的方程组时调用的格式是:[未知变量组]=solve('代数方程组','未知变量组')未知变量组中的各变量之间,代数方程组的各方程之间用逗号分隔,如果各未知变量是由系统默认的,则未知变量组的输入可以省略。
实例1、求解高次符号方程和方程对y的解。
>> syms x y z a b %定义符号变量>> solve(x^4-3*a*x^2+4*b) %求解高次方程ans =1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)-1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)-1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)>> solve(x^3+2*a*x*y-3*b*y^2,y) %对指定变量求解方程ans =1/6/b*(2*a+2*(a^2+3*b*x)^(1/2))*x1/6/b*(2*a-2*(a^2+3*b*x)^(1/2))*x实例2、求解多元高次方程组>> [x,y]=solve('x^3+2*x*y-3*y^2-2','x^3-3*x*y+y^2+5') %求解多元高次方程组x =1.8061893129091900210106914427639+1.1685995398225344682988775209345*i.51233671712308192620449202726936+1.0694475803263816285960240820218*i -1.2247760300322719472151834700333+.35066213508454219362158900429401*i -1.2247760300322719472151834700333-.35066213508454219362158900429401*i .51233671712308192620449202726936-1.0694475803263816285960240820218*i 1.8061893129091900210106914427639-1.1685995398225344682988775209345*i y =1.8086294126483514370835126464657+1.9432962587476317909683476452237*i .17307087932198664953847299268063-.78620181218420502898925154555661*i -.61451279197033808662198563914677-.89207785198625780793629825881329*i -.61451279197033808662198563914677+.89207785198625780793629825881329*i .17307087932198664953847299268063+.78620181218420502898925154555661*i 1.8086294126483514370835126464657-1.9432962587476317909683476452237*i 实例3、求解方程组的解。
fsolve使用
fsolve使用解非线性方程组的方法有很多,比如直接降维、搜索(用最小二乘、牛顿迭代及最优化法)、连续法等等.直接降维操作较难,求解时间长;牛顿迭代有局部收敛性;最优化必须给出真实解的初始值;连续发需要构造同伦方程。
看看fsolve的源代码:>> type fsolvefunction [x,FVAL,EXITFLAG,OUTPUT,JACOB] = fsolve(FUN,x,options,varargin)%FSOLVE solves systems of nonlinear equations of several variables.%% FSOLVE attempts to solve equations of the form:%% F(X)=0 where F and X may be vectors or matrices.%% X=FSOLVE(FUN,X0) starts at the matrix X0 and tries to solve the% equations in FUN. FUN accepts input X and returns a vector (matrix) of% equation values F evaluated at X.%% X=FSOLVE(FUN,X0,OPTIONS) solves the equations with the default optimization% parameters replaced by values in the structure OPTIONS,an argument% created with the OPTIMSET function. See OPTIMSET for details. Used% options are Display, TolX, TolFun, DerivativeCheck, Diagnostics,% FunValCheck, Jacobian, JacobMult, JacobPattern, LineSearchType,% NonlEqnAlgorithm, MaxFunEvals, MaxIter, PlotFcns, OutputFcn,% DiffMinChange and DiffMaxChange, LargeScale, MaxPCGIter,% PrecondBandWidth, TolPCG, and TypicalX. Use the Jacobian option to% specify that FUN also returns a second output argument J that is the% Jacobian matrix at the point X. If FUN returns a vector F of m% components when X has length n, then J is an m-by-n matrix where J(i,j)% is the partial derivative of F(i) with respect to x(j). (Note that the% Jacobian J is the transpose of the gradient of F.)%% X = FSOLVE(PROBLEM) solves system defined in PROBLEM. PROBLEM is a% structure with the function FUN in PROBLEM.objective, the start point% in PROBLEM.x0, the options structure in PROBLEM.options, and solver% name 'fsolve' in PROBLEM.solver. Use this syntax to solveat the% command line a problem exported from OPTIMTOOL. The structure PROBLEM% must have all the fields.%% [X,FVAL]=FSOLVE(FUN,X0,...) returns the value of the equations FUN at X.%% [X,FVAL,EXITFLAG]=FSOLVE(FUN,X0,...) returns an EXITFLAG that describes the% exit condition of FSOLVE. Possible values of EXITFLAG and the corresponding% exit conditions are%% 1 FSOLVE converged to a solution X.% 2 Change in X smaller than the specified tolerance.% 3 Change in the residual smaller than the specified tolerance.% 4 Magnitude of search direction smaller than the specified tolerance.% 0 Maximum number of function evaluations or iterations reached.% -1 Algorithm terminated by the output function.% -2 Algorithm seems to be converging to a point that is not a root.% -3 Trust region radius became too small.% -4 Line search cannot sufficiently decrease the residual along the current% search direction.%% [X,FVAL,EXITFLAG,OUTPUT]=FSOLVE(FUN,X0,...) returns a structure OUTPUT% with the number of iterations taken in OUTPUT.iterations, the number of% function evaluations in OUTPUT.funcCount, the algorithm used in OUTPUT.algorithm,% the number of CG iterations (if used) in OUTPUT.cgiterations, the first-order% optimality (if used) in OUTPUT.firstorderopt, and the exit message in% OUTPUT.message.%% [X,FVAL,EXITFLAG,OUTPUT,JACOB]=FSOLVE(FUN,X0,...) returns the% Jacobian of FUN at X.%% Examples% FUN can be specified using @:% x = fsolve(@myfun,[2 3 4],optimset('Display','iter'))%% where myfun is a MATLAB function such as:%% function F = myfun(x)% F = sin(x);%% FUN can also be an anonymous function:%% x = fsolve(@(x) sin(3*x),[1 4],optimset('Display','off')) %% If FUN is parameterized, you can use anonymousfunctions to capture the% problem-dependent parameters. Suppose you want to solve the system of% nonlinear equations given in the function myfun, which is parameterized% by its second argument c. Here myfun is an M-file function such as%% function F = myfun(x,c)% F = [ 2*x(1) - x(2) - exp(c*x(1))% -x(1) + 2*x(2) - exp(c*x(2))];%% To solve the system of equations for a specific value of c, first assign the% value to c. Then create a one-argument anonymous function that captures% that value of c and calls myfun with two arguments. Finally, pass this anonymous% function to FSOLVE:%% c = -1; % define parameter first% x = fsolve(@(x) myfun(x,c),[-5;-5])%% See also OPTIMSET, LSQNONLIN, @, INLINE.% Copyright 1990-2006 The MathWorks, Inc.% $Revision: 1.41.4.12 $ $Date: 2006/05/19 20:18:49 $% ------------Initialization----------------defaultopt = struct('Display','final','LargeScale','off',...'NonlEqnAlgorithm','dogleg',...'TolX',1e-6,'TolFun',1e-6,'DerivativeCheck','off',...'Diagnostics','off','FunValCheck','off',...'Jacobian','off','JacobMult',[],...% JacobMult set to [] by default'JacobPattern','sparse(ones(Jrows,Jcols))',...'MaxFunEvals','100*numberOfVariables',...'DiffMaxChange',1e-1,'DiffMinChange',1e-8,...'PrecondBandWidth',0,'TypicalX','ones(numberOfVariables,1 )',...'MaxPCGIter','max(1,floor(numberOfVariables/2))', ...'TolPCG',0.1,'MaxIter',400,...'LineSearchType','quadcubic','OutputFcn',[],'PlotFcns',[]);% If just 'defaults' passed in, return the default options in X if nargin==1 && nargout <= 1 && isequal(FUN,'defaults') x = defaultopt;returnendif nargin < 3, options=[]; end% Detect problem structure inputif nargin == 1if isa(FUN,'struct')[FUN,x,options] = separateOptimStruct(FUN);else % Single input and non-structure.error('optim:fsolve:InputArg','The input to FSOLVE should be either a structure with valid fields or consist of at least twoarguments.');endendif nargin == 0error('optim:fsolve:NotEnoughInputs','FSOLVE requires at least two input arguments.')end% Check for non-double inputsif ~isa(x,'double')error('optim:fsolve:NonDoubleInput', ...'FSOLVE only accepts inputs of data type double.')endLB = []; UB = [];xstart=x(:);numberOfVariables=length(xstart);large = 'large-scale';medium = 'medium-scale: line search';dogleg = 'trust-region dogleg';switch optimget(options,'Display',defaultopt,'fast')case {'off','none'}verbosity = 0;case 'iter'verbosity = 2;case 'final'verbosity = 1;case 'testing'verbosity = Inf;otherwiseverbosity = 1;enddiagnostics = isequal(optimget(options,'Diagnostics',defaultopt,'fast'),'on');gradflag= strcmp(optimget(options,'Jacobian',defaultopt,'fast'),'on');% 0 means large-scale trust-region, 1 means medium-scale algorithmmediumflag = strcmp(optimget(options,'LargeScale',defaultopt,'fast'),'off');funValCheck = strcmp(optimget(options,'FunValCheck',defaultopt,'fast'),'on');switchoptimget(options,'NonlEqnAlgorithm',defaultopt,'fast') case 'dogleg'algorithmflag = 1;case 'lm'algorithmflag = 2;case 'gn'algorithmflag = 3;otherwisealgorithmflag = 1;endmtxmpy = optimget(options,'JacobMult',defaultopt,'fast');if isequal(mtxmpy,'atamult')warning('optim:fsolve:NameClash', ...['Potential function name clash with a Toolbox helperfunction:\n' ...'Use a name besides ''atamult'' for your JacobMult function to\n' ...'avoid errors or unexpected results.'])end% Convert to inline function as neededif ~isempty(FUN) % will detect empty string, empty matrix, empty cell arrayfunfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);elseerror('optim:fsolve:InvalidFUN', ...['FUN must be a function name, valid string expression, or inline object;\n' ...' or, FUN may be a cell array that contains these type of objects.'])endJAC = [];x(:) = xstart;switch funfcn{1}case 'fun'fuser = feval(funfcn{3},x,varargin{:});f = fuser(:);nfun=length(f);case 'fungrad'[fuser,JAC] = feval(funfcn{3},x,varargin{:});f = fuser(:);nfun=length(f);case 'fun_then_grad'fuser = feval(funfcn{3},x,varargin{:});f = fuser(:);JAC = feval(funfcn{4},x,varargin{:});nfun=length(f);otherwiseerror('optim:fsolve:UndefinedCalltype','Undefined calltype in FSOLVE.')endif gradflag% check size of JAC[Jrows, Jcols]=size(JAC);if isempty(mtxmpy)% Not using 'JacobMult' so Jacobian must be correct sizeif Jrows~=nfun || Jcols~=numberOfVariableserror('optim:fsolve:InvalidJacobian', ...['User-defined Jacobian is not the correct size:\n' ...' the Jacobian matrix should be %d-by-%d.'],nfun,numberOfVariables)endendelseJrows = nfun;Jcols = numberOfVariables;endXDATA = []; YDATA = []; caller = 'fsolve';% Choose what algorithm to run: determine (i)OUTPUT.algorithm and% (ii) if and only if OUTPUT.algorithm = medium, also option.LevenbergMarquardt.% Option LevenbergMarquardt is used internally; it's not user settable. For% this reason we change this option directly, for speed; users should use% optimset.if ~mediumflagif nfun >= numberOfVariables% large-scale method and enough equations (as many as variables)OUTPUT.algorithm = large;else% large-scale method and not enough equations - switch to medium-scale algorithmwarning('optim:fsolve:FewerFunsThanVars', ...['Large-scale method requires at least as many equations as variables;\n' ...' using line-search method instead.'])OUTPUT.algorithm = medium;options.LevenbergMarquardt = 'off';endelseif algorithmflag == 1 && nfun == numberOfVariablesOUTPUT.algorithm = dogleg;elseif algorithmflag == 1 && nfun ~= numberOfVariables warning('optim:fsolve:NonSquareSystem', ...['Default trust-region dogleg method of FSOLVE cannot\n handle non-square systems; ', ...'using Gauss-Newton method instead.']);OUTPUT.algorithm = medium;options.LevenbergMarquardt = 'off';elseif algorithmflag == 2OUTPUT.algorithm = medium;options.LevenbergMarquardt = 'on';else % algorithmflag == 3OUTPUT.algorithm = medium;options.LevenbergMarquardt = 'off';endendif diagnostics > 0% Do diagnostics on information so farconstflag = 0; gradconstflag = 0; non_eq=0;non_ineq=0;lin_eq=0;lin_ineq=0;confcn{1}=[];c=[];ceq=[];cGRAD=[];ceqGRAD=[];hessflag = 0; HESS=[];diagnose('fsolve',OUTPUT,gradflag,hessflag,constflag,gradc onstflag,...mediumflag,options,defaultopt,xstart,non_eq,...non_ineq,lin_eq,lin_ineq,LB,UB,funfcn,confcn,f,JAC,HESS,c,ce q,cGRAD,ceqGRAD);end% Execute algorithmif isequal(OUTPUT.algorithm, large)if ~gradflagJstr = optimget(options,'JacobPattern',defaultopt,'fast');if ischar(Jstr)if isequal(lower(Jstr),'sparse(ones(jrows,jcols))')Jstr = sparse(ones(Jrows,Jcols));elseerror('optim:fsolve:InvalidJacobPattern', ...'Option ''JacobPattern'' must be a matrix if not the default.') endendelseJstr = [];endcomputeLambda = 0;[x,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msg]=...snls(funfcn,x,LB,UB,verbosity,options,defaultopt,f,JAC,XDATA ,YDATA,caller,...Jstr,computeLambda,varargin{:});elseif isequal(OUTPUT.algorithm, dogleg)% trust region dogleg methodJstr = [];[x,FVAL,JACOB,EXITFLAG,OUTPUT,msg]=...trustnleqn(funfcn,x,verbosity,gradflag,options,defaultopt,f,J AC,...Jstr,varargin{:});else% line search (Gauss-Newton or Levenberg-Marquardt)[x,FVAL,JACOB,EXITFLAG,OUTPUT,msg] = ...nlsq(funfcn,x,verbosity,options,defaultopt,f,JAC,XDATA,YDAT A,caller,varargin{:});endResnorm = FVAL'*FVAL; % assumes FVAL still a vectorif EXITFLAG > 0 % if we think we converged:if Resnorm > sqrt(optimget(options,'TolFun',defaultopt,'fast')) OUTPUT.message = ...sprintf(['Optimizer appears to be converging to a minimum that is not a root:\n' ...'Sum of squares of the function values is > sqrt(options.TolFun).\n' ...'Try again with a new starting point.']);if verbosity > 0disp(OUTPUT.message)endEXITFLAG = -2;elseOUTPUT.message = msg;if verbosity > 0disp(OUTPUT.message);endendelseOUTPUT.message = msg;if verbosity > 0disp(OUTPUT.message);endend% Reset FVAL to shape of the user-function output, fuserFVAL = reshape(FVAL,size(fuser));solve 是求解符号函数的,fsolve在求解非线性方程组需要付给其初值,初值不同,结果不同。
matlab在函数的求解方法 (1)
百度文库- 让每个人平等地提升自我!MatLab & 数学建模第四讲数值计算符号表达式的运算nu meric 符号到数值的转换pre tty 显示悦目的符号输出subs替代子表达式sy m 建立符号矩阵或表达式symadd符号加法symdiv符号除法symmul符号乘法symop符号运算sy mpow 符号表达式的幂运算symrat有理近似symsub符号减法symvar求符号变量符号表达式的简化col lect合并同类项ex pand 展开factor因式simple求解最简形式simplify简化symsum和级数符号多项式charpoly特征多项式horner嵌套多项式表示numden分子或分母的提取poly2sym多项式向量到符号的转换sym2poly符号到多项式向量的转换符号微积分diff微分int积分jordan约当标准形taylor泰勒级数展开符号可变精度算术digits 设置可变精度vpa 可变精度计算求解符号方程compose 函数的复合dsolve 微分方程的求解finverse 函数逆linsolve 齐次线性方程组的求解solve 代数方程的求解符号线性代数charploy 特征多项式determ 矩阵行列式的值eigensys 特征值和特征向量inverse 矩阵逆jordan 约当标准形linsolve 齐次线性方程组的解transpose 矩阵的转置一、方程求解求解单个代数方程MATLAB具有求解符号表达式的工具,如果表达式不是一个方程式(不含等号),则在求解之前函数solve将表达式置成等于0。
>> solve( ' a*x^2+b*x+c ' ) % solve for the roots of the eqution ans=[1/2/a*(-b+(b^2-4*a*c)^1/2)][1/2/a*(-b-(b^2-4*a*c)^1/2)]结果是符号向量,其元素是方程的2个解。
MATLAB教程方程组
例2:可直接将方程代入
例3:若符号表达式不含等号,则 >> s=solve('cos(2*x)+sin(x)=1') 函数solve会自动将表达式转成等 号右端为0的符号表达式 s= >> solve('p*tan(x)-r') [ 0] [ pi] ans = [ 1/6*pi] atan(r/p) [ 5/6*pi]
n=m且A非奇异
n>m n<m
恰定方程
超定方程 欠定方程
可尝试计算精确解
可尝试计算最小二乘解 可尝试计算含有最少m的 基解
1、调用格式:
① linsolve(A,b) %求解析解 ② x =A \ b %求数值解 注意:A,b可以是符号矩阵或数值矩阵
2、举例: ①恰定方程
3x 5 y 7 z 34 2 x 12 y 3z 56 x 9 y 8 z 27
3 5.9 8.4 12.2 16.6 18.8
三、 求非线性方程组的数值解 指令格式: x=fsolve(fun,x0) x=fsolve(fun,x0,options) [x,fval]=fsolve(fun,x0,…) x,fval 零点的位置与对应的函数值,可以是矢量 fun 与非线性方程对应的函数,通常用M文件建立 x0 猜测的初始值,作为求解过程的出发点 option 控制算法的优化选项
x 2 y 2 1 0 >> syms x y alpha >> [x,y]=solve(x^2*y^2-1,x-(y/2)-alpha) y x 0 2
二、 求线性方程组的解析解与数值解 对形式为 Ax=b 的线性方程 a x a x a x b 11 1 12 2 13 3 1 组(这里 A 是n×m的矩阵,b a x a x a x b 21 1 22 2 23 3 2 是已知矢量,x 是未知矢量) , a x a x a x b 33 3 3 31 1 32 2 可分为三种:
使用Matlab符号数学工具箱求解微分方程
使用Matlab符号数学工具箱求解微分方程Matlab符号数学工具箱(Symbolic Math Toolbox)中函数dsolve用于计算常系数微分方程(ordinary differential equations)的符号解(Symbolic solution),此处的符号解即解析解。
注意:不是所有的微分方程都能用dsolve函数求出解析解。
1调用形式dsolve函数调用形式有如下两种:r = dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v')2函数描述dsolve('eq1,eq2,...', 'cond1,cond2,...', 'v')用于计算常系数微分方程(或常系数微分方程组)的符号解,其中参数'eq1,eq2,...'指定微分方程(组),参数'v'指定微分方程(组)中的自变量,参数'cond1,cond2,...'指定微分方程(组)的边界条件及(或)初始条件。
不指定参数'v'时,默认的自变量为t。
输入的方程中使用大写字母D代表微分算符,如单个字母D表示ddt。
大写字母D后跟数字表示多次微分运算。
比如,D2表示22ddt。
紧跟在微分算符后的字符表示因变量。
例如,D3y表示对因变量y的三次微分,其中y是x或t的函数。
初始条件或边界条件由形如y(a) = b或Dy(a) = b的方程给出,其中,y是因变量,b是常量。
如果给出的初始条件的个数小于因变量的个数,则dsolve函数计算的符号解中包含任意常量C1, C2,....。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
符号方程的求解solve linsolve fsolve dsolveMATLAB7.0中的符号计算可以求解线性方程(组)、代数方程的符号解、非线性符号方程(组)、常微分方程(组),求解这些方程(组)是通过调用solve函数实现的,如求解代数方程的符号解调用solve函数的格式是solve('eq')、solve('eq','v')、[x1,x2,…xn]=solve('eq1','eq2',…'eqn')等,求解非线性符号方程是调用优化工具箱的fsolve函数,调用格式有fsolve(f,x0)、fsolve(f,x0,options)、[x,fv]=fsolve(f,x0,options,p1,p2…)等,而解常微分方程(组)则是调用dsolve函数,调用的格式有[x1,x2,…]=dsolve('eq1,eq2,…','cond1,cond2…','v')。
现将各函数的调用格式列于下表(表5—1),在各个实例中说明各种格式的用法。
一、代数方程的符号解MATLAB7.0中求代数方程的符号解是通过调用solve函数实现的。
用solve函数求解一个代数方程时的调用格式一般是:solve('代数方程','未知变量')或x=solve('代数方程','未知变量')当未知变量为系统默认变量时,未知变量的输入可以省略。
当求解由n个代数方程组成的方程组时调用的格式是:[未知变量组]=solve('代数方程组','未知变量组')未知变量组中的各变量之间,代数方程组的各方程之间用逗号分隔,如果各未知变量是由系统默认的,则未知变量组的输入可以省略。
实例1、求解高次符号方程和方程对y的解。
>> syms x y z a b %定义符号变量>> solve(x^4-3*a*x^2+4*b) %求解高次方程ans =1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)-1/2*(6*a+2*(9*a^2-16*b)^(1/2))^(1/2)1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)-1/2*(6*a-2*(9*a^2-16*b)^(1/2))^(1/2)>> solve(x^3+2*a*x*y-3*b*y^2,y) %对指定变量求解方程ans =1/6/b*(2*a+2*(a^2+3*b*x)^(1/2))*x1/6/b*(2*a-2*(a^2+3*b*x)^(1/2))*x实例2、求解多元高次方程组>> [x,y]=solve('x^3+2*x*y-3*y^2-2','x^3-3*x*y+y^2+5') %求解多元高次方程组x =1.8061893129091900210106914427639+1.1685995398225344682988775209345*i.51233671712308192620449202726936+1.0694475803263816285960240820218*i-1.2247760300322719472151834700333+.35066213508454219362158900429401*i-1.2247760300322719472151834700333-.35066213508454219362158900429401*i.51233671712308192620449202726936-1.0694475803263816285960240820218*i1.8061893129091900210106914427639-1.1685995398225344682988775209345*iy =1.8086294126483514370835126464657+1.9432962587476317909683476452237*i.17307087932198664953847299268063-.78620181218420502898925154555661*i-.61451279197033808662198563914677-.89207785198625780793629825881329*i-.61451279197033808662198563914677+.89207785198625780793629825881329*i.17307087932198664953847299268063+.78620181218420502898925154555661*i1.8086294126483514370835126464657-1.9432962587476317909683476452237*i实例3、求解方程组的解。
>> [x,y,z]=solve('x-2*y-4','x^2-2*x*y+y-z','x^2-y*z+z')x =29/5-1/5*721^(1/2)29/5+1/5*721^(1/2)y =9/10-1/10*721^(1/2)9/10+1/10*721^(1/2)z =241/10-9/10*721^(1/2)241/10+9/10*721^(1/2)实例4、求解超越方程的解。
>> solve('x*2^x-1') %求解超越方程ans =1/log(2)*lambertw(log(2))注:lambertw是一个函数,lambertw(x)表示方程w*exp(w) = x的解w。
其数值可以在命令窗口输入该函数得到。
>> lambertw(log(2))ans =0. 4444Examples:solve('p*sin(x) = r') chooses 'x' as the unknown and returnsans =asin(r/p)[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0') returnsx =[ 1][ 3]y =[ 1][ -3/2]S = solve('x^2*y^2 - 2*x - 1 = 0','x^2 - y^2 - 1 = 0') returnsthe solutions in a structure.S =x: [8x1 sym]y: [8x1 sym](结构型变量)[u,v] = solve('a*u^2 + v^2 = 0','u - v = 1') regards 'a' as aparameter and solves the two equations for u and v.S = solve('a*u^2 + v^2','u - v = 1','a,u') regards 'v' as aparameter, solves the two equations, and returns S.a and S.u.[a,u,v] = solve('a*u^2 + v^2','u - v = 1','a^2 - 5*a + 6') solvesthe three equations for a, u and v.二、符号线性方程(组)的求解符号线性方程(组)的求解与数值线性方程(组)的求解方法相同,采用矩阵左除或函数linsolve,格式为:X=A\B 或X=sym(A)\sym(B) 或X=linsolve(A,B)。
其中A为线性方程组的系数矩阵,B为方程右侧的常数列矩阵。
实例5、求符号线性方程组的符号解。
>> A=sym('[1 2 3;-1 9 2;2 0 3]'); %定义符号矩阵A>> B=[a;b;1]; %定义符号矩阵B>> x=A\B %求解方程x =6/13*b+23/13-27/13*a3/13*b+5/13-7/13*a-4/13*b-11/13+18/13*a三、非线性符号方程的求解非线性符号方程(组)F(X)=0中X是一个向量,求解显示的结果也是一个向量。
它不仅可以用调用solve函数求解,也可以调用函数fsolve求解,而函数fsolve不是MATLAB符号工具箱的函数,它位于优化工具箱内。
实例6、求解非线性符号方程组,用solve函数和fsolve函数起始点为x0=[0;0]各自求解。
(1)solve函数求解>> syms x1 x2 %定义符号变量>> [x1,x2]=solve('x1-3*x2=sin(x1)','2*x1+x2=cos(x2)','x1','x2') %求解方程组x1 =.49662797440907460178544085171994x2 =.67214622395756734146654770697884e-2(2)fsolve函数求解先在文件编辑窗口编写如下M文件,并存于系统的work目录下。
function F=myfun(x)F=[x(1)-3*x(2)-sin(x(1));2*x(1)+x(2)-cos(x(2))];然后在命令窗口求解:>> x0=[0;0]; %设定求解初值>> options=optimset('Display','iter'); %设定优化条件>> [x,fv]=fsolve(@myfun,x0,options) %优化求解%MATLAB显示的优化过程Norm of First-order Trust-regionIteration Func-count f(x) step optimality radius0 3 1 2 11 6 0.000423308 0.5 0.0617 12 9 5.17424e-010 0.00751433 4.55e-005 1.253 12 9.99174e-022 1.15212e-005 9.46e-011 1.25Optimization terminated: first-order optimality is less than options.TolFun.x =0.49660.0067fv =1.0e-010 *0.31610.0018四、常微分方程的符号解含有自变量、未知函数和未知函数导数(或微分)的等式叫微分方程。