2016-05-19 1 views
1

Так вот два уравнения:MATLAB - Продолжайте получать пустые матрицы при решении системы уравнений

(1-е^ф) * P = (1-е^β) G + (е^β) (1-е^α) * W

α = φ -р

где φ = 90 и Р, G и W являются 1х2 матрицы [2,1], [0,0] и [ 1,3822, 1,3822] соответственно.

Вот мой код:

function y = RR2CrankAng(P12,G,W1,theta) 
syms beta alpha 
eqn1 = ((1-exp(theta))*P12) == ((1-exp(beta))*G)+((exp(beta))*(1-exp(alpha))*W1); 
eqn2 = alpha == theta - beta; 
sol = solve([eqn1, eqn2], [beta12, alpha12]); 
xSol = sol.beta12; 
ySol = sol.alpha12; 
y = [xSol,ySol]; 
end 


CA = RR2CrankAng(P12,G,W1,theta12) 
CA = 
Empty sym: 0-by-2 

Что я делаю неправильно? Есть лучший способ сделать это. Я все еще изучаю MATLAB.

+0

Поскольку '' P', G' и 'W' являются векторами два-элементные, вы технически есть три уравнения с только два переменные и 'solve' не похоже на переопределенные системы. Без каких-либо разъяснений относительно того, что вам нужно (решение системы для каждого элемента векторов индивидуально или решение проблемы наименьших квадратов для всех трех уравнений), я не могу предложить никаких советов о том, как действовать. – TroyHaskin

ответ

0

Если подставить α = φ -β к первому уравнению вы получите

(1-е^ф) * Р = (1-е^β) * G + (е^β) * W + (1 - е^φ) * W

Вы можете изменить его, чтобы получить

(1-е^ф) * P - G + (е^φ - 1) W = е^β (WG)

Это чрезмерная проблема. Его можно решить, например, используя метод наименьших квадратов. Если вы определяете:

A = W-G; 
b = (1−e^φ)*P - G + (e^φ - 1)*W); 

вы можете получить ваше решение с помощью

beta = log(b/A);