Форум кафедры Техники и Электрофизики Высоких Напряжений

Онлайн-сообщество ТВНщиков
Гостям форума:

Добро пожаловать на форум по технике высоких напряжений!
Для получения доступа ко всем разделам необходимо зарегистрироваться


Текущее время: 18 сен 2019, 14:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 27 апр 2011, 21:24 
Не в сети

Зарегистрирован: 21 май 2009, 19:21
Сообщения: 57
Добрый вечер!

Подкажите, пожалуйста. Мне нужно решить ситему уравнений вида:
[A]*[X]+[HE]=[U]
Sum(Xk*(H(k+1)-H(k)))=0 где k=1:M

где [A]- матрица коэффициентов размерности N x M
[EH]- вектор столбец N x 1
[Х]-неизвестный вектор величин размерности M x 1
U-неизвестная величина
[U]=U*ones(N,1)

Я пыталась решить это с помощью fsolve записав это вот в таком виде:
[K,KK]=size(A)
N=size(H);
EX=E*H;

for k=2:N
HHH(1,k-1)=HH(k,1)-HH(k-1,1);
End

B=[A;HHH];

T=size(B);

EXB=[EX;0]

T0=[ones(T-1,1); 1];
f=@(X) B*X((1:KK),1)+EXB-[X(KK+1)*ones(T-1,1);0];
rr=fsolve(f,T0,optimset('fsolve'));

Матлаб выдает предупреждение:

In @(X)B*X((1:KK),1)+EXB-[X(KK+1)*ones(T-1,1);0]
In sfdnls at 104
In optim\private\trustnleqn at 283
In fsolve at 297
In prog_corona at 91
Warning: Input arguments must be scalar.
Можно ли считать, что не смотря на предупреждение, он считает правильно, и вообще можно ли считать такой подход для решения такой системы верным!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
СообщениеДобавлено: 29 апр 2011, 01:18 
Не в сети
Site Admin

Зарегистрирован: 03 сен 2008, 16:09
Сообщения: 4283
Откуда: Д-3
Здравствуйте, Маргарита!

Ваша задача так сформулирована, что требует неслабой дешифровки. Я попробую пройтись по цепочке, будь что будет.

Итак, у Вас имеется система уравнений вида [A][x]=[B] и еще одно дополнительное уравнение [HHH][x]=0. Этот вывод я делаю, исходя из Ваших уравнений:
Цитата:
[A]*[X]+[HE]=[U]
Sum(Xk*(H(k+1)-H(k)))=0 где k=1:M

Второе уравнение я записываю в матричном виде: [HHH][x]=0, так проще (обозначение HHH я взял из приведенного Вами кода).

Размерность матрицы [A] - N x M, размерность [x] - M x 1. Размерность матрицы [HHH], очевидно, должна быть 1 x M (это подтверждается циклом k=1:M, который Вы приводите в начале.

Первый вопрос, который у меня возникает, таков - как соотносятся между собой N и M? Вы этого любезно не указываете, поэтому вооружаемся здравым смыслом и разбираемся. Очевидно, что размерность матрицы [H] больше M по крайней мере на единицу - в цикле есть обращение к H(M+1). Далее смотрим Ваш код и видим строчку:
Цитата:
N=size(H);

О! Отсюда следует вывод, что N >= M+1. Следующий код позволяет установить, что N = M+1:
Цитата:
for k=2:N
HHH(1,k-1)=HH(k,1)-HH(k-1,1);
End


Все это, в первую очередь, означает, что Вы решаете переопределенную систему линейных алгебраических уравнений (о чем Вы также в постановке задачи любезно умалчиваете, предпочитая называть эту систему уравнений просто сложной, а решаете ее вообще методом решения систем нелинейных уравнений). Иными словами, число уравнений у Вас на два больше числа искомых переменных. Такие системы уравнений можно решать разными методами, в Matlab простейший способ - применить метод наименьших квадратов (функция lsqnonlin или, еще проще, backslash - '\'). Сделать это проще всего объединив два уравнения в одно:

A1*x=B1,
где A1 = [A; HHH] и B1 = [U-HE; 0], после чего решение в Matlab выглядит так: x = A1\B1. Будьте готовы к тому, что решение может оказаться очень неточным, переопределенные системы уравнений - штука весьма ненадежная.

Искать причину предупреждения в Вашем коде считаю делом бессмысленным, так как у Вас фигурирует такая запись:
Цитата:
f=@(X) B*X((1:KK),1)+EXB-[X(KK+1)*ones(T-1,1);0];

Если посмотреть весь код внимательно, то видно, что KK=M, а внутри анонимной функции Вы обращаетесь к элементу X(M+1), что ошибочно из самой постановки задачи (размерность X равна M), правильно работать это не может в принципе.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB