2010-11-30 1 views
1

Пытается решить 2 уравнения с 2 неизвестными, используя MATLAB, и мне не нравится мой вход.Пытается решить 2 уравнения с 2 неизвестными символически используя MATLAB

где с 3,06 + 2.57j и против 12:

eq1 = 'c = a/10j' 
eq2 = '(6b)/50 + b/10j = a/10j + a/10' 

Попытка решить для а и б. Любые предложения о том, как правильно их вставить?

ответ

0

вам нужно указать matlab, что c, eq1, eq2, a, j (это не сложно?), А b - символические переменные. т. е. использовать команду «syms a b c j eq1 eq2». Затем определите все, как вы делали выше, за вычетом одиночных кавычек (это строка!).

тогда вы можете просто использовать переменную 'solve (eq2,', которую вы хотите решить для '). Достаточно легко.

2

Matlab завинчивается, но синтаксис

sol = solve(eq1,x1,eq2,x2,..); 

Было бы больше смысла, чтобы сделать его solve({eq1,eq2,..},{x1,x2,..}), но нет, мы должны выписать все аргументы один за другим.

В любом случае трюк заключается в том, что eq1, eq2, .. являются символическими выражениями, которые должны быть оценены до нуля. Таким образом, вместо c = a/10j она должна быть eq1=sym('c-a/10j')

Так попробуйте это:

eq1 = sym('c - a/(10*i)'); % must evaluate to zero 
eq2 = sym('(6*b)/50 + b/(10*i) -(a/(10*i) + a/10)'); %must evaluate to zero 

sol = solve(eq1,'a',eq2,'b'); 

a = subs(sol.a,'c',3.06+2.57j) 
b = subs(sol.b,'c',3.06+2.57j) 

производит a= -25.7000 +30.6000i и b=-20.6639 +29.6967i.

Обратите внимание, что символические функции не понимают 10j. Это должно быть 10*i. Также в нотации 6b отсутствует оператор и должен быть 6*b.

Удачи вам!


Поскольку задача линейна есть другой способ решить его

equs = [eq1;eq2]; 
vars = [sym('a');sym('b')]; 
A = jacobian(equs,vars); 
b = A*vars - equs; 

x = A\b; 
c = 3.06+2.57j; 
sol = subs(x,'c',c) 

с результатами

sol = 
-25.7000 +30.6000i 
-20.6639 +29.6967i 
+2

OMG, это так просто, вы просто поставить свою домашнюю работу на StackOverflow и люди дайте ответ с комментариями на тарелке – matcheek 2010-12-01 12:35:05

Смежные вопросы