MatLab在函数的求解⽅法MatLab & 数学建模第四讲数值计算
⼀、⽅程求解
求解单个代数⽅程
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个解。如果想对⾮缺省x变量求解,solve 必须指定变量。
>> solve( ' a*x^2+b*x+c ' , ' b ' ) % solve for b
ans=
-(a*x^2+c)/x
带有等号的符号⽅程也可以求解。
>> f=solve( ' cos(x)=sin(x) ' ) % solve for x
f=
1/4*pi
>> t=solve( ' tan(2*x)=sin(x) ' )
t=
[ 0]
[acos(1/2+1/2*3^(1/2))]
[acos(1/2=1/2*3^(1/2))]
并得到数值解。
>> numeric(f)
ans=
0.7854
>> numeric(t)
ans=
0 + 0.8314i
1.9455
注意在求解周期函数⽅程时,有⽆穷多的解。在这种情况下,solve对解的搜索范围限制在接近于零的有限范围,并返回⾮唯⼀的解的⼦集。
如果不能求得符号解,就计算可变精度解。
>> x=solve( ' exp(x)=tan(x) ' )
x=
1.3079
代数⽅程组求解
可以同时求解若⼲代数⽅程,语句solve(s1,s2,.....,sn)对缺省变量求解n个⽅程,语句solve(s1,s2,...,sn,'
v1,v2,...,vn ')对n个' v1,v2,...vn '的未知数求解n个⽅程。
solve(f) 解符号⽅程式f。
solve(f1,…,fn) 解由f1,…,fn组成的联⽴⽅程式。
我们先定义以下的⽅程式:
>>eq1 = 'x-3=4'; % 注意也可写成'eq1=x-7'
diff函数>>eq2 = 'x*2-x-6=0'; % 注意也可写成'eq2=x*2-x-6'
>>eq3 = 'x2+2*x+4=0';
>>eq4 = '3*x+2*y-z=10';
>>eq5 = '-x+3*y+2*z=5';
>>eq6 = 'x-y-z=-1';
>>solve(eq1)
ans=
7
>>solve(eq2)
ans=
[[3],[-2]]' % 原⽅程式有⼆个根3, -2
>>solve(eq3)
ans=
[[-1+i*3^(1/2)],[-1-i*3^(1/2)]]' % 注意实根和虚根的表⽰式
>>solve(eq4,eq5,eq6) % 解三个联⽴⽅程式
ans=
x = -2, y = 5, z = -6
如何处理中⼩学典型的代数问题?
黛安娜(Diane)想去看电影,她从⼩猪存钱罐倒出硬币并清点,她发现:
10美分的硬币数加上5美分的硬币总数的⼀半等于25美分的硬币数。
1美分的硬币数⽐5美分、10美分以及25美分的硬币总数多10。
25美分和10美分的硬币总数等于1美分的硬币数加上1/4的5美分的硬币数
25美分的硬币数和1美分的硬币数⽐5美分的硬币数加上8倍的10美分的硬币数多1。
如果电影票价为3.00美元,爆⽶花为1.00美元,糖棒为50美分,她有⾜够的钱去买这三样东西?
⾸先,根据以上给出的信息列出⼀组线性⽅程,假如p,n,d和q分别表⽰1美分,5美分,10美分,和25美分的硬币数d
n p
q p n d q q d p
n
q p n d
+
+
==++-+=+
+=+-
2
10
4
81
然后,建⽴MATLAB符号⽅程并对变量求解。>> eq1= ' d+(n+p)/2=q ' ;
>> eq2= ' p=n+d+q-10 ' ;
>> eq3= ' q+d=p+n/4 ' ;
>> eq4= ' q+p=n+8*d-1 ' ;
>>[pennies ,nickles ,dimes ,quarters]=solve(equ1,equ2,equ3,equ4,' p ,n ,d ,q ' ) pennies= 16 nickles= 8 dimes= 3
quarters= 15
所以,黛安娜有16枚1美分的硬币,8枚5美分的硬币,3枚10美分的硬币,15枚25美分的硬币,这就意味着
>> money=.01*16+.05*8+.10*3+.25*15 money= 4.6100
她就有⾜够的钱去买电影票,爆⽶花和糖棒并剩余11美分。
【例】求解⼆元函数⽅程组=+==-=0)cos(),(0
)sin(),(2
1y x y x f y x y x f 的零点。
(0)从三维坐标初步观察两函数图形相交情况
x=-2:0.05:2;y=x;[X,Y]=meshgrid(x,y); %产⽣x-y 平⾯上⽹点坐标 F1=sin(X-Y);F2=cos(X+Y); F0=zeros(size(X)); surf(X,Y,F1), xlabel('x'),ylabel('y'), view([-31,62]),hold on, surf(X,Y,F2),surf(X,Y,F0), shading interp, %(间隔补齐) hold off
图 5.6.3-0 两函数的三维相交图
(1)在某区域观察两函数0等位线的交点情况
clear;
x=-2:0.5:2;y=x;[X,Y]=meshgrid(x,y); %产⽣x-y平⾯上⽹点坐标
F1=sin(X-Y);F2=cos(X+Y);
v=[-0.2, 0, 0.2]; %指定三个等位值,是为了更可靠地判断0等位线的存在。contour(X,Y,F1,v) %画F1的三条等位线。
hold on,contour(X,Y,F2,v),hold off %画F2的三条等位线。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。