# Matlab beginner

1. Nov 5, 2004

### JohanL

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 doesnt 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));

2. Nov 5, 2004

### theCandyman

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: Nov 5, 2004
3. Nov 5, 2004

### gerben

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

4. Nov 6, 2004

### JohanL

Thank you for your answers. But it I cant 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 dont work and x(i)^5 dont 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

5. Nov 6, 2004

### Zurtex

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]

6. Nov 6, 2004

### JohanL

??? Input argument 'x' is undefined.

7. Nov 6, 2004

### Clausius2

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.

8. Nov 6, 2004

### gerben

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.

9. Nov 7, 2004

### JohanL

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. Nov 8, 2004

### tony873004

Just curious, why is it called Matlab and not Mathlab?

11. Nov 8, 2004

### gerben

because it stands for Matrix Laboratory

12. Sep 18, 2010

### Ahsen

%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);

??? Input argument "p" is undefined.

Error in ==> mds at 14
pdot=zeros(size(p));

13. Mar 22, 2012

### BIBO

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 plz 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