Метод Адамса
10.06.2013, 16:05. Показов 2996. Ответов 2
здравствуйте помогите доделать программу с интерфейсом, на старом матлабе она идёт на версии 6.5 и 7, а на 2012 не хочет, нужно чтобы работала на 2012.
Matlab M | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
| function varargout = Lab3 (varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @ Lab3_OpeningFcn, ...
'gui_OutputFcn', @ Lab3_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function Lab3_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = Lab3_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
x(1)=handles.metricdata.x0;
u=handles.metricdata.xn;
i=1;
h=handles.metricdata.h;
while x(i)<u
x(i+1)=x(i)+h;
i=i+1;
end
handles.metricdata.x=x;
f=handles.metricdata.Fx;
y(1)=handles.metricdata.Yo;
for i=2:length(x)
if i-1>0
df=f(i)-f(i-1);
else
df=0;
end
if i-2>0
d2f=f(i)-2*f(i-1)+f(i-2);
else
d2f=0;
end
if i-3>0
d3f=f(i)-3*f(i-1)+3*f(i-2)-f(i-3);
else
d3f=0;
end
y(i)=y(i-1)+h*f(i-1)+(((h.^2)/2)*df)+(((5*h.^3)/12)*d2f)+(((3*h.^4)/8)*d3f);
end
handles.metricdata.y = y;
guidata(hObject,handles)
axes(handles.axes1);
cla;
g=plot(x,y);
handles.g=g;
function pushbutton2_Callback(hObject, eventdata, handles)
e(1,:)=handles.metricdata.x;
e(2,:)=handles.metricdata.y;
d=uiputfile('*.txt','Save Workspace As');
dlmwrite(d,e,'delimiter', '\t', 'precision', 6);
function pushbutton3_Callback(hObject, eventdata, handles)
initialize_gui(gcbf, handles, true);
function initialize_gui(fig_handle, handles, isreset)
if isfield(handles, 'metricdata') && ~isreset
return;
end
handles.metricdata.x0 = 0;
handles.metricdata.xn = 0;
handles.metricdata.h = 0;
handles.metricdata.Fx = 0;
set(handles.x0, 'String', handles.metricdata.x0);
set(handles.xn, 'String', handles.metricdata.xn);
set(handles.h, 'String', handles.metricdata.h);
set(handles.Fx, 'String', handles.metricdata.Fx);
cla;
function Yo_Callback(hObject, eventdata, handles)
Yo = str2num(get(hObject, 'String'));
handles.metricdata.Yo = Yo;
guidata(hObject,handles)
function Yo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function h_Callback(hObject, eventdata, handles)
h = str2num(get(hObject, 'String'));
handles.metricdata.h = h;
guidata(hObject,handles)
function h_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function Fx_Callback(hObject, eventdata, handles)
F = get(hObject, 'String');
Fx=inline(F);
handles.metricdata.Fx = Fx;
guidata(hObject,handles)
function Fx_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function xn_Callback(hObject, eventdata, handles)
xn = str2num(get(hObject, 'String'));
handles.metricdata.xn = xn;
guidata(hObject,handles)
function xn_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function x0_Callback(hObject, eventdata, handles)
x0 = str2num(get(hObject, 'String'));
handles.metricdata.x0 = x0;
guidata(hObject,handles)
function x0_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function pushbutton4_Callback(hObject, eventdata, handles)
exit
function pushbutton5_Callback(hObject, eventdata, handles)
helpdlg(' Данная программа позволяет решить обыкновенное дифференциальное уравнение многошаговым методом Адамса. Имея в распоряжении отрезок, на котором будет считаться дифференциал, закон распространения значений правой части и начальное значение дифференциального уравнения. Например: имеется функция f(x), х0, шаг, хn и Y(x0), многошаговый метод Адамса позволяет вычислить последующие значения дифференциального уравнения на заданном отрезке. ДЛЯ РАСЧЕТА НЕОБХОДИМО:
1) Ввести поле "x0" начальное значения x от которого начнутся вычисления, в поле "xn" ввести последнее значение x, до которого будут ввестись подсчеты и ввести в поле "h" шаг, который будет показывать точность измерений. В поле "Yo" записываем первое значение дифференциального уравнения при x0.
2) В поле f(x) введите закон распределения правой части дифференциального уравнения (не забудьте перед / и ^ ставить. Закон распределения нужно вводить через переменную x.)
3) Нажать на кнопку "Рассчитать" (искомое значение отобразиться на графике). ПРИМЕЧАНИЕ: При нажатии на кнопку "Обнулить все поля", во всех полях будут значения равные нулю, т.е. произойдет сброс введенных данных. Можно сохранить результат, нажав на кнопку "Сохранить", при её нажатии появится "окно-проводник", где можно по своему усмотрению выбрать место для сохранения и имя сохраняемого файла. При нажатии кнопки "Выход" программа заканчивает свою работу и выходит из неё.', ' Справка'); |
|
Добавлено через 2 часа 31 минуту
получилось)
Matlab M | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
| function varargout = untitled1(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled1_OpeningFcn, ...
'gui_OutputFcn', @untitled1_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
function untitled1_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = untitled1_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function pushbutton1_Callback(hObject, eventdata, handles)
xostr=get(handles.xo,'String');
xo=str2num(xostr);
x(1)=xo
yostr=get(handles.yo,'String');
yo=str2num(yostr);
y(1)=yo
xnstr=get(handles.xn,'String');
xn=str2num(xnstr);
u=xn
hstr=get(handles.shag,'String');
h=str2num(hstr);
i=1;
while x(i)<u
x(i+1)=x(i)+h;
i=i+1;
end
fstr=get(handles.vvodf,'String');
f=inline(fstr);
for i=2:length(x)
if i-1>0
df=f(i)-f(i-1);
else
df=0;
end
if i-2>0
d2f=f(i)-2*f(i-1)+f(i-2);
else
d2f=0;
end
if i-3>0
d3f=f(i)-3*f(i-1)+3*f(i-2)-f(i-3);
else
d3f=0;
end
y(i)=y(i-1)+h*f(i-1)+(((h.^2)/2)*df)+(((5*h.^3)/12)*d2f)+(((3*h.^4)/8)*d3f);
end
y
plot(x,y)
set(handles.x,'String',x)
set(handles.y,'String',y)
set(handles.grafik,'Visible','on')
set(handles.x,'Visible','on')
set(handles.y,'Visible','on')
set(handles.pushbutton2,'Visible','on')
function pushbutton2_Callback(hObject, eventdata, handles)
set(handles.xo,'String','');
plot(0,0);
set(handles.yo,'String','');
set(handles.xn,'String','');
set(handles.shag,'String','');
set(handles.vvodf,'String','');
set(handles.x,'String','');
set(handles.y,'String','');
set(handles.grafik,'Visible','off')
set(handles.x,'Visible','off')
set(handles.y,'Visible','off')
function pushbutton3_Callback(hObject, eventdata, handles)
button = questdlg('Вы уверены, что хотите выйти?','Выход','Да','Нет','Нет');
switch button
case 'Да',
delete(gcf);
case 'No',
quit cancel;
end
function pushbutton4_Callback(hObject, eventdata, handles)
helpdlg(' Данная программа позволяет решить обыкновенное дифференциальное уравнение многошаговым методом Адамса. Имея в распоряжении отрезок, на котором будет считаться дифференциал, закон распространения значений правой части и начальное значение дифференциального уравнения. Например: имеется функция f(x), х0, шаг, хn и Y(x0), многошаговый метод Адамса позволяет вычислить последующие значения дифференциального уравнения на заданном отрезке. ДЛЯ РАСЧЕТА НЕОБХОДИМО:1) Ввести поле "x0" начальное значения x от которого начнутся вычисления, в поле "xn" ввести последнее значение x, до которого будут ввестись подсчеты и ввести в поле шаг, который будет показывать точность измерений. В поле "Yo" записываем первое значение дифференциального уравнения при x0.2) В поле f(x) введите закон распределения правой части дифференциального уравнения (Закон распределения нужно вводить через переменную x.)3) Нажать на кнопку "Вычислить" (искомое значение отобразиться на графике). ПРИМЕЧАНИЕ: При нажатии на кнопку "Сброс", во всех полях стерутся данные, т.е. произойдет сброс введенных данных.При нажатии кнопки "Выход" программа заканчивает свою работу и выходит из неё.', ' Справка');
function vvodf_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function vvodf_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function yo_Callback(hObject, eventdata, handles)
function yo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function xo_Callback(hObject, eventdata, handles)
function xo_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function xn_Callback(hObject, eventdata, handles)
function xn_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function shag_Callback(hObject, eventdata, handles)
function shag_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in y.
function y_Callback(hObject, eventdata, handles)
% hObject handle to y (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns y contents as cell array
% contents{get(hObject,'Value')} returns selected item from y
% --- Executes during object creation, after setting all properties.
function y_CreateFcn(hObject, eventdata, handles)
% hObject handle to y (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in x.
function x_Callback(hObject, eventdata, handles)
% hObject handle to x (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns x contents as cell array
% contents{get(hObject,'Value')} returns selected item from x
% --- Executes during object creation, after setting all properties.
function x_CreateFcn(hObject, eventdata, handles)
% hObject handle to x (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: listbox controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end |
|
0
|