How can I write division formula in label of matlab app designer?
48 views (last 30 days)
Show older comments
Hello everyone,
I have a problem about my matlab app designer label thing. I want to write a formula in the label but I have parameters that calculated before. I use fuzzy in the app, thus I have parameters like for example K_4 = output4(1);
and I have a formula that is Precision Model function that contains these parameters. Precision Model,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/695164/image.png)
this is the sample of the app and you can see the FH(s) function. We created this with labels and used division image,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/695169/image.png)
I want to write this function in the label form without using divison image. I found something like
app.Label.Text = '$$\frac{( numerator}{denominator}';
app.Label.Interpreter = 'latex';
But I cannot find how I can write my calculated parameters in this? If I wrote K_4 for example (like app.Label.Text = '$$\frac{( K_4}{denominator}';), it gets this as string.
Can you help me please?
3 Comments
dpb
on 26 Jul 2021
Edited: dpb
on 26 Jul 2021
Well, you've got to write the string with compose or similar to substitute variables into the expression where they belong. It gets messy; write small pieces at a time and string them together to build to final result.
Another way to do such things is to build a template string that has embedded in it the space for a given size of number string and then do character substitution into those locations. That requires that the numbers will always fit into the given spaces, of course.
Start by getting a test expression to work with hardcoded numbers to work out the LaTex formula stuff; then you can work in the variables into that expression.
Good luck; my experiences w/ LaTex in MATLAB have been mostly frustrating ones...but I have no expertise in the area.
Accepted Answer
dpb
on 26 Jul 2021
Edited: dpb
on 26 Jul 2021
The above LaTex string is bad syntax -- here's a simplified illustration of what is needed -- your expression is far more complex; I'm not even going to attempt to encode it. Not that it's not doable, it's just a lot of tedium.
I'll illustrate writing a variable into an output string that will write a fraction --
fracfmt='$$\\frac{%.2f}{%s}$$'; % format template -- numerator a number, denominator a string
num=pi; % variables holding numerator to plug into format - numeric
den='\pi'; % and string is what is expected by format expression
strtowrite=sprintf(fracfmt,num,den); % build a fraction string with numerator, denominator
hAx=axes; % an axes object
hAx.XLabel.Interpreter='latex'; % set interpreter
xlabel(strtowrite) % and write our fancy string there...
This results in
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/695719/image.jpeg)
Your mission, should you choose to undertake it, is to write the appropriate formatting string into which you can insert the necessary variables' values by use thereof as illustrated.
It can be whatever it needs be, of course, I just illustrated one small piece; depending upon how much of the above equation you intend to make dynamic, it could be a bunch of values must be passed.
NB: The example code you posted is bad syntax -- perhaps you tried to just copy a subsection of a much longer expression, but it has a spurious "(" in the beginning and is missing the closing matching "$$"
Then there's the deal about whether to use "$" or "$$" that has to do with internals of LaTeX beyond what I understand the difference -- other than I note that if use only single "$" here, the font size is much smaller for some reason.
All that is for a LaTeX guru, not i...
Good luck, undoubtedly you'll need it and much patience!!!
5 Comments
dpb
on 28 Jul 2021
Edited: dpb
on 28 Jul 2021
You can string together as many and whatever formatting strings you need in whatever order and with what other literal text is wanted/needed. You just need to then pass the right number and type of arguments to match.
See <formatting-strings> for all the details. You are not limited in any way in number and/or type and/or ordering in any given formatting string up to the limit of complexity you can manage to keep straight--hence the suggestion to build up complex expressions piecewise instead of trying to do all at once.
K=0.95; M=7.0493; E=-1.14;
fmt=['%0.2f*{%0.3fs + 1)*exp(%0.2fs)'];
s=sprintf(fmt,K,M,E)
To this, of course, you have to also insert the proper LaTex commands in the proper order to control fonts, etc., etc., -- like undoubtedly you would want to write the exponential as e with a superscripted exponent expression rather than as expanded text.
Again, it's all doable, but will be tedious to build the templates. But, as long as the form of the equation doesn't change, once it's built it's trivial to pass different numbers in; it's building and debugging the template that's the challenge--which again, is just tedious paying attention to the details and ensuring keep proper overall LaTeX syntax so the interpreter can parse it.
dpb
on 28 Jul 2021
K=0.95; M=7.0493; E=-1.14;
fmt=['$$%0.2f*(%0.3fs + 1)*e\\textsuperscript {%0.2fs}$$'];
s=sprintf(fmt,K,M,E);
hAx=axes;
hTxt=text(0.1,0.7,s,'interpreter','latex');
produced
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/697537/image.jpeg)
which exceeds my knowledge of LaTeX -- I had to look up \textsuperscript. Hopefully you're well acquainted with it.
More Answers (0)
See Also
Categories
Find more on Fuzzy Logic in Simulink in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!