Пустые графики
04.04.2021
Добрый день!
В лабораторной работе возникла проблема - матлаб рисует пустые графики. В работе проводится исследование статических режимов динамической системы. Часть кода далее (остальное - построение для u2, практически не отличается):
clc, clear;
global Phin w Uc rv in rya ce cm wn Mv p eps;
Phin = 0.005;
w = 8600;
Uc = 220;
rv = 415;
in = 30;
rya = 1.39;
ce = 300; cm = 300;
wn = 100;
Mv = 50;
p = [1.5876 0 -1.7208 0 1.4780 0];
eps = 0.001;
u1 = 1.2:-0.2:0.2;
u = [u1; ones(size(u1))];
x0 = [1; 1; 1]; xx = [];
for i = 1:1:length(u1)
x = newton('F_fun', 'G_fun', x0, u(:,i), eps);
xx = [xx x];
x0 = x;
end
x1 = xx(1,:);
x2 = xx(2,:);
x3 = xx(3,:);
figure(1);
subplot (221);
plot(u1, x1), grid on, title ('Зависимость магнитного потока от Uв');
subplot (222);
plot(u1, x2), grid on, title ('Зависимость тока якоря от Uв');
subplot (223);
plot(u1, x3), grid on, title ('Зависимость угловой скорости от Uв');
subplot (224);
plot(u1, x1,'k', u1, x2, 'k --', u1, x3, 'k *'), grid on;
title ('Статические характеристики при U1=var, U2=const');
legend('X1(u1)', 'X2(u1)', 'X3(u1)');
При выполнении дает предупреждения:
Warning: Matrix is singular to working precision.
> In newton (line 5)
In lab2 (line 20)
Warning: Matrix is singular, close to singular or badly scaled. Results may be inaccurate. RCOND = NaN.
> In newton (line 5)
In lab2 (line 20)
Насколько я понял, число, которое получается при выполнении функции newton слишком маленькое и не может отобразиться. Из-за этого матрицы x у меня записаны как вектор NaN. Сама функция Ньютона:
function [res]=newton(F,G,x0,u,eps)
arr=feval(F,x0,u); res=x0;
while(norm(arr)> eps)
f_G=feval(G,res,u);
res=res-(f_G)\arr;
arr=feval(F,res,u);
end
end
Как итог, программа выводит пустые графики, с сеткой, с подписями, но без самих графиков.
Подскажите пожалуйста, что я делаю не так?
Ответы
1. F_fun, G_fun - ???
2. Пустые, т.к. там NaNами забито скорее всено. о чем и ошибка. А вот почему - сложно сказать. См.п.№1.
Извиняюсь, забыл прикрепить функции
F_fun:
G_fun:
Все верно. Переменная f_G содержит нули. Обратная матрица нихт существует. (наверно не матемкоректно выразился, ну да ладно)
Чисто для тупой проверки исключил это выделенной строчкой. Заработало. Но другой вопрос что у вас явно расходится процесс, а не сходится к значению eps, поэтому не спешите запускать скрипт. У вас значения в матрице большие, след-но норма тоже. А eps - минус треться степень.