И другие программы этой серии
lambda (i) близко к нулю, когда X(i) положительно, lambda (i) отрицательно, когда X(i) равно 0;
• X=lsqnonneg(A,B,X0,options) или [X,W,W1,exitflag,output, lambda] = lsqnonneg(A,B,X0,options) – обычно используется, если при предыдущей попытке решения системы exitflag = 1 или если необходимо изменить заданный по умолчанию порог отбора X – tolX, равный 10*max(size(A))*norm(A,1)*eps (произведению первой нормы матрицы, большего из измерений матрицы, машинной точности и 10). Параметры options должны быть предварительно заданы при помощи команды optimset. Lsqnonneg использует только параметры \'display\' è \'tolX\'. Поэтому наиболее часто используемая вместе с lsqnonneg форма записи команды – options=optimset(\'tolX\',tolvalue),где tolvalue – новое значение порога отбора по X.
Применение ограничений позволяет избежать получения отрицательных корней, хотя и ведет к появлению несколько больших погрешностей решения, чем в случае решений без ограничений. Пример:
>> C=[4 3;12 5;3 12];b=[1,45,41];D=lsqnonneg(C,b\') D =
2.2242
2.6954
8.1.3. Решение систем линейных уравнений с комплексными элементами
В ряде задач, например при расчете электрических цепей символическим методом, нужно решение систем линейных уравнений с комплексными элементами матрицы и вектора свободных членов. Приведем пример такого решения для системы из трех уравнений:
>> A=[4+i 0.24 -0.08;0.09 3 -0.15; 0.04 -0.08 4+i] A =
4.0000
+ 1. OOOOi
0.2400 -0.0800
0.0900
3.0000 -0.1500
0.0400
-0.0800 4.0000 + 1.OOOOi
>> В=[8 9
20]
В =
8
9 20
>> Х=В/А
X =
1.7764
— 0.4319i
2.9870 + 0.0020i 4.8427 — 1.2192
388
Программные средства численных методов
Решение СЛУ с разреженными матрицами
389
Проверка показывает, что в среде MATLAB это решение верно:
>> X*A ans =
8.0000 9.0000 – 0.0000i 20.0000
Заметим, что в данном случае вектор B задан как вектор-строка, так что решается по существу иная система уравнений.
Начало в части 1