フィルターのクリア

MATLAB GUI does not work for others

8 ビュー (過去 30 日間)
Tim Schaller
Tim Schaller 2023 年 7 月 17 日
コメント済み: Walter Roberson 2023 年 7 月 20 日
Hi there,
I created a MATLAB GUI as a task at my university. The problem is, that if perfectly works when I am starting it by pressing the "Calculate"-Button on my Interface, but for my friend it somehow does not work. First I thought that the problem was that he needed to Install a special toolbox, but even now it is showing errors.
I coded the program in MTALAB R2021a and he even upgraded his MATLAB R2017 to the newest one, but that did not help.
Mayba anybody knows the origin of the mistake. My complete code is in the file "bachelor", "arclength" is a tool that is used in the code.
I tried using the online Version of MATLAB, but the same errors occurred. I can't think of any reason why this would happen.
The errors shown in the command window are shown below:
Unable to perform assignment because the indices on the left side are not compatible with the size of the right
side.
Error in sym/privsubsasgn (line 1168)
L_tilde2 = builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);
Error in indexing (line 999)
C = privsubsasgn(L,R,inds{:});
Error in bachelor>pushbutton_Callback (line 60)
tnum(i) = vpasolve(snum(i)==s(t),t);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in bachelor (line 16)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)bachelor('pushbutton_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
I really hope, that somebody can help me.
Thanks in advance!
  2 件のコメント
Image Analyst
Image Analyst 2023 年 7 月 17 日
I couldn't run it either. It requires the Symbolic Toolbox. You forgot to add that when you posted, so I'll add it to the product list at the right so no one else wastes their time.
Tim Schaller
Tim Schaller 2023 年 7 月 18 日
Perfect, thank you!

サインインしてコメントする。

回答 (3 件)

Walter Roberson
Walter Roberson 2023 年 7 月 18 日
The work-around is to change
tnum(i) = vpasolve(snum(i)==s(t),t);
to
tnum(i) = vpasolve(snum(i)-s(t),t);
snum(i) happens to be 0 the first time around, so the original equation is trying to solve 0 == s(t) . For reasons that are not currently clear to me, vpasolve() is happy to deal with vpasolve(s(t)) but not with vpasolve(s(t)==0)
K>> simplify(snum(i)==s(t))
ans =
4*5^(1/2)*log((5*t^2 - 2*t + 1)^(1/2) + (5^(1/2)*(5*t - 1))/5) + 50*(t/2 - 1/10)*(5*t^2 - 2*t + 1)^(1/2) == 4*5^(1/2)*log(1 - 5^(1/2)/5) - 5
K>> simplify(snum(i)-s(t))
ans =
16*5^(1/2)*log(1 - 5^(1/2)/5) - 16*5^(1/2)*log((5*t^2 - 2*t + 1)^(1/2) + (5^(1/2)*(5*t - 1))/5) - 200*(t/2 - 1/10)*(5*t^2 - 2*t + 1)^(1/2) - 20
Notice the simplify() of the == form results in an == with a non-zero comparison. If vpasolve() is internally doing that kind of simplify() and then applying vpa() to the two sides, then the numeric solution is not at exactly 0 because of round-off error. I do not know if that has anything to do with the problem.
Anyhow, vpasolve(snum(i)==s(t),t) is failing even if you give it the hint of 0 (the actual solution) whereas vpasolve(snum(i)-s(t),t) works fine.
  3 件のコメント
Harald
Harald 2023 年 7 月 18 日
Nice finding, Walter!
Walter Roberson
Walter Roberson 2023 年 7 月 18 日
When you solve or vpasolve an expression that has no relation operators then it is implied that you are asking to solve the expression == 0. But that also means that if you have A==B that you can subtract B from both sides to get A-B==B-B which is A-B==0 and then take advantage of the implied ==0 by asking to solve A-B. So in theory you are not changing the equation. In practice in this case vpasolve is treating the two cases differently, and it is not clear why that is the case.

サインインしてコメントする。


Rafael
Rafael 2023 年 7 月 20 日
The root cause is that whereas the "int" call returned an unevaluated expression in R2021a, "int" is able to solve this in later releases and returns a piecewise function. Unfortunately, "vpasolve" has problems with this function. So, the workflow breaks because int in the 23a version or later evaluates the integral, but the "vpasolve" function cannot calculate a solution for this function. As a workaround, you can use the vpaintegral function or set “Hold”, true in the int command.
  1 件のコメント
Walter Roberson
Walter Roberson 2023 年 7 月 20 日
... but this does not answer to the question of why vpasolve(snum(i)==s(t),t) fails but vpasolve(snum(i)-s(t),t) succeeds, since piecewise() is involved either way.

サインインしてコメントする。


Harald
Harald 2023 年 7 月 17 日
編集済み: Harald 2023 年 7 月 17 日
Hi Tim,
When I open the GUI and hit calculate without changing any setting, it works fine for me in R2021a but I can reproduce the error in R2023a.
In R2023a, the problem is that vpasolve cannot find a solution, and you'd try to assign an empty array to a value. Since vpasolve was able to find a solution in R2021a and a plot of s(t) shows that the function is well-behaved, this may be a bug in vpasolve in R2023a and I therefore suggest that you contact the Technical Support of MathWorks.
Best wishes,
Harald
  3 件のコメント
Walter Roberson
Walter Roberson 2023 年 7 月 18 日
One to two working days for a reply is typical.
Tim Schaller
Tim Schaller 2023 年 7 月 18 日
Okey, thanks.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by