matlab 代数方程求解

合集下载

Matlab多项式运算与代数方程求解

Matlab多项式运算与代数方程求解
21
上机要求
上机要求
将所有文件作为附件,通过 foxmail 以邮件形式发给
mhjs@system.mail 邮件主题为:机号-学号-姓名,其中机号为 两位数 三个字段之间用英文状态下的减号连接 每个 M 文件的第一行添加一条注解语句:
% 机号-学号-姓名
22

注意:f 不是方程!也不能使用符号表达式!
15
fzero 举例
例:求 f(x)=x3-3x+1 在区间 [-2, 0] 内的实根。
f=@(x) x^3-3*x+1; x0=fzero(f,[-2,0])
例:求 f(x)=sin(x) 在 10 附近的实根。
fzero(@sin,10)
用 fzero 求零点时可以先通过作图确定零点的大致范围
17
代数方程符号求解
solve 也可以用来解方程组 solve(f1,f2, ...,fN, v1,v2, ...,vN)
求由 f1 , f2 , ... , fN 确定的方程组关于 v1 , v2 , ... , vN 的解
x 2 y z 27 xz3 x 2 3 y 2 28
11
多项式运算中, 使用的是多项式
系数向量,
不涉及符号计算!
内容提要
多项式运算
多项式转化为符号表达式:poly2sym, sym2poly
四则运算:conv、deconv
导数与积分:ployder、polyint 求值与零点:polyval、polyvalm、roots、poly
代数方程求解
线性方程组数值求解:linsolve 非线性方程数值求解:fzero 非线性方程符号求解:solve

专题4 使用MATLAB求解线性方程组的不同方法

专题4 使用MATLAB求解线性方程组的不同方法

Z = null(A) 求出 Ax=0 的基础解系后,将基础解系的向量正交单位化,存储在 Z 中. MATLAB 源代码如下: A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3]
A= 12 2 1 2 1 -2 -2 1 -1 -4 -3
Rank(A) Ans= 2 A=sym(A) A= [1,2,2,1] [2,1,-2,-2] [1,-1,-4,-3] null(A) ans= [2, 5/3] [-2,-4/3] [1, 0] [0, 1]
运行结果为: rank_A =
2 rank_B =
2 S_H =
-2
1
1
0
0
2
0
1
S_P =
0
1.7500
0
-0.5000
则该线性方程组有无穷多解为:
2 1 0
x

k1
1 0


k2

0 2



7 0
/
4


,
k1
,Leabharlann k2R 0 1 1/ 2
nulla?r?求系数矩阵为a的齐次线性方程组ax0的基础解系结果为有理数bnulla求出ax0的基础解系后将基础解系的向量正交单位化存储在zmatlab源代码如下
专题 4 使用 MATLAB 求解线性方程组的方法
x1 2 x2 2x3 x4 0
【例
1】求齐次方程组

2 x1
end end
x1 2x2 2x3 3x4 2 【例 1.3】使用 Matlab 求解方程组 2x1 4x2 3x3 4x4 5

matlab求解微分代数方程

matlab求解微分代数方程

文章主题:探索数学求解软件Matlab在微分代数方程求解中的应用1. 引言微分代数方程(DAE)是描述物理系统中的相互依赖性和复杂性的数学模型。

解决这类方程对于现代科学和工程领域至关重要。

Matlab作为一种强大的数学计算软件,在微分代数方程求解中具有独特的优势。

本文将从简单到复杂的方式,探讨Matlab在DAE求解中的应用,并共享个人见解。

2. DAE的基本概念微分代数方程是描述包含未知函数及其导数或导数与未知函数的组合的方程。

通常的形式为F(x, x', t) = 0,其中x为未知函数,x'为其导数,t为自变量。

在实际应用中,这些方程往往伴随着初始条件和边界条件。

3. Matlab在解常微分方程(ODE)中的应用Matlab拥有丰富的ODE求解函数,如ode45、ode23等,可用于求解各种常微分方程。

这些函数可以自动选择适当的数值积分方法,并提供了方便的接口和参数设置,极大地简化了求解过程。

4. DAE求解方法的挑战与ODE相比,DAE的求解更具挑战性。

由于包含了代数变量和微分变量,常规的数值积分方法难以直接应用。

而且,方程的初始条件和边界条件也增加了求解的复杂性。

5. Matlab在DAE求解中的工具Matlab提供了一系列专门用于DAE求解的函数和工具包,如dare和ddesd等。

这些工具在模型建立、数值解法选择、收敛性分析等方面都具有独特的优势。

6. 案例分析:用Matlab求解电路模型的DAE以电路模型的DAE为例,通过Matlab可以快速建立系统的数学模型,并进行数值求解。

通过对参数的调节和模型的分析,可以更好地理解电路的动态特性,帮助优化设计和故障诊断。

7. 总结与展望通过本文的探讨,我们更深入地了解了Matlab在微分代数方程求解中的重要性和应用。

在未来,随着科学技术的发展,Matlab在此领域的功能和性能将得到进一步的提升,为工程科学领域提供更强大的支持。

个人观点:Matlab作为一种综合性的科学计算软件,对微分代数方程的求解起着至关重要的作用。

MATLAB解代数方程

MATLAB解代数方程

例 用Jacobi迭代法求解下列线性方程组。设迭代初值为0, 迭代精度为10-6。 在命令中调用函数文件Jacobi.m,命令如下: A=[10,-1,0;-1,10,-2;0,-2,10]; b=[9,7,6]'; x= [x,n]=jacobi(A,b,[0,0,0]',1.0e-6) 0.9958
x= -66.5556 25.6667 -18.7778 26.5556
(2) QR分解 对矩阵X进行QR分解,就是把X分解为一个正交矩阵Q和一 个上三角矩阵R的乘积形式。QR分解只能对方阵进行。 MATLAB的函数qr可用于对矩阵进行QR分解,其调用格 式为: [Q,R]=qr(X):产生一个正交矩阵Q和一个上三角矩阵R,使 之满足X=QR。 [Q,R,E]=qr(X):产生一个一个正交矩阵Q、一个上三角矩阵 R以及一个置换矩阵E,使之满足XE=QR。 实现QR分解后,线性方程组Ax=b的解x=R\(Q\b)或 x=E(R\(Q\b))。
-1.7556 n= n1 =
4
1011
非线性方程数值求解
单变量非线性方程求解 在MATLAB中提供了一个fzero函数,可以用来求单变量 非线性方程的根。该函数的调用格式为: z=fzero('fname',x0,tol,trace) 其中fname是待求根的函数文件名,x0为搜索的起点。一个 函数可能有多个根,但fzero函数只给出离x0最近的那个 根。tol控制结果的相对精度,缺省时取tol=eps,trace• 指 定迭代信息是否在运算中显示,为1时显示,为0时不显示, 缺省时取trace=0。
例 用LU分解求解线性方程组。 命令如下: A=[2,1,-5,1;1,-5,0,7;0,2,1,-1;1,6,-1,-4]; b=[13,-9,6,0]'; [L,U]=lu(A); x=U\(L\b) 采用LU分解的第2种格式,命令如下: [L,U ,P]=lu(A); x=U\(L\P*b)

用MATLAB做线性代数实验

用MATLAB做线性代数实验

【2】参数方程解的判别 【注意】 :含有参数情况的线性方程组的解的情况讨论,不能直接使用 Matlab 中 的函数:rank,rref,因为 Matlab 会默认这些参数及其表达式不等于零。因此,应 该编写独立的过程加以讨论。 试就参数 s 的各种情况,讨论下述线性方程组的解的情况:
sx y z 1 x sy z s 。 2 x y sz s
p1 ( x ) q( x ) p2 ( x ) r ( x ) , d (r ( x )) d ( p2 ( x ))
例如,求多项式 f ( x ) x 3 6 x 2 11 x 6 , g( x ) x 5 2 x 2 1 的最大公因式和最小公倍 式。 p=[1 -6 11 -6]; q=[1 0 0 -2 0 1]; [q1,r1]=deconv(q,p) [q2,r2]=deconv(p,r1(4:6)) %注意保证第一个分量不能为零 [q3,r3]=deconv(r1(4:6),r2(3:4))
x2 x3 2 x2 3 x 2
分解为最简分式之和的程序如下:
-0.5000 - 1.3229i -1.0000 r = [] 结果表示出来即是:
f ( x)
如果是在实数范围内分解:
0.25 0.4725 i x 0.51.3229 i

0.25 0.4725 i x 0.51.3229 i
用 MATLAB 做线性代数实验
1. 多项式运算
【1】表示方法与根 表示方法:降幂,向量形式. 例如, p( x ) 2 x x 3 x5 被表示为向量 p=[-1 0 1 0 2 0] 而不是 p=[0 2 0 1 0 -1] 或者 p=[2 1 -1]. 相关 MATLAB 函数 函数名 含义 %注意保证第一个分量不能为零

MATLAB线性方程组和代数方程数值求解

MATLAB线性方程组和代数方程数值求解

第10讲 线性方程组和代数方程数值求解 (第8章 MATLAB 方程数值求解)目的:一、 掌握矩阵的分解与线性方程组的解 二、 代数方程数值求解的方法。

—————————————————————————————————————— 一、掌握线性方程组和代数方程数值求解的方法。

(一)矩阵的分解 1、化简矩阵的计算工作量当方程组AX b =的系数矩阵为方阵且可逆时,方程组有唯一解。

1X A b −=,求1A −或者1A b −的方法是将()()1,~,rA E E A−或者()()1,~,rA b E A b −这两个方法都需要经过将矩阵A 化为单位矩阵E 这一过程,而将矩阵A 化为单位矩阵E 通常采用高斯消元法。

假设110a ≠利用11a 将红框内的元素化为0,在计算化简的过程中,蓝框内的元素也要一起同步计算。

重复这一过程,可以将A 从上往下化简为上三角矩阵:可以继续将这个矩阵从下往上化简为对角矩阵,在往上化简时,比如用nn b 化简红框元素,由于主对角线下元素是零,此时蓝框内的元素不会一起同步计算。

112233000000000000nn a b b b,(2)对比从上往下,和从下往上化简的过程可知,化简一般矩阵为单位矩阵的计算工作量远远大于将三角矩阵化简为单位矩阵的计算工作量。

2、方阵的LU 分解与方程组n A X b =的求解矩阵的LU 分解是指将矩阵A 分解为下三角矩阵L 与上三角矩阵U 的乘积,即A L U =⋅,方程组AX b =等同于LUX b =,解得11X U L b −−=,由于,L U 是三角矩阵,求逆时运算量比较小。

所以如果,L U 已知,用11X U L b −−=求解比用1X A b −=更加有效。

但如果,L U 未知,用11X U L b −−=求解方程组,还需要将A 分解为,L U ,如果求出的,L U 只用于求解一个方程组AX b =,显然并不比用1A −求解更有效。

matlab求解代数方程组解析

matlab求解代数方程组解析

第三讲 Matlab 求解代数方程组理论介绍:直接法+迭代法,简单介绍相关知识和应用条件及注意事项 软件求解:各种求解程序讨论如下表示含有n 个未知数、由n 个方程构成的线性方程组:11112211211222221122n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩ (1)一、直接法 1.高斯消元法:高斯消元法的基本原理: 在(1)中设110,a ≠将第一行乘以111,k a a -加到第(2,3,,),k k n = 得: (1)(1)(1)(1)11112211(2)(1)(2)22112(2)(2)(2)22n n n n n nn n n a x a x a x b a x a x b a x a x b ⎧+++=⎪++=⎪⎨⎪⎪++=⎩(2)其中(1)(1)1111,.k k aa b b ==再设(2)220,a ≠将(2)式的第二行乘以(2)2(2)22,(3,,)k a k n a -= 加到第k 行,如此进行下去最终得到:(1)(1)(1)(1)11112211(2)(1)(2)22112(1)(1)(1)1,111,1()()n n n n n n n n n n n n n n n n nn n n a x a x a x b a x a x b a x a x b a x b --------⎧+++=⎪++=⎪⎪⎨⎪+=⎪⎪=⎩(3) 从(3)式最后一个方程解出n x ,代入它上面的一个方程解出1n x -,并如此进行下去,即可依次将121,,,,n n x x x x - 全部解出,这样在()0(1,2,,)k kk a k n ≠= 的假设下,由上而下的消元由下而上的回代,构成了方程组的高斯消元法. 高斯消元法的矩阵表示:若记11(),(,,),(,,)T T ij n n n n A a x x x b b b ⨯=== ,则(1)式可表为.Ax b =于是高斯消元法的过程可用矩阵表示为:121121.n n M M M Ax M M M b --=其中:(1)21(1)111(1)1(1)11111n a a M a a ⎛⎫ ⎪ ⎪- ⎪=⎪ ⎪ ⎪ ⎪- ⎪⎝⎭ (2)32(2)222(2)2(2)221111n a a M a a ⎛⎫⎪⎪ ⎪-⎪=⎪ ⎪ ⎪⎪- ⎪⎝⎭高斯消元法的Matlab 程序: %顺序gauss 消去法,gauss 函数 function[A,u]=gauss(a,n) for k=1:n-1%消去过程 for i=k+1:n for j=k+1:n+1%如果a(k,k)=0,则不能削去 if abs(a(k,k))>1e-6 %计算第k 步的增广矩阵 a(i,j)=a(i,j)-a(i,k)/a(k,k)*a(k,j); else%a(k,k)=0,顺序gauss 消去失败 disp (‘顺序gauss 消去失败‘); pause; exit; end end end end%回代过程 x(n)=a(n,n+1)/a(n,n); for i=n-1:-1:1 s=0; for j=i+1:n s=s+a(i,j)*x(j); endx(i)=(a(i,n+1)-s)/a(i,i); end%返回gauss 消去后的增广矩阵 A=triu(a); %返回方程组的解 u=x ;练习和分析与思考: 用高斯消元法解方程组:12345124512345124512452471523814476192536x x x x x x x x x x x x x x x x x x x x x x ++++=⎧⎪+++=⎪⎪++++=⎨⎪+++=⎪+++=⎪⎩2.列主元素消元法在高斯消元法中进行到第k 步时,不论()k ik a 是否为0,都按列选择()||(,,)k ik a i k n = 中最大的一个,称为列主元,将列主元所在行与第k 行交换再按高斯消元法进行下去称为列主元素消元法。

MATLAB第五课 代数方程求解

MATLAB第五课 代数方程求解
x-1/6 x3+1/120 x5-...-1/121645100408832000 x19 1 0.5 0 -0.5 -1 -6 -4 -2 0 x 2 4 6
习题:见109页1-10
x=
用solve命令解方程
>> x=solve('x+3=0') >> x=solve('x+3')
x=
x=
当你传递给solve函数x+3时,MATLAB假 设你传递的就是x+3=0 -3 -3 提问:如果你求解的方程有时候可能含有多个符 号,如ax+5=0,这个时候怎么求解?
提问:如果你在MATLAB中输入方程ax+5=0, MATLAB只认为求解x。 >> solve('a*x+5') ans = -5/a
>> doபைடு நூலகம்ble(s(1))
ans =
4.2588
>> double(s(2))
ans =
1.1164
>> ezplot(eq1,[-10 10])
x -5 x +4 x -5 x+6
10000 8000 6000 4000 2000 0 -10 -5 0 5 10
4
3
2
x
5
解: 5x+4y=3 X-6y=2
>> ezplot('x+3=0') ??? Error using ==> inlineevalError in inline expression ==> x+3=0??? Error: The expression to the left of the equals sign is not a valid target for an assignment.Error in ==> inline.feval at 34 INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr); Error in ==> specgraph\private\ezplotfeval at 54 z = feval(f,x(1));Error in ==> ezplot>ezplot1 at 448[y,f,loopflag] = ezplotfeval(f,x); Error in ==> ezplot at 148 [hp,cax] = ezplot1(cax,f{1},vars,labels,args{:});
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
k=polyder(p) : 多项式 p 的导数;
k=polyder(p,q): p*q 的导数;
[k,d]=polyder(p,q): p/q 的导数,k 是分子,d 是分母
3 2 p ( x ) 2 x x 3, q( x) 2 x 1 , 例:已知 求 p' , ( p q)' , ( p / q)'
3 2 p 2 x x 3 例: 1 p2 2 x 1 p1 p2 2 x 3 x 2 2 x 4
[2, 1, 0, 3] [ 0, 0, [ 2, 1] [2, 1, 2, 4]
多项式四则运算
多项式乘法运算: k = conv(p,q)
例:计算多项式 2 x 3 x 2 3 和 2 x 1 的乘积
X
Matlab 符号方程求解器
solve s=solve(f,v):求方程关于指定自变量的解; s=solve(f):求方程关于默认自变量的解。
f 可以是用字符串表示的方程,或符号表达式; 若 f 中不含等号,则表示解方程 f=0。 例:解方程 x^3-3*x+1=0 >> syms x; f=x^3-3*x+1; >> s=solve(f,x) >> s=solve('x^3-3*x+1','x') >> s=solve('x^3-3*x+1=0','x')
注:若 x 是向量或矩阵,则采用数组运算 (点运算)! 例:已知 p( x) 2 x 3 x 2 3,分别取 x=2 和一个 22 矩阵, 求 p(x) 在 x 处的值 >> p=[2,-1,0,3]; >> x=2; y=polyval(p,x) >> x=[-1, 2;-2,1]; y=polyval(p,x)
>> p=[2,-1,0,3]; >> q=[2,1]; >> k=conv(p,q);
多项式除法运算: [k,r] = deconv(p,q)
其中 k 返回的是多项式 p 除以 q 的商,r 是余式。 [k,r]=deconv(p,q) <==> p=conv(q,k)+r
多项式的求导
polyder
多项式的零点
x=roots(p):若 p 是 n 次多项式,则输出是 p=0 的 n 个根组成的 n 维向量。
3 2 例:已知 p( x) 2 x x 3,求 p(x) 的零点。
>> p=[2,-1,0,3]; >> x=roots(p) 若已知多项式的全部零点,则可用 poly 函数给出该多项式 p=ploy(x)
例: 2 x 3 x 2 3
[2, 1, 0, 3]
注:系数中的零不能省!
多项式显示: poly2sym(p,’x’)
多项式四则运算
多项式加减运算
Matlab 没有提供专门进行多项式加减运算的函数,事实 上,多项式的加减就是其所对应的系数向量的加减运算 对于次数相同的多项式,可以直接对其系数向量进行 加减运算; 如果两个多项式次数不同,则应该把低次多项式中系 数不足的高次项用 0 补足,然后进行加减运算。
>> k1=polyder([2,-1,0,3]); >> k2=polyder([2,-1,0,3],[2,1]); >> [k2,d]=polyder([2,-1,0,3],[2,1]);
多项式的值
计算多项式在给定点的值
代数多项式求值
y = polyval(p,x): 计算多项式 p 在 x 点的值
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ... 'x^2+3*y^2=28','x','y','z') 输出变量的顺序要书写正确!
solve 在得不到解析解时,会给出数值解。
x 2 y z 27 例:解方程组 x z 3 x 5 3 y 2 28
p( x) ( x x1 )( x x2 )( x xn )
多项式运算小结
poly2sym(p,’x’) k = conv(p,q) [k,r] = deconv(p,q) k = polyder(p) [k,d] = polyder(p,q) [k,d] = polyder(p,q) y = polyval(p,x) Y = polyvalm(p,X) x = roots(p)
Matlab 符号方程求解器
solve 也可以用来解方程组 solve( f1 , f2 , ... , fN , v1 , v2 , ... , vN)
求解由 f1 , f2 , ... , fN 确定的方程组关于 v1 , v2 , ... , vN 的解
x 2 y z 27 例:解方程组 x z 3 x 2 3 y 2 28
>> [x,y,z]=solve('x+2*y-z=27','x+z=3', ... 'x^5+3*y^2=28','x','y','z')
求解方程函数小结
roots(p):多项式的所有零点,p 是多项式系数向量。 fzero(f,x0):求 f=0 在 x0 附近的根,f 可以使用
inline、字符串、或 @,但不能是方程或符号表达式!
非线性方程的根
Matlab 非线性方程的数值求解 fzero(f,x0):求方程 f=0 在 x0 附近的根。
方程可能有多个根,但 fzero 只给出距离 x0 最近的一个 x0 是一个标量,不能缺省 fzero 先找出一个包含 x0 的区间,使得 f 在这个区间 两个端点上的函数值异号,然后再在这个区间内寻找方程 f=0 的根;如果找不到这样的区间,则返回 NaN。 由于 fzero 是根据函数是否穿越横轴来决定零点,因 此它无法确定函数曲线仅触及横轴但不穿越的零点,如 |sin(x)| 的所有零点。
多项式运算中, 使用的是多项式
系数向量,
不涉及符号计算!
线性方程组求解
线性方程组求解 linsolve(A,b):解线性方程组 Ax b
x 2y z 2 例:解方程组 xz3 x 3y 8
>> A=[1 2 –1; 1 0 1; 1 3 0]; >> b=[2;3;8]; >> x=linsolve(A,b) b是列向量!
例: >> fzero('sin(x)',10)
>> fzero(@sin,10) >> fzero('x^3-3*x+1',1) >> fzero('x^3-3*x+1',[1,2]) >> fzero('x^3-3*x+1',[-2,0]) >> f=inline('x^3-3*x+1'); >> fzero(f,[-2,0]) >> fzero('x^3-3*x+1=0',1)
linsolve(A,b):解线性方程组。 solve(f,v):求方程关于指定自变量的解,f 可以是用
字符串表示的方程、符号表达式或符号方程; solve 也可解方程组(包含非线性); 得不到解析解时,给出数值解。
多项式的值
矩阵多项式求值
Y=polyvalm(p,X)
采用的是普通矩阵运算 X 必须是方阵
3 2 例:已知 p( x) 2 x x 3,则
polyvalm(p,A) = 2*A*A*A - A*A + 3*eye(size(A)) polyval(P,A) = 2*A.*A.*A - A.*A + 3*ones(size(A)) >> p=[2,-1,0,3]; >> x=[-1, 2;-2,1];polyval(p,x) >> polyvalm(p,x)

非线性方程的根
fzero 的另外一种调用方式
fzero(f,[a,b])
求方程 f=0 在 [a,b] 区间内的根。 方程在 [a,b] 内可能有多个根,但 fzero 只给出一个
参数 f 可通过以下方式给出:
fzero('x^3-3*x+1',2); f=inline('x^3-3*x+1'); fzero(f,2) fzero(@(x)x^3-3*x+1,2); f 不是方程!也不能使用符号表达式!
Matlab 多项式运算
与代数方程求解器
Matlab 多项式运算
Matlab 中多项式的表示方法
在 Matlab 中,n 次多项式是用一个长度为 n+1的向量来 表示,缺少的幂次项系数为 0。
p( x) an x n an1 x n1 a1 x a0 在 Matlab中表示为向量: [an , an1 , , a1 , a0 ]
相关文档
最新文档