Where is the error in my code?

1 visualización (últimos 30 días)
Abdallah Qaswal
Abdallah Qaswal el 7 de Jun. de 2022
Comentada: Voss el 7 de Jun. de 2022
I am trying to plot three variables Q,R,W using surf function, but I get this error message : Error using surf (line 71)
Z must be a matrix, not a scalar or vector.
Error in time1 (line 13)
surf(R,W,Q)
here is my code that I am trying to run:
r = 0:0.07;
w = 0:4;
[R,W] = meshgrid(r,w);
V1 = @(R,W) -acosh(10*(W./(1600*R + 21))^(1/2))/20000000000
V2 = @(R,W) acosh(10*(W./(1600*R + 21))^(1/2))/20000000000
fun = @(x,R,W)0.0018./((W./((cosh(10^10.*x./0.5)).^2)-(R.*16+0.21)).^0.5);
q = @(R,W) integral(@(x)fun(x,R,W),V1(R,W),V2(R,W));
Q = arrayfun(q,R,W)
surf(R,W,Q)
where is the error, please?
Many thanks

Respuesta aceptada

Voss
Voss el 7 de Jun. de 2022
Check the value of r:
r = 0:0.07
r = 0
It is a scalar wth value 0 because the colon operator ":" uses an increment of 1 by default. Since 0.07 - 0 < 1, you get just 0.
Perhaps you meant to use a smaller increment:
r = 0:0.01:0.07
r = 1×8
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700
Then the rest of the code runs:
w = 0:4;
[R,W] = meshgrid(r,w);
V1 = @(R,W) -acosh(10*(W./(1600*R + 21))^(1/2))/20000000000;
V2 = @(R,W) acosh(10*(W./(1600*R + 21))^(1/2))/20000000000;
fun = @(x,R,W)0.0018./((W./((cosh(10^10.*x./0.5)).^2)-(R.*16+0.21)).^0.5);
q = @(R,W) integral(@(x)fun(x,R,W),V1(R,W),V2(R,W));
Q = arrayfun(q,R,W);
surf(R,W,Q)
  2 comentarios
Abdallah Qaswal
Abdallah Qaswal el 7 de Jun. de 2022
Thank you very much!
It works ! much appreciated!
Voss
Voss el 7 de Jun. de 2022
You're welcome!

Iniciar sesión para comentar.

Más respuestas (2)

Les Beckham
Les Beckham el 7 de Jun. de 2022
Editada: Les Beckham el 7 de Jun. de 2022
You need to specify an increment size if you expect r to be a vector. Currently it is a scalar equal to zero. Q will not be a 2d array if r is a scalar. Thus the error from surf.
r = 0:0.07
r = 0
Maybe you want something like this?
r = 0:0.01:0.07
r = 1×8
0 0.0100 0.0200 0.0300 0.0400 0.0500 0.0600 0.0700

Chris
Chris el 7 de Jun. de 2022
Editada: Chris el 7 de Jun. de 2022
The colon operator has a default spacing of 1.
r = 0:0.07
gives:
0,
% next value...
1 > 0.07 % so r = [0]
Use an intermediate step value, if you want:
r = 0:0.01:0.07;

Categorías

Más información sobre Graphics Objects en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by