Если нас не устраивают такие окна для ввода матриц данных, как в примере 2, то создадим несколько улучшенные (Рис.1.73).
Он отличается от рассмотренного в примере 2 своими функциями ввода и вывода данных.
Приведем список названий кнопок и их обозначений (тэгов) в программе (рис.1.73):
pushbutton1 Ввести размеры матрицы;
pushbutton2 Ввести новый элемент;
pushbutton3 Сохранить;
pushbutton4 Открыть.
Приведем список названий окон ввода / вывода и их обозначений (тэгов) в программе (рис.1.73):
edit1 число строк;
edit2 число столбцов;
edit3 значение (числовое) элемента матрицы при вводе;
edit4 номер строки матрицы, в которой расположен элемент;
edit5 номер столбца матрицы, в котором расположен элемент;
edit6 главное, самое большое окно ввода / вывода.
Рис.1.73. Интерфейс ввода-вывода и редактирования матрицы.
Сохранение данных в файл
% --- Executes on button press in pushbutton3. SAVE
function pushbutton3_Callback(hObject, eventdata, handles)
NumberRows=str2double(get(handles.edit1,'String'));
NumberColumns=str2double(get(handles.edit2,'String'));
Matrix=str2num(get(handles.edit6,'String')); % считывание матрицы из главного окна интерфейса
|
|
%OPEN FILE WT
[f,p]=uiputfile('C:\MATLAB701\work\Book1\Primer_Matr2D.txt','Окно выбора');
KudaZapisat=strcat(p,f);
f=fopen(KudaZapisat,'wt');
fprintf(f,'%d\t%d\n',NumberRows,NumberColumns);
%SAVE VALUES OF ARGUMENTS AND RESULTS
for i=1:NumberRows
for j=1:NumberColumns
fprintf(f,'%g\t',Matrix(i,j));
end
fprintf(f,'\n');
end
fclose(f);
end
Ввод матрицы пользователем в окне интерфейса.
Ввод размеров матрицы.
%Executes on button press in pushbutton1. INPUT MATRIX DIMENSIONS
function pushbutton1_Callback(hObject, eventdata, handles)
S=sprintf('%g',1);
set(handles.edit4,'String',S);
S=sprintf('%g',1);
set(handles.edit5,'String',S);
S=sprintf('%s',' ');
set(handles.edit6,'String',S);
end
Ввод нового элемента матрицы.
%Executes on button press in pushbutton2. INPUT NEW MATRIX ELEMENT
function pushbutton2_Callback(hObject, eventdata, handles)
NumberRows=str2double(get(handles.edit1,'String'));
NumberColumns=str2double(get(handles.edit2,'String'));
i=str2double(get(handles.edit4,'String')); % номер строки элемента матрицы
j=str2double(get(handles.edit5,'String')); % номер столбца элемента матрицы
Matrix=str2num(get(handles.edit6,'String')); % считать матрицу из главного окна
if i<=NumberRows
if j<=NumberColumns
Matrix(i,j)=str2double(get(handles.edit3,'String')); % считать новый элемент матрицы из окошка для него
S=mat2str(Matrix);
set(handles.edit6,'String',S); % вывести матрицу с учетом нового введенного элемента в главное окно интерфейса
if j<NumberColumns
b=j+1;
a=i;
else
b=1;
a=i+1;
end
S=sprintf('%g',a);
set(handles.edit4,'String',S); % вывести следующий номер строки
S=sprintf('%g',b);
set(handles.edit5,'String',S); % вывести следующий номер столбца
j=j+1;
S=sprintf('%s',' ');
set(handles.edit3,'String',S); % вывести пробел в окно для нового ввода элемента матрицы (то есть стереть предыдущий элемент в окне)
|
|
end
i=i+1;
end
end
Открытие из файла.
% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
[f,p]=uigetfile('C:\MATLAB701\work\Book1\Primer_Matr2D.txt','Окно выбора');
OtkudaChitat=strcat(p,f);
f=fopen(OtkudaChitat,'rt');
%chitat is faila matricu StehiometrMatrix(n,m)
n=fscanf(f,'%d',1);
m=fscanf(f,'%d',1);
for i=1:n
for j=1:m
Matrix(i,j)=fscanf(f,'%g',1);
end
end
fclose(f);
S=mat2str(Matrix);
set(handles.edit6,'String',S);
S=n;
set(handles.edit1,'String',S);
S=m;
set(handles.edit2,'String',S);
end
ГЛАВА 2. ЗАДАЧИ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ