2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Помогите с системой нелинейных уравнений в MatLab
Сообщение11.10.2011, 11:42 
Есть система из 4х нелинейных тригонометрических уравнений с 4мя неизвестными. В уравнения входят комплексные числа, однако корни должны быть вещественными. Пример таких уравнений приведен ниже.

Цитата:
eq1 = (((Zl*sin(Tl))/(Zs*sin(Ts)/cos(Ts)) + cos(Tl))/(1i*Zl*sin(Tl))) - 0.06081/(-0.0105*1i);

eq2 = ((((Zl*sin(2.17*Tl))/(Zs*sin(2.17*Ts)/cos(2.17*Ts)) + cos(2.17*Tl))/(1i*Zl*sin(2.17*Tl))) - 0.00034395/(-0.0031*1i));

eq3 = ((2*cos(Tl) + 2*Zl*sin(Tl)/(Zs*sin(Ts)/cos(Ts)) + 1i*Zl*sin(Tl)/50 + 50*cos(Tl)/(1i*Zs*sin(Ts)/cos(Ts)) + 1i*50*sin(Tl)/Zl + 50*(Zl*sin(Tl)/(Zs*sin(Ts)/cos(Ts) + cos(Tl))/(1i*Zs*sin(Ts)/cos(Ts))))/((2*Zl*sin(Tl) - 1i*50*cos(Tl) - 1i*50*(Zl*sin(Tl)/(Zs*sin(Ts)/cos(Ts)) + cos(Tl)))/(Zs*sin(Ts)/cos(Ts) + 2*cos(Tl) + 1i*sin(Tl)*(Zl/50 + 50/Zl))) + 3.14/2);

eq4 = ((2*cos(2.17*Tl) + 2*Zl*sin(2.17*Tl)/(Zs*sin(2.17*Ts)/cos(2.17*Ts)) + 1i*Zl*sin(2.17*Tl)/50 + 50*cos(2.17*Tl)/(1i*Zs*sin(2.17*Ts)/cos(2.17*Ts)) + 1i*50*sin(2.17*Tl)/Zl + 50*(Zl*sin(2.17*Tl)/(Zs*sin(2.17*Ts)/cos(2.17*Ts) + cos(2.17*Tl))/(1i*Zs*sin(2.17*Ts)/cos(2.17*Ts))))/((2*Zl*sin(2.17*Tl) - 1i*50*cos(2.17*Tl) - 1i*50*(Zl*sin(2.17*Tl)/(Zs*sin(2.17*Ts)/cos(2.17*Ts)) + cos(2.17*Tl)))/(Zs*sin(2.17*Ts)/cos(2.17*Ts) + 2*cos(2.17*Tl) + 1i*sin(2.17*Tl)*(Zl/50 + 50/Zl))) + 3*3.14/2);


В MatLab я небольшой специалист и как её эффективно решать (ни solve, ни что либо еще мне не помогает), идей пока нет. Подскажите, пожалуйста. Заранее спасибо.

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение11.10.2011, 15:30 
Аватара пользователя
Мне кажется, тут прежде чем решать можно что-то поупращать в записи. Например: вместо $\sin(T_s)/\cos(T_s)$ сразу написать $\tg(T_s)$, да и не стоит подставлять числа, типа $3.14$ вместо $\pi$ - матлаб знает эту константу, а потом воспользоваться функцией fsolve() - посмотрите документацию по функции, там есть примеры

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение11.10.2011, 17:32 
Спасибо. Упростив выражение я попробовал fsolve(). Проблема в том, что не смотря на начальное приближение, он находит всегда комплексные корни. Мне же нужны вещественные, поскольку комплексные в данном случае не имеют физического смысла. Можно как-нибудь это ограничить? Искал в документации, но не нашел.

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение11.10.2011, 19:04 
Аватара пользователя
а велика ли комплексная часть? может это просто погрешность вычисления?

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение13.10.2011, 18:17 
А нули у функции есть?
Решения нужны все или хотя бы одно?
Я бы для начал свернул max(abs) и минимум поискал fminsearch.
В матлабе есть ещё целый модуль для глобальной оптимизации, но я им не пользовался, не знаю что там и как.

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение16.10.2011, 10:14 
photon в сообщении #491671 писал(а):
а велика ли комплексная часть? может это просто погрешность вычисления?


Обычно, мнимая часть достаточно велика. Так, например:
Цитата:
0.0038 - 0.1571i
-1.4448 - 1.5110i
-0.5790 - 0.0146i
-1.5716 + 0.0000i

И хотелось бы отсеивать отрицательные и комплексные корни каким-то образом. Потому что не смотря на чисто вещественное первое приближение ответ по виду получается такой, как приведено выше.

-- 16.10.2011, 11:22 --

Reyn в сообщении #492200 писал(а):
А нули у функции есть?
Решения нужны все или хотя бы одно?
Я бы для начал свернул max(abs) и минимум поискал fminsearch.


Решение системы нужно хотя бы одно (для четырех переменных), но вещественное положительное. Почитал описание функций, но все-таки не совсем понимаю - поясните пожалуйста. Вы предлагает max(abs) где употребить? В описании входных функций? И потом искать минимум по четырем переменным? Заранее спасибо за разъяснения.

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение16.10.2011, 23:50 
Аватара пользователя
Toivo в сообщении #493034 писал(а):
Цитата:
0.0038 - 0.1571i
-1.4448 - 1.5110i
-0.5790 - 0.0146i
-1.5716 + 0.0000i


Э-э, а последний результат Вам чем не угодил?

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение17.10.2011, 16:01 
photon в сообщении #493261 писал(а):
Toivo в сообщении #493034 писал(а):
Цитата:
0.0038 - 0.1571i
-1.4448 - 1.5110i
-0.5790 - 0.0146i
-1.5716 + 0.0000i


Э-э, а последний результат Вам чем не угодил?


Там четыре переменные и все четыре корня должны быть вещественными. А так с последним корнем все в порядке. Только с остальными тремя - не очень :)

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение18.10.2011, 00:51 
Toivo в сообщении #493034 писал(а):
Потому что не смотря на чисто вещественное первое приближение ответ по виду получается такой, как приведено выше.
У Вас есть проблема с постановкой задачи. Попробую объяснить

Существует стандартный прием - переход от комплексной системы из N уравнений к вещественной системе из 2*N уравнений.
Примитивный пример:
- решается комплексное уравнение $a + b x = 0$.
- вводим замену $a = a_r + j a_i ; b = b_r + j b_i; x = x_r + j x_i$
- получаем систему
$a_r + b_r x_r - b_i x_i = 0$
$a_i + b_i x_r + b_r x_i = 0$

Но если нужны только вещественные решения, то есть $x_i = 0$, то система становится переопределенной:
$a_r + b_r x_r = 0$
$a_i + b_i x_r = 0$
Легко видеть, что она имеет точное решение только при определенных значениях параметров $a_r, a_i, b_r, b_i$.

То же самое происходит и в Вашем случае. У Вас 4 комплексных уравнения для 4 комплексных неизвестных $Ts, Tl, Zs, Zl$ . Ей соответствует система из 8 вещественных уравнений с 8 вещественными неизвестными $Ts_r, Ts_i, Tl_r, Tl_i, Zs_r, Zs_i, Zl_r, Zl_i$. Если нужны только вещественные решения, то $Ts_i = 0, Tl_i = 0, Zs_i = 0, Zl_i = 0$.

То есть Вы хотите решить переопределенную систему из 8 вещественных уравнений с 4 вещественными неизвестными $Ts_r, Tl_r, Zs_r, Zl_r$.

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение25.10.2011, 10:51 
Yuri Gendelman в сообщении #493687 писал(а):
Toivo в сообщении #493034 писал(а):
Потому что не смотря на чисто вещественное первое приближение ответ по виду получается такой, как приведено выше.
У Вас есть проблема с постановкой задачи. Попробую объяснить


Огромное спасибо. С системой вроде разобрался. Теперь остался вопрос - как найти хорошие начальные приближения для поиска решений?

 
 
 
 Re: Помогите с системой нелинейных уравнений в MatLab
Сообщение25.10.2011, 14:27 
Toivo в сообщении #495863 писал(а):
...как найти хорошие начальные приближения для поиска решений?
Никаких общих формальных правил нет.
- Обычно пробуют несколько (вплоть до "много") разных начальных приближений.
- Если задача - прикладная, то учитывается физический смысл.
- Иногда удается сначала решить очень упрошенный вариант исходной системы и использовать его как нач.прибл.
- Если интуиция совсем ничего не подсказывает, то вспоминают преферанс ("хода нет - ходи с бубей") и задают начальное приближение (0, 0, ...) или (1, 1, ...).


Дополнительное замечание.

Вернусь к своему примеру:
Цитата:
Но если нужны только вещественные решения, то есть $x_i = 0$, то система становится переопределенной:
$a_r + b_r x_r = 0$
$a_i + b_i x_r = 0$
Легко видеть, что она имеет точное решение только при определенных значениях параметров $a_r, a_i, b_r, b_i$.
Решение $x_r = - \frac {a_r }{ b_r} = - \frac {a_i}{ b_i}$ существует при условии $a_r b_i = a_i b_r$.
То есть, мы нашли:
а) вещественное решение;
б) соотношения между параметрами, при котором вещественное решение существует.

В общем случае: требование вещественности решения комплексной системы уравнений означает, что между параметрами системы должны существовать определенные соотношения, допускающие это вещественное решение.

В зависимости от физического смысла задачи сами эти соотношения между параметрами могут представлять самостоятельный интерес.

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group