How to plot function from m file with vectors
    4 views (last 30 days)
  
       Show older comments
    
Hello I have this function in my m file
function F = A(x)
F = 2 * x(1)^2 - x(2)^2;
end
and I want to plot this function but I have no idea how to do this. I tried fplot(@(x)A(x)) but I got this error
Warning: Function behaves unexpectedly on array inputs. To improve performance,
properly vectorize your function to return an output with the same size and shape as
the input arguments. 
> In matlab.graphics.function.FunctionLine>getFunction
  In matlab.graphics.function.FunctionLine/updateFunction
  In matlab.graphics.function.FunctionLine/set.Function_I
  In matlab.graphics.function.FunctionLine/set.Function
  In matlab.graphics.function.FunctionLine
  In fplot>singleFplot (line 234)
  In fplot>@(f)singleFplot(cax,{f},limits,extraOpts,args) (line 193)
  In fplot>vectorizeFplot (line 193)
  In fplot (line 163) 
Warning: Error updating FunctionLine.
   The following error was reported evaluating the function in FunctionLine update:
   Index exceeds array bounds.
0 Comments
Answers (2)
  Star Strider
      
      
 on 21 May 2018
        First, vectorizing will help:
F = 2 * x(1).^2 - x(2).^2;
Second, you are confusing fplot, since it does not know what to do with a bivariate function.  A solution is to use fsurf (or fmesh), and create ‘A’ as a function of two variables (which it actually is):
figure(1)
fsurf( @(x1,x2) A([x1,x2]), [-1 1  -1 1] )
The plot then works. The warning continues to appear for some reason. You can safely ignore it.
3 Comments
  Star Strider
      
      
 on 21 May 2018
				My pleasure.
If my Answer helped you solve your problem, please Accept it!
  phoenix
 on 23 May 2018
				Hello Star Strider, Your comments are not showing.Please tell why 2^18 is used in freqz(nz,dz,2^18)?
  Abraham Boayue
      
 on 21 May 2018
        
      Edited: Abraham Boayue
      
 on 21 May 2018
  
      If x is a vector (1×N), then F must be a function of x, write F = x.^2 in this case. Else if x is a matrix (2×N) containing two vectors, x1 and x2, then F must be a function of two variables. You should write F = 2x1-x2;
Plotting F in case 1
N = 200; 
x = -2:4/(N-1):2;
F = A(x); 
Plot (x,F,'linewidth ',2);
Plotting F for case 2
First modify your function as 
function F = A (x1, x2)
F = 2*x1.^2-x2.^2; 
end
N = 200; 
x1 = 0:2/(N-1):2; 
x2 = -2:4/(N-1):2;
[x1,x2]= meshgrid(x1,x2);
F = A (x1, x2); 
mesh  (x1, x2, F)
0 Comments
See Also
Categories
				Find more on Surface and Mesh Plots 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!


