Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример решения на ПЭВМ. Программное обеспечение




Программное обеспечение

Для решения систем нелинейных алгебраических уравнений в составе библиотеки Matlab’а имеется модуль fsolve. Обращение к нему осуществляется командой

[x,f]=fsolve(fx,x0,opt,P1,P2,...);

В качестве параметров в этой функции используются:

fx функция, вычисляющая вектор f(x) левых частей системы нелинейных алгебраических уравнений;
x0 вектор компонент начального приближения x0 к решению системы уравнений;
opt структура, задающая параметры вычислительного процесса функции fsolve. Это необязательный параметр. При его отсутствии функция fsolve использует настройки по умолчанию, в частности, максимально допустимая относительная погрешность решения принимается равной 10–6;
P1,P2,... необязательные параметры, которые могут потребоваться для описания вектора f(x) левых частей системы нелинейных алгебраических уравнений.

Функция fx, вычисляющая вектор f (x) левых частей системы нелинейных алгебраических уравнений должна быть оформлена следующим образом:

function f=fx(x,P1,P2,...)

f(1)=......................;

...........................;

f(n)=......................;

end

Здесь f – массив значений вектора f (x) левых частей системы уравнений, а x – массив значений вектора решения x системы уравнений.

Структура opt содержит информацию о настройках функции fsolve. Их перечень можно получить с помощью команды optimset без параметров.

Если требуется установить параметры процесса решения нелинейных алгебраических уравнений, отличные от тех, которые используются по умолчанию, например иную относительную погрешность решения (10–5 вместо 10–6) и ограничение по числу итераций (не более 30), то можно воспользоваться командой

options=optimset('TolX',1.0e-5,’MaxIter’,30);

Результатом обращенияк функции fsolve являются массив x, содержащий искомые значения компонент вектора x решения системы нелинейных алгебраических уравнений и массив f со значениями компонент вектора левых частей системы при найденных компонентах вектора её решения.

Условия задачи. Найти решение системы нелинейных алгебраических уравнений

с относительной погрешностью 0.00001.

Решение. В простейшем случае, для получения одного решения системы нелинейных алгебраических уравнений достаточно воспользоваться функцией fsolve с нулевым начальным приближением.

fw=fopen('Lr_10.res','w');

x0=[0 0 0 0];

opt=optimset('TolX',1.0e-5);

[x,f]=fsolve(@fx,x0,opt);

fprintf(fw,'\n x='); fprintf(fw,'%10.6f',x);

fprintf(fw,'\n f='); fprintf(fw,'%10.6f',f);

fclose(fw);

Функция fx используется для вычисления левых частей системы нелинейных алгебраических уравнений

function f=fx(x)

f(1)=32*x(1)+12*x(2);

f(2)=12*x(1)+32*x(2)+12*x(3);

f(3)= 12*x(2)+32*x(3)+12*x(4);

f(4)= 12*x(3)+32*x(4);

f(1)=f(1)-8*x(1)^2 +x(1)^3-30;

f(2)=f(2)-8*x(2)^2-6*x(3)*x(4)+x(2)^3-30;

f(3)=f(3)-8*x(3)^2-6*x(2)*x(4)+x(3)^3-30;

f(4)=f(4)-8*x(4)^2-6*x(2)*x(3)+x(4)^3-30;

end

Результаты работы программы в виде решения заданной системы нелинейных алгебраических уравнений и значения её левых частей сохраняются в файле Lr_10.res, содержание которого показано ниже

x= 0.889007 0.597653 0.496852 1.043625

f= -0.000000 -0.000000 -0.000000 0.000000

В случае, когда, по каким-либо причинам, одно решение недостаточно для представления о рассматриваемой системе и требуется найти все её решения, то следует воспользоваться сначала методом непрерывного продолжения. С его помощью, строя траекторию решений заданной системы уравнений, можно найти начальные приближения для всех решений системы, а затем уточнить их с помощью функции fsolve так, как это было показано выше.

Основываясь на приведённом выше описании метода непрерывного продолжения, в исходную систему уравнений следует ввести параметр t

при нулевом значении которого записанная система имеет тривиальное – нулевое решение, а при t = 1 – искомое решение исходной системы.

Применение идеи равноправия аргументов системы уравнений с параметром t позволяет переписать эту систему в виде

после чего можно воспользоваться наилучшим параметром продолжения – длиной траектории решений s в пространстве аргументов x 1, x 2, x 3, x 4 и x 5

Система уравнений продолжения получается дифференцированием системы уравнений по параметру s. Это даёт систему обыкновенных дифференциальных уравнений, не разрешённых относительно производных

Эта система обыкновенных дифференциальных уравнений в методе непрерывного продолжения будет решаться на отрезке 0 £ s £ s max в виде задачи Коши для нормальной системы обыкновенных дифференциальных уравнений

Вектор правых частей системы обыкновенных дифференциальных уравнений на каждом шаге интегрирования определяется как решение следующей системы линейных алгебраических уравнений

.

с обязательным его нормированием.

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

global ps;

Smax=19;

Eotn=1.0e-6;

x0=[0; 0; 0; 0; 0];

ps=[0; 0; 0; 0; 1];

opt=odeset('reltol',Eotn);

[s,x]=ode45(@fp,[0 Smax],x0,opt,Eotn);

plot(x(:,1),x(:,5),'-k',x(:,2),x(:,5),'--k',...

x(:,3),x(:,5),':k',x(:,4),x(:,5),'-.k');

grid on; xlabel('x1, x2, x3, x4'); ylabel('x5 = t');

legend('x1','x2','x3','x4');

Правые части нормальной системы дифференциальных уравнений продолжения вычисляются в функции fp

function p=fp(s,x,Eotn)

global ps;

dg=dgxt(x,ps,Eotn);

b=0;

b(5)=1;

p=dg\b';

norm=sqrt(p'*p); p=p/norm;

ps=p;

end

Расширенная и дополненная матрица Якоби рассматриваемой системы нелинейных алгебраических уравнений вычисляется с помощью центральной конечной разности в функции dgxt

function dg=dgxt(x,ps,Eotn)

for i=1:4;

xt(i)=x(i);

end;

for j=1:4;

for i=1:4; dx(i)=0; end;

if abs(xt(j))<1; h=0.1*Eotn;

else; h=0.1*Eotn*abs(xt(j));

end;

dx(j)=h;

dg(:,j)=(fx(xt+dx)-fx(xt-dx))/(2*h);

end;

dg(:,5)=-30; dg(5,:)=ps';

end

Результатом работы программы построения траектории решений будут графики зависимости компонент вектора решения системы от параметра t = x 5, которые показаны на рис.2.

С помощью полученных графиков можно найти приближённые значения компонент решений исходной системы нелинейных алгебраических уравнений. Их местоположение показано кружочками на рис.2 при t = 1:

1-е решение: x 1 = 0.8, x 2 = 0.6, x 3 = 0.5, x 4 = 1.0;

2-е решение: x 1 = –0.8, x 2 = 4.7, x 3 = 2.6, x 4 = 4.4;

3-е решение: x 1 = –1.7, x 2 = 9.5, x 3 = 8.7, x 4 = 9.3.

Уточнение этих трёх начальных приближений с помощью приведённой ранее программы, использующей функцию fsolve, позволяет с погрешностью 0.00001 найти все три решения системы. Их компо-

Рис.2.

ненты, сохранённые в файле Lr_10.res, имеют следующие значения

x= 0.889007 0.597653 0.496852 1.043625

f= -0.000000 -0.000000 -0.000000 0.000000

x= -0.702865 4.732590 2.643840 4.510677

f= -0.000000 -0.000000 0.000000 0.000000

x= -1.723505 9.502964 8.764113 9.400252

f= -0.000000 0.000000 0.000000 0.000000

Контрольные задания

Найти все решения (не менее 2-х) системы нелинейных алгебраических уравнений с относительной погрешностью не более чем 0.00001. Систему уравнений взять по номеру своего варианта, заменяя переменную n его номером. Верифицировать решение.

1–5.  

 

 

6–10.
11–15.
16–20.
21–25.  
26–30.  

 




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 449; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.031 сек.