GUI derivative calculator, issues with coding portion

조회 수: 15 (최근 30일)
William Fantin
William Fantin 2019년 5월 6일
답변: Raag 2025년 2월 5일
Hello All,
I am trying to do my final MATLAB project and it involves creating a GUI that can handle second order differential equations. Firstl I have been trying to figure out how to make a simple derivative GUI calculator, one that can handle something from the user say 4X and when a button is pushed will spit out its derivite, 4. So far I have made the GUI and have been trying to add some code. I am new to MATLAB and some of the errors are confusing. I will post parts of the code along with my logic below:
let me define some things to make it easier to understand.
I have an edit text box whose tag line is FCN (this is the box the user will enter the derivative that needs to be taken)
I have a push button whose tag line is equal
I have a static text box whose tag line is first (this is where the answer will pop out)
I wrote a few lines of code under the equal callback:
function equalPushButton_Callback(hObject, eventdata, handles)
% hObject handle to equalPushButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
syms x
a=get(handles.FCN,'string'));
b=str2sym(diff(a)); %Or b=double(b)?
set(handles.first,'string',sym2num(b));
I am wondering if someone can steer me in the right direction
Thanks
  댓글 수: 3
William Fantin
William Fantin 2019년 5월 7일
Sure, so i did some more research and now my code is different. I have my program where if I type in x it will give the derivative of 1. But when I type say 4*x it will give an error. Heres the code:
function varargout = Test5(varargin)
% TEST5 MATLAB code for Test5.fig
% TEST5, by itself, creates a new TEST5 or raises the existing
% singleton*.
%
% H = TEST5 returns the handle to a new TEST5 or the handle to
% the existing singleton*.
%
% TEST5('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in TEST5.M with the given input arguments.
%
% TEST5('Property','Value',...) creates a new TEST5 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Test5_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Test5_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Test5
% Last Modified by GUIDE v2.5 05-May-2019 12:47:09
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Test5_OpeningFcn, ...
'gui_OutputFcn', @Test5_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
% End initialization code - DO NOT EDIT
% --- Executes just before Test5 is made visible.
function Test5_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Test5 (see VARARGIN)
% Choose default command line output for Test5
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Test5 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Test5_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function FCN_Callback(hObject, eventdata, handles)
% hObject handle to FCN (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of FCN as text
% str2double(get(hObject,'String')) returns contents of FCN as a double
% --- Executes during object creation, after setting all properties.
function FCN_CreateFcn(hObject, eventdata, handles)
% hObject handle to FCN (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit 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 button press in equalPushButton.
function equalPushButton_Callback(hObject, eventdata, handles)
% hObject handle to equalPushButton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
f=get(handles.FCN,'String')'
syms x
der=diff(f,x)
set(handles.first,'String',char(der));
Thanks!!
Murugan C
Murugan C 2019년 5월 8일
Hi
I think, we shouldn't use "syms" for derivative .we have create one more edit box for getting derivative as like below,
f = get(handles.FCN,'String');
x = str2double(get(handles.derivative,'String')); % derivative order
der=diff(f,x);
set(handles.first,'String',char(der));

댓글을 달려면 로그인하십시오.

답변 (1개)

Raag
Raag 2025년 2월 5일
Hi William,
The issue seems to be arising from using the ‘syms’ function within the callback. This function modifies the base workspace in a manner that is incompatible with the static nature of the GUI workspace. As a workaround, str2sym function can be used to resolve the workspace issue.
Follow these steps to resolve the workspace issue:
  • Use ‘str2sym’ function: which converts the input string into a symbolic expression without the need to define ‘syms x’. Usage of this function resolves the workspace issue, while taking input from the user.
  • Differentiation: use diff(f_sym, 'x') to compute the derivative of the expression, where f_sym is the symbolic form of the user's input.
Here is an example code snippet for the above-mentioned workaround:
function equalPushButton_Callback(hObject, eventdata, handles)
% Get the input from the edit text box
f = get(handles.FCN, 'String');
try
% Convert the input string to a symbolic expression
f_sym = str2sym(f);
% Calculate the derivative with respect to 'x'
der = diff(f_sym, 'x');
% Display the derivative in the static text box
set(handles.first, 'String', char(der));
catch
% Display an error message if the input is invalid
set(handles.first, 'String', 'Error: Invalid input');
end
end
For more information on ‘str2sym’ function, refer to this documentation:

카테고리

Help CenterFile Exchange에서 Calculus에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by