Matlab——數值計算——單個代數方程 代數方程組


方程求解

求解單個代數方程

MATLAB具有求解符號表達式的工具,如果表達式不是一個方程式(不含等 號),則在求解之前函數solve將表達式置成等於0。 

>> syms a
syms b
syms c
syms x
>> solve('a*x^2+b*x+c')
 
ans =
 
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

結果是符號向量,其元素是方程的兩個解。如果想對非缺省值x變量求解,solve必須指定變量

>> solve('a*x^2+b*x+c','b')
 
ans =
 
-(a*x^2 + c)/x

帶有等號的符號方程也可以求解:

>> f = solve('cos(x) = sin(x)')
 
f =
 
pi/4
 
>> t = solve('tan(2*x) = sin(x)')
 
t =
 
0

>> x = solve('exp(x) = tan(x)')
警告: Cannot solve symbolically. Returning a numeric
approximation instead. %不能用符號來解決。返回數字是近似值。
 
x =
 
-226.19467105846511316931032359612

 

 代數方程組求解

 

>> eq1 = 'x-3 =4';
eq2 = 'x*2-x-6=0';
eq3 = 'x^2+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 =
 
6
 
>> solve(eq3)
 
ans =
 
 - 3^(1/2)*i - 1
   3^(1/2)*i - 1
 
>> solve(eq4,eq5,eq6)

ans = 

    x: [1x1 sym]
    y: [1x1 sym]
    z: [1x1 sym]

這里,solve(eq4,eq5,eq6)是一個結構數組,其中每個元素為一符號類型的量

>> ff = solve(eq4,eq5,eq6);
>> ff.x
 
ans =
 
-2
 
>> ff.y
 
ans =
 
5
 
>> ff.z
 
ans =
 
-6

也可以:

>> [a,b,c] = solve(eq4,eq5,eq6)
 
a =
 
-2
 
 
b =
 
5
 
 
c =
 
-6

 

例題:

 

 解題思路:

首先,根據以上給出的信息列出一組線性方程,假如p,n,d和q分別表示1美分,5美分,10美分,和25美分的硬幣數

>> syms d
>> syms p
>> syms n
>> syms q
>> a = 'd+(n+p)/2=q';
>> b = 'p=n+d+q-10';
>> c = 'q+d = p+n/4';
>> d = 'q+p = n+8*d-1';
>> [pennise,nickles,dimes,quarters] = solve(a,b,c,d,'p,n,d,q')
警告: Do not specify equations and variables as character
strings. Instead, create symbolic variables with syms. 
%不要將公式和變量指定為字符串。相反,使用syms創建符號變量。
 
pennise =
 
16
 
 
nickles =
 
8
 
 
dimes =
 
3
 
 
quarters =
 
15

>> money = .01*16+.05*8+.10*3+.25*15

money =

    4.6100

 

 

 

 例題:

 

【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'),
61
view([-31,62]),hold on,
surf(X,Y,F2),surf(X,Y,F0),
shading interp,
hold off

【1】在某區域觀察兩函數0等位線的交點情況

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的三條等位線。

【2】從圖形獲取零點的初始近似值

ginput 獲取兩個函數0 等位線(即三線組中間那條線)交點的坐標。

[x0,y0]=ginput(2); %在圖上取兩個點的坐標
disp([x0,y0])

【3】利用 fsolve 求精確解(以求(0.7926,7843)附近的解為例。)

本例直接用字符串表達被解函數。注意:在此,自變量必須寫成x(1), x(2)。
假如寫成xy(1), xy(2),指令運行將出錯。

fun='[sin(x(1)-x(2)),cos(x(1)+x(2))]'; %<12>
xy=fsolve(fun,[x0(2),y0(2)])
%<13>

xy =

0.7854 0.7854

 【4】檢驗

fxy1=sin(xy(1)-xy(2));fxy2=cos(xy(1)+xy(2));disp([fxy1,fxy2])

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM