使用matlab求解線性 非線性方程

2022-02-15 14:39:50 字數 3357 閱讀 6798

使用matlab求解線性方程

ax = b 形式   a ,b為矩陣

(1) a為非奇異矩陣時,既有唯一解時

共有三種方法求解:

example

clear 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 f 

m = [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 all

z_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 所求解的最大值 非線性規劃問題...