View Full Version : matlab beginner
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));
theCandyman
Nov5-04, 09:36 PM
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.
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));
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 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
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.
Clausius2
Nov6-04, 03:42 PM
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.
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));
tony873004
Nov8-04, 06:02 PM
Just curious, why is it called Matlab and not Mathlab?
because it stands for Matrix Laboratory
%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));
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
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.