使用matlab求解線性方程
ax = b 形式 a ,b為矩陣
(1) a為非奇異矩陣時,既有唯一解時
共有三種方法求解:
exampleclear all
a = [3 -9; 2 4];
b = [-42; 2];
% three methods
x = inv(a)*b % good
x = a\b % better
x = linsolve(a,b) % best
syms a b c d e fm = [a b;c d];
rhs = [e;f];
z = inv(m)*rhs
>> z = inv(m)*rhs
z =(d*e)/(a*d - b*c) - (b*f)/(a*d - b*c)
(a*f)/(a*d - b*c) - (c*e)/(a*d - b*c)
>> z = m^-1*rhs
z =(d*e)/(a*d - b*c) - (b*f)/(a*d - b*c)
(a*f)/(a*d - b*c) - (c*e)/(a*d - b*c)
>> z = linsolve(m,rhs)
z =-(b*f - d*e)/(a*d - b*c)
(a*f - c*e)/(a*d - b*c)
>> m = [3 -9;2 4]
>> rhs = [-42;2];
>> z = inv(m)*rhs
z = -5.0000
3.0000
>> z = m^-1*rhs
z = -5.0000
3.0000
>> z = linsolve(m,rhs)
z = -5
3
(2)a為奇異矩陣時,且a陣和[a,c]陣秩相同,則該方程有無數個解;
可以用 x = null(a); 先求出系統的齊次方程ax = 0的基礎解系,然後再用 x0 = pinv(a)*b 求出方程的乙個特解
然後得出系統的通解:x =a(1) * x(:,1) + a(2) * x(:,2) + ..... + a(n-m) * x(:,n-m) + x0;
a = [1 2 3 4;2 2 1 1;2 4 6 8;4 4 2 2];b = [1 3 2 6]';
c = [a,b];[rank(a) rank(b)];
syms a1 a2 ;
z = null(sym(a));
>> x0 = sym(pinv(a))*b;
>> x = a1*z(:,1)+a2*z(:,2)+x0 %求出方程的解析解
x =2*a1 + 3*a2 + 125/131
96/131 - (7*a2)/2 - (5*a1)/2
a1 - 10/131
a2 - 39/131
>> a*x-b
ans = 0
0 00
此外,可以採用rref(c),c = [a,b];進行基本行變換,得出方程的解析解;
>> c = [a,b];d =rref(c)d = 1.000000000000000 0 -2.000000000000000 -3.000000000000000 2.000000000000000
0 1.000000000000000 2.500000000000000 3.500000000000000 -0.500000000000000
0 0 0 0 0
0 0 0 0 0
(3)若a和[a,b]矩陣的秩不同,則原方程就沒有解,只能用x = pinv(a)*b求出方程的最小二乘解;
使用matlab求非線性方程
equations and systems solver - matlab solve (mathworks.com)
solve system of nonlinear equations - matlab fsolve (mathworks.com)
求解代數方程的符號解。
s = solve(eqn1,eqn2,...,eqnm,var1,var2,...,varn)
eqn 是符號表示式,可以是方程或不等式。vars是指定未知變數的符號變數表示。
fsolve 用來解決多個變數的非線性方程組。
x = fsolve(fun,x0,options)
syms x y>> sol = solve([x^2+y^2-20,y - x^2,x>0,y>0],[x,y])
sol =
包含以下欄位的 struct:
x: [1×1 sym]
y: [1×1 sym]
>> sol.x
ans = 2
>> sol.y
ans =
4
還可以使用matlab函式或者匿名函式來描述方程
function f=myfunction(z)x = z(1);
y = z(2);
f(1)=x^2+y^2-20;
f(2)=y - x^2;
end
clear allz_g = [1; 1];
z = fsolve(@myfunction, z_g);
disp(z)
匿名函式形式-----因為匿名函式標準形式為為針對自變數x,所以要都寫成x變數的形式
>> f= @(x)[x(1).^2+x(2).^2-20;x(2) - x(1).^2];>> x0 =[1;1];x= fsolve(f,x0)
x = 2.0000
4.0000
還可以設定求解精度,options
x = fsolve(fun,x0,options)
option =optimset;
option .tolx = 1e-20; option .tolfun = 1e-20;
x = fsolve(f,x0,option )
matlab 非線性優化
求解非線性問題 min z f x s.t.c x 0,ceqx 0,ax b,aeqx beq,lb x ub.x,fval,exitflag,output,lambda,grad,hessian fmincon fun,x0,a,b,aeq,beq,lb,ub,nonlcon,options,p...
非線性規劃問題的matlab求解
函式 x,fval fmincon fun,x0,a,b,aeq,beq,lb,ub,nonlcon 返回的x 是乙個向量 在取得目標函式最小時各個xi的取值 返回的fval 目標函式的最小值 引數fun 目標函式 引數x0 向量x的初始值 引數a 線性不等式約束的係數矩陣,若沒有線性不等式約束,則...
Matlab 線性與非線性規劃
matlab的運籌與決策問題 線性規劃問題 函式 linprog f,a,b,aep,bep,lb,ub 引數分析 f 目標函式的係數排列 a 約束條件的係數矩陣 b 約束條件的增廣矩陣的結果 aep 等式的係數矩陣 bep 等式的結果矩陣 lb 所求解的最小值 ub 所求解的最大值 非線性規劃問題...