Добрый день. Я приступила сегодня к самостоятельному изучению курса "Моделирование систем". Хочу понять - необходимо ли отсылать мои решения практических заданий на сайт, (и если да - то где найти волшебную кнопку "Загрузить...") или практические задания остаются полностью на моей совести? (никто не проверяет, и отчётности по ним я предоставлять не обязана?) P.S.: тьютора я не брала |
Планирование и обработка результатов пассивного эксперимента
3. Оценка параметров многомерной функции ОТ-клика
Пример 4. Поставим задачу оценки параметров , , , многомерной функции отклика вида
по известным средним значениям независимых аргументов , число которых , и по известным средним значениям самих функций , число которых . Будем считать, что совокупность повторных значений функций распределена по нормальному закону, а аргументы функций могут быть распределены произвольно. Параметры многомерной функции отклика образуют матрицу размера . Эту матрицу обозначим как .
Как видно, функции отклика являются линейными как по своим аргумента, так и по параметрам. В связи с этим для оценки параметров по измерениям аргументов и функций отклика (повторным значениям) целесообразно применить метод наименьших квадратов.
Программный код решения примера:
clear,clc %--------------------------------------------------------------- options.Resize = 'on'; options.WindowStyle = 'normal'; options.Interpreter = 'tex'; yx = inputdlg({'\bfСредние значения функций отклика:',... '\bfСредние значения аргументов функции отклика:',... '\bfЧисло измерений:',... '\bfВеличина стандартного отклонения функции откли-ка:.....'},... 'ИСХОДНЫЕ ДАННЫЕ',1,{'1,2,3,4,5,6,7,8','11,23,4,7,9','50','0.1'},options); % БАЗОВЫЕ ВЕКТОРЫ ВЫХОДА, ВХОДА, ЧИСЛО ИЗМЕРЕНИЙ, % СТАНДАРТНОЕ ОТКЛОНЕНИЕ Yb = str2num(char(yx(1))); Ub = str2num(char(yx(2))); r = str2num(char(yx(3))); s = str2num(char(yx(4))); %------------------------------------------------------------------- % ПРОВЕРКА ВВОДА ДАННЫХ if ( isempty(Yb) == 1 | isreal(Yb) == 0 | isinf(Yb) == 1 ) errordlg(sprintf('Значения функций должны составлять вектор действительных чисел'),'Ошибка ввода значений функций') return elseif ( min(size(Yb)) > 1 & max(size(Yb)) > 1 ) errordlg(sprintf('Значения функций должны составлять вектор, не матрицу'),'Ошибка ввода значений функций') return end %---------------------------------------------------------------- %% ПРИВЕДЕНИЕ К ВЕКТОРУ-СТРОКЕ [ry,vy] = size(Yb); if ( ry == 1 ) Yb = Yb; elseif ( ry > 1 ) Yb = Yb'; end if ( isempty(Ub) | ~isreal(Ub) | isinf(Ub) ) errordlg(sprintf('Значения аргументов должны составлять вектор действительных чисел'), ... 'Ошибка ввода значений аргументов') return elseif ( min(size(Ub)) > 1 & max(size(Ub)) > 1 ) errordlg('Значения аргументов функций должны составлять вектор, не матрицу','Ошибка ввода значений аргументов функций') return elseif ( isempty(find(Ub == 0)) == 0 ) errordlg(sprintf('Значения аргументов функций не должны быть нулевыми'),'Ошибка ввода значений аргументов') return end %-------------------------------------------------------------- %% ПРИВЕДЕНИЕ К ВЕКТОРУ-СТРОКЕ [ru,vu] = size(Ub); if ( ru == 1 ) Ub = Ub; elseif ( ru > 1 ) Ub = Ub'; end if ( isempty(r) | ~isreal(r) | isinf(r) | r <= 0 ) errordlg('Число измерений должно быть натуральным числом',... 'Ошибка ввода числа измерений') return elseif ( length(r) > 1 | r ~= round(r)) errordlg('Число измерений должно быть одним натуральным числом',... 'Ошибка ввода числа измерений') return elseif ( r <= length(Yb)*(length(Ub) + 1) ) errordlg(sprintf('Число измерений должно быть не меньше произведения числа функций на число аргументов плюс 1: больше %d',... length(Yb)*(length(Ub) + 1)), 'Ошибка ввода числа измерений') return end %----------------------------------------------------------------- if ( isempty(s) | ~isreal(s) | isinf(s) ) errordlg('Стандартное отклонение должно быть действительным числом',... 'Ошибка ввода стандартного отклонения') return elseif ( length(s) > 1 ) errordlg('Стандартное отклонение должно быть одним действительным числом','Ошибка ввода стандартного отклонения') return elseif ( s <= 0 ) errordlg('Стандартное отклонение должно быть больше нуля',... 'Ошибка ввода отклонения') return end %---------------------------------------------------------------- % % ЗАДАНИЕ r ИЗМЕРЕНИЙ ФУНКЦИЙ ОТКЛИКА Y = []; for k = 1 : length(Yb) for I = 1 : r Y(:,k) = Yb(k) + normrnd(0,s,r,1); end end % % ЗАДАНИЕ r ИЗМЕРЕНИЙ АРГУМЕНТОВ ФУНКЦИИ ОТКЛИКА X = []; for m = 1 : length(Ub) for J = 1 : r X(:,m) = Ub(m) + rand(r,1); end end %% ВВЕДЕНИЕ ФИКТИВНОГО АРГУМЕНТА, РАВНОГО ЕДИНИЦЕ X1 = [ones(r,1),X]; %% РАСЧЕТ ПАРАМЕТРОВ ФУНКЦИИ ОТКЛИКА B = (inv(X1'*X1)*X1'*Y)'; %% ВЫВОД РЕЗУЛЬТАТОВ fprintf('\n\t ИСХОДНЫЕ ДАННЫЕ ЭКСПЕРИМЕНТА:\n') fprintf('\t Вектор-строка значений функции отклика:\n') fprintf('\t %g',Yb) fprintf('\n') fprintf('\t Вектор-строка значений аргументов:\n') fprintf('\t %g',Ub) fprintf('\n') fprintf('\t Заданное число повторных измерений: r = %d\n',r) fprintf('\t Стандартное отклонение повторных измерений функций: s = %g\n',s) disp('-----------------------------------------------------------') fprintf('\t РЕЗУЛЬТАТЫ ПАССИВНОГО МНОГОМЕРНОГО ЭКСПЕРИМЕНТА\n') fprintf('\t ОЦЕНКА МАТРИЦЫ ПАРАМЕТРОВ:\n') disp(B) %% РАСЧЕТНЫЕ ЗНАЧЕНИЯ ФУНКЦИЙ Ybpac = B*[1,Ub]'; disp('------------------------------------------------------------') fprintf('\t СРАВНЕНИЕ ЗНАЧЕНИЙ ЗАДАННЫХ ФУНКЦИЙ И РАСЧЕТНЫХ:\n') disp([Yb' Ybpac]) disp('------------------------------------------------------------') helpdlg(sprintf('Результаты выполнения программы смотрите в командном окне'),'')
Пример выполнения программы без демонстрации диалоговых окон
ИСХОДНЫЕ ДАННЫЕ ЭКСПЕРИМЕНТА Вектор-строка значений функции отклика: 1 2 3 4 5 6 7 8 Вектор-строка значений аргументов: 11 23 4 7 9 Заданное число повторных измерений: r = 50 Стандартное отклонение повторных измерений функций: s = 0.1 ----------------------------------------------------------- РЕЗУЛЬТАТЫ ПАССИВНОГО МНОГОМЕРНОГО ЭКСПЕРИМЕНТА ОЦЕНКА МАТРИЦЫ ПАРАМЕТРОВ: -1.5280 -0.0296 0.0969 -0.0103 -0.0108 0.0767 3.1418 -0.0457 -0.0015 0.0794 -0.0597 -0.0519 2.2212 -0.0010 0.0370 -0.0022 0.0191 -0.0225 4.3340 -0.1121 0.0989 -0.0480 0.0087 -0.1287 1.3881 0.0194 0.0830 -0.0053 0.0519 0.1112 8.1169 -0.0406 -0.1085 0.0382 -0.0001 0.0760 9.9112 -0.0201 -0.0095 0.0651 -0.0843 -0.0143 8.1976 0.0707 -0.0004 -0.0371 -0.0408 -0.0563 ------------------------------------------------------------ СРАВНЕНИЕ ЗНАЧЕНИЙ ЗАДАННЫХ ФУНКЦИЙ И РАСЧЕТНЫХ: 1.0000 0.9483 2.0000 2.0366 3.0000 2.9832 4.0000 4.0865 5.0000 4.8532 6.0000 6.0105 9.0000 9.0124 8.0000 8.0252 ------------------------------------------------------------
Примечание. Обратите внимание на зависимость полученных результатов относительно задаваемого стандартного отклонения, применяемого для формирования повторных измерений функций отклика.
Задание 4
- Результат выполнения программы запишите в текстовый файл с именем compX.txt, где — номер компьютера, за которым выполняется лабораторная работа (1, 2, 3, ...).
- Дополните программу вычислением отдельных составляющих заданной многомерной функции отклика.
- Напишите фрагмент программы по расчету относительной и, возможно, абсолютной погрешности относительно заданных значений функций отклика.
- Рассчитайте остаточную сумму квадратов по составляющим функции отклика.
- Видоизмените программу для оценки параметров многомерной функции отклика для случая, когда в уравнениях отсутствуют свободные слагаемые .
Контрольные вопросы
- В чем заключается основная задача пассивного эксперимента?
- Что такое линейный регрессионный анализ?
- Что называется спектром плана в пассивном эксперименте?
- Как рассчитывается аппроксимирующий полином?
- Что называется факторным пространством?
- Когда применяется матрица плана с первым столбцом, состоящим из единиц?
- Когда существует единственное решение нормального уравнения?
- Какова размерность информационной матрицы в нормальном регрессионном уравнении?