Defining a Function in MATLAB M-file: Troubleshooting Error

Click For Summary

Discussion Overview

The discussion revolves around troubleshooting errors encountered while defining and using functions in MATLAB m-files. Participants explore issues related to input arguments, function definitions, and vector operations within the context of MATLAB programming.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Homework-related
  • Mathematical reasoning

Main Points Raised

  • One participant describes an error message indicating that the input argument 'x' is undefined when attempting to define a function in MATLAB.
  • Another participant suggests that additional variables such as 'k', 'c', and 'T' need to be defined for the function to work properly, and questions whether the return variable should be 'y' instead of 'f'.
  • A participant mentions that MATLAB requires the use of the element-wise power operator (.^) when raising each element of a vector to a power.
  • There is a discussion about the need to define 'x' as a vector and the correct way to call the function within a loop.
  • One participant finds that using '@f' in the function call resolves the issue, indicating the need for function handles in MATLAB.
  • Another participant expresses curiosity about the name "MATLAB" and receives an explanation that it stands for "Matrix Laboratory."
  • Additional posts introduce unrelated MATLAB code snippets and errors, indicating a broader context of programming challenges faced by participants.

Areas of Agreement / Disagreement

Participants express various viewpoints on how to resolve the input argument issue, with some suggesting different approaches to defining and using functions. There is no consensus on a single solution, as multiple methods are proposed and explored.

Contextual Notes

Limitations include unresolved definitions of variables and potential misunderstandings regarding function handles and vector operations in MATLAB. Some participants do not provide complete context for their code snippets, which may lead to further confusion.

Who May Find This Useful

This discussion may be useful for individuals learning MATLAB programming, particularly those encountering issues with function definitions, input arguments, and vector operations.

JohanL
Messages
154
Reaction score
0
Im trying to define a function in a MATLAB m-file.

function y = f(x)
global T;

f = 1/(x^5*(exp(h*c/(k*x*T))-1));

but it doesn't work...matlab says

? Input argument 'x' is undefined.

Error in ==> D:\Program\matlab\work\f.m
On line 6 ==> y = 1/(x^5*(exp(h*c/(k*x*T))-1));

Error in ==> D:\Program\matlab\work\a.m
On line 14 ==> lmax(i)=fminbnd(-f,0,1*10^(-6));
 
Physics news on Phys.org
By the looks of it, you need to define more than just x; k, c and T for example. Also did you mean to type "y =..." and not "f = ..."? 'y' is your return variable.

Edit: try sending in the values in the command window, too. In this case: var = f(3), assuming that your function takes in an interger.
 
Last edited:
JohanL said:
Im trying to define a function in a MATLAB m-file.

function y = f(x)
global T;

f = 1/(x^5*(exp(h*c/(k*x*T))-1));

but it doesn't work...matlab says

? Input argument 'x' is undefined.

Error in ==> D:\Program\matlab\work\f.m
On line 6 ==> y = 1/(x^5*(exp(h*c/(k*x*T))-1));

Error in ==> D:\Program\matlab\work\a.m
On line 14 ==> lmax(i)=fminbnd(-f,0,1*10^(-6));


Yes, you are doing some things wrong.
if you define a function in a m file like this:
function y = f(x)
then x is the input, y is the output and f is the name of the function (you also have to save the m-file as f.m), so what does that mean, let's say your m-file is like this:

function y = f(x)

y = x^2 + 5x;

then you can use this function by typing in the command window:
f(3)
if you do that you will get the reply:
ans = 24

What has happened? Well Matlab saw that you called a function that is named f it sees that this function exists in the file f.m and it sees that what the function should do is: square the input (in this case 3) add 5 times the input to this and assign the result to y
(that is what you defined by the line: y = x^2 + 5)
Matlab also sees that you want to output y
(that is what you have defined by the line: function y = f(x) )
so Matlab will calculate y (in this case 24) and output that
 
Thank you for your answers. But it I can't figure it out.

It works fine when i type f(3) in the command window.

Do i have to declare that x is a vector between some values.
Ive tried
x = linspace(a,b) where a and b are the values.
But then x^5 in the function don't work and x(i)^5 don't work either.

(I have defined the constants but to save space and time I didnt write them here. The m-file is saved correctly.)

The m-files are

f.m

function y = f(x)
global T;
c=2.9979*10^8;
k=1.3805*10^(-23);
h=6.6256*10^(-34);

y = 2*pi*h*c^2/(x^5*(exp(h*c/(k*x*T))-1));

_______________________________________

a.m

clear
clf

global T;

c=2.9979*10^8;
k=1.3805*10^(-23);
h=6.6256*10^(-34);

for i=1:3

T(i)=1000*i;
lmax(i)=fminbnd(-f,1*10^(-8),1*10^(-6));
c(i)=lmax(i)*T(i)
end
 
I'm also new to MATLAB but when you want to raise the power of each element of a vector you need to put a dot in, e.g:

x=[1 2 3]

x.^3

[1 8 27]
 
matlab still complains about

? Input argument 'x' is undefined.
 
You should define x in the instruction program (a.m I think it is its name).

Matlab doesn't know what on Earth is x if he hasn't got information about.

Try to define x as a vector of your coordinates and use the vectorial operator .^ for powering it.
 
JohanL said:
matlab still complains about

? Input argument 'x' is undefined.

yes, you get that error message because of this line in a.m:
lmax(i)=fminbnd(-f,1*10^(-8),1*10^(-6));
you call the function f , but you do not specify what x is, you should do something like this:
lmax(i)=fminbnd(-f(3),1*10^(-8),1*10^(-6));
of course it does not have to be 3.
 
Thank you ...now it works.
I also found that before f in
lmax(i)=fminbnd(f,1*10^(-8),1*10^(-6));
you need to have an @ like this
lmax(i)=fminbnd(@f,1*10^(-8),1*10^(-6));
 
  • #10
Just curious, why is it called Matlab and not Mathlab?
 
  • #11
because it stands for Matrix Laboratory
 
  • #12
%PID Controller Simulation Step Function m-File

Kp=10;
Kd=8;
num=[0 Kd Kp];
den=[2 2+Kd 2+Kp];

t=0:0.01:6;
step(num, den,t)
u=num/den;

%MDS Simulation in Z Direction
%Function m-File:
function pdot=mds(t,p)
%Spring Example Problem
m=2; g=-9.81; Kp=10; Kd=8;
%global u tautheta tauphi taupsi
%Parameters-damping coefficient and natural frequency
%forcing function

u=1;
tautheta=1;
tauphi=1;
taupsi=1
pdot=zeros(size(p));
pdot(1)=p(4);
pdot(2)=p(5);
pdot(3)=p(6);
pdot(4)=-u/m*sin(p(7));
pdot(5)=u/m*cos(p(7))*sin(p(8))
pdot(6)=u/m*cos(p(7))*cos(p(8))-g
pdot(7)=p(10);
pdot(8)=p(11);
pdot(9)=p(12);
pdot(10)=tautheta;
pdot(11)=tauphi;
pdot(12)=taupsi;

%ODE Solver m- File:
clear; close all; clc;

dt=0.01; 64

tspan=[0:dt:10];
global u;
% t=1:.1:10;

p0=[0;0;0;0;0;5;0;0;0;0;0;0];

[t,p]=ode45('mds', tspan, p0);

xdot=p(:,2);
x=p(:,1);

figure
subplot(2,1,1)
plot(t,x);
xlabel('time(s)'); ylabel('displ(m)');
subplot(2,1,2)
plot(t,xdot);

I executed in matlab, following error msg shown when i run mds.m file. please help me.

? Input argument "p" is undefined.

Error in ==> mds at 14
pdot=zeros(size(p));
 
  • #13
hey i have an error with line where the IF statement is and i idk what is it
i have another function file called f and i tested its working please help :)


a=0;
b=pi/2;
for i=1:10
xr= (a+b)/2;
if f(b)*f(xr)<0
a=xr;
else
b=xr;
end
end
xr
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
2K
Replies
5
Views
3K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 11 ·
Replies
11
Views
3K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 18 ·
Replies
18
Views
3K
  • · Replies 14 ·
Replies
14
Views
4K