value must be a double scaler

12 Ansichten (letzte 30 Tage)
Mohamed Rashed
Mohamed Rashed am 7 Mär. 2021
Bearbeitet: Aghamarsh Varanasi am 12 Mär. 2021
so I am trying to make a cubic equation calculater in matlab but i keep getting the error :
Error using matlab.ui.control.internal.model.AbstractNumericComponent/set.Value (line 111)
'Value' must be a double scalar.
I am really not sure what it means but here is the code:
vala = app.a.Value;
valb = app.b.Value;
valc = app.c.Value;
vald = app.d.Value;
zz1 =(-valb/3*vala)-(1/3*vala)*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald+sqrt(2*valb^3-9*vala*valb*valc+27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3-(1/3*vala)*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald-sqrt(2*valb^3-9*vala*valb*valc-27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3;
zz2 =(-valb/3*vala)+(1+1i*sqrt(3)/6*vala*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald+sqrt(2*valb^3-9*vala*valb*valc+27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3)+(1-1i*sqrt(3)/6*vala)*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald-sqrt(2*valb^3-9*vala*valb*valc+27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3;
zz3 =(-valb/3*vala)+(1-1i*sqrt(3)/6*vala*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald+sqrt(2*valb^3-9*vala*valb*valc+27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3)+(1+1i*sqrt(3)/6*vala)*(0.5*(2*valb^3-9*vala*valb*valc+27*vala^2*vald-sqrt(2*valb^3-9*vala*valb*valc+27*vala^2*vald)^2-(4*valb^2-3*vala*valc)^3)^0.5)^1/3;
app.x1.Value =zz1;
app.x2.Value =zz2;
app.x3.Value =zz3;
p.s if you know any simpler ways that would be big help
  7 Kommentare
Mohamed Rashed
Mohamed Rashed am 8 Mär. 2021
do you maybe now where i could find how to display an error message on the app aswell like if someone puts in the polynomial x^2+x+1 or other impossible equations?
Walter Roberson
Walter Roberson am 8 Mär. 2021
"puts in the polynomial x^2+x+1" -- puts in how? Are you expecting that app.b.Value will be a formula instead of a numeric value? If you are expecting a numeric value, then App Designer permits constructing a numeric edit field that does not permit arbitrary text.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Aghamarsh Varanasi
Aghamarsh Varanasi am 12 Mär. 2021
Bearbeitet: Aghamarsh Varanasi am 12 Mär. 2021
Hi Rashed,
As suggested by Walter, you can use the root function in MATLAB to find the roots of a cubic polynomial.
From the error that you have mentioned, it seems that you are using a Edit Field (numeric) for x1, x2 and x3. As you are solving a cubic equation, there might be a chance that the root could be a complex number. As a workaround I would suggest you to use Edit Field (Text) of MATLAB App Designer for fields x1, x2 ,x3 and use num2str to convert the roots to string.
So the code would be:
vala = app.a.Value;
valb = app.b.Value;
valc = app.c.Value;
vald = app.d.Value;
p = [vala valb valc vald];
r = root(p);
% here x1, x2 and x3 are Edit Field (Text)
app.x1.Value = num2str(r(1));
app.x2.Value = num2str(r(2));
app.x3.Value = num2str(r(3));
Hope this helps

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by