代数方程组和微分方程组的求解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> format long >> r=fzero(@(x)(x.*sin(x)+2*x.*sin(2*x)+3*x.*sin(3*x)+4*x.*… sin(4*x)+5*x.*sin(5*x)-10),3.8) r=
3.908485977246559
例:求含参数代数方程
f (x, a) a 3x2e0.2x e0.02x sin 4 ax
运行结果: >> r=rootexample(0.8) r= 0.5219 >> r+quad('exp(-x.^2)',0,r)-1 %check the solution ans = -2.2204e-016
例:求方程
5
kxsin(kx) 10
k 1
的最小正根。
首先寻找初始值。画出方程
5
f (x) kxsin(kx) 10
2. 线性方程组的求解
线性方程组
Ax=b 可以利用矩阵除法直接得到。但当系数矩阵为稀疏矩阵时,利用稀 疏矩阵函数可以得到更高的计算效率。
例:求解n阶线性方程组
2 1
Байду номын сангаас0 x1 1
1 2 1
x2 1
1 2
x3
1
0 1
1
0
1
2
x
n
1
对n=1000,分别利用正常方法和稀疏矩阵求解,并比较计算时间。
solve函数还有另一种调用形式
x solve(eq1,eq2,,eqm, var1, var 2,, var m)
其中 是字符串,定义方程。 也是字符串,指明所求解的变量。
例: 求解线性方程组 ax y z 1 x ay z 2 x y az 3
参考程序 syms x y z a [u,v,w]=solve(a*x+y+z-1,x+a*y+z-2,x+y+a*z-3,x,y,z)
运行结果显示:在一般情况下,迭代收敛到与初始值接近的根。
例:求解方程
x x et2 dt 1 0 0
参考程序: function r=rootexample(x0) r=fzero(@rootfun,x0); end function f=rootfun(x)
f=x+quad(@(t)exp(-t.^2),0,x)-1; end
f1 f2
( x1 , ( x1 ,
x2 x2
,, ,,
xn xn
) )
fn (x1, x2 ,, xn )
非线性方程组求解的matlab函数为
x fsolve( fun, x0)
使用方法完全类似于函数fzero,但对初始条件的选择要困难的多。
function f=fun(x,a) f=a-3*x.^2.*exp(-0.2*x)+exp(-0.02*x).*sin(a*x).^4; end
注:含参数的方程的求解对后续计算非常重要。如上面例子求参数, 使得根取极大等。
4.非线性方程组求解
非线性方程组的一般形式为
其中
F(x) 0
F ( x)
Elapsed time is 0.144504 seconds. Elapsed time is 0.009240 seconds.
3. 非线性方程求根
求解非线性方程
f (x) 0
一般利用以下形式的迭代方法:
xk1 (xk ) 著名的Newton迭代法
k 0,1,2,
xk 1
f (xk ) f (xk )
其中x0是初始值。fun可以是字符串以指示函数名,也可以是以@ 开头的函数句柄如 ‘sin’,@sin,@(x)sin(x)
例:求方程 sin(x)+cos(x)=1 的解。初始值依次选取x0=1,2,…,10 。 参考程序: r=zeros(1,10); for x0=1:10
r(x0)=fzero(@(x)(sin(x)+cos(x)-1),x0); end r 运行结果: r= 1.5708 1.5708 1.5708 1.5708 6.2832 6.2832 6.2832 7.8540 7.8540 7.8540
u= (a - 4)/(a^2 + a - 2) v= 2/(a + 2) w= (3*a)/(a^2 + a - 2)
也可以利用下面的语句求解 >> s=solve('a*x+y+z-1','x+a*y+z-2','x+y+a*z-3','x','y','z') s=
x: [1x1 sym] y: [1x1 sym] z: [1x1 sym]
参考程序:
clc clear n=1000; A=diag(2*ones(1,n))+diag(ones(1,n-1),1)+diag(ones(1,n-1),-1); A(n,1)=1; b=ones(n,1); tic x=A\b; toc A1=sparse(A); tic x=A1\b; toc 输出结果:
其中,s是结构形数据。可以用下面的方法显示求得的解 >> s.x ans = (a - 4)/(a^2 + a – 2)
方程组的符号求解得到的是解析式。其优点是可以得到含未知 参数的解,有利于进一步的分析。缺点是计算效率低,且复杂 的问题一般得不到解析解。
常微分方程组的符号求解
常微分方程(组)的符号运算函数为dsolve,调用格式为 变量= dsolve(equ1,equ2,….);
%多项式乘法 %多项式除法 %多项式的导数 %多项式的积分(原函数) %输出多项式p在向量x的值
多项式求根的函数为 r=roots(p);
其中r是多项式p的所有根组成的向量。
例:求多项式
x6 20x5 138x4 328x3 223x2 1692x 1260
的根并在多项式图形中表示。
q =[1 -20 138 -328 -223 1692 -1260]; r=roots(q); x=-2.2:0.05:8; y=polyval(q,x); y1=polyval(q,r); plot(x,y,r,y1,'p') xlim([-2.2,8]) legend('polynomial','roots‘)
其中equ1, equ2等是字符串,描述微分方程。方程形式与solve语 句中类似,其中的导数项利用D表示,Dy,D2y分别描述y的一阶和 二阶导数。初值和边值条件也利用方程描述。
例5.2:求微分方程
d2y dt 2
2
dy dt
2
y
0
的通解和在初始条件 y(0) 1, y(0) 下2 的特解
>> y=dsolve('D2y-2*Dy+2*y=0') y= C24*exp(t)*cos(t) + C25*exp(t)*sin(t) >> y=dsolve('D2y-2*Dy+2*y=0','y(0)=1','Dy(0)=2') y= exp(t)*cos(t) + exp(t)*sin(t)
在 上的图形
k 1
>> x=0:pi/50:2*pi; >> y=x.*sin(x)+2*x.*sin(2*x)+3*x.*sin(3*x)+4*x.*sin(4*x)… +5*x.*sin(5*x)-10; >> plot(x,y,x,0)
利用对上述图形的局部放大图 (下图)估计得到初始值 x0=3.8
代数方程组和微分方程组的求解
微分方程组和代数方程组的符号解
代数方程组的符号求解
代数方程组的符号求解函数为solve函数,函数调用格式为
x solve( fun1, fun2,, funm, var1, var 2,, var m)
其中fun1, fun2,…为符号表达式。var1,var2,….为符号变量,指明所求解的变 量。如果不指明所求解的变量,则系统根据变量在英文字母中与x的接近 程度选择。
的根与a的关系。
function rootfinding x=0:0.01:5;l=1;root_1=zeros(1,length(x)); for a=x;
root_1(l)=fzero(@(x)fun(x,a),a); l=l+1; end plot(x,root_1,'-') xlabel('parameters') ylabel('roots') end
代数方程的数值方法
1、多项式求根
在matlab语言中,多项式利用行向量表示。如向量
u 1 2 0 5 4
用作多项式函数时,与多项式
p x4 2x3 5x 4
对应。因此,多项式运算对应向量的相关运算,如多项式的加 法对应向量的加法等。
多项式运算的几个常用函数: p=conv(p1,p2) [d,r]=deconv(p1,p2) dp=polyder(p) ip=polyint(p) y=polyval(p,x)
就是众多迭代方法中的一种。
迭代是一种逐步近似的过程,在迭代求根中,需要给定初始近似x0 来启动迭代过程。初始近似 的选取非常重要,这是因为 (1) 许多方法只有当 接近所求的解时,迭代才收敛。 (2)当方程有多个解时, 需要充分靠近所求的解,才能保证迭代收 敛到这个解。
Matlab中非线性方程求根的函数是fzero,调用格式为 p=fzero(fun,x0);