Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Matlab beginner

  1. Nov 5, 2004 #1
    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. jcsd
  3. Nov 5, 2004 #2
    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
  4. Nov 5, 2004 #3

    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
     
  5. Nov 6, 2004 #4
    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
     
  6. Nov 6, 2004 #5

    Zurtex

    User Avatar
    Science Advisor
    Homework Helper

    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]
     
  7. Nov 6, 2004 #6
    matlab still complains about

    ??? Input argument 'x' is undefined.
     
  8. Nov 6, 2004 #7

    Clausius2

    User Avatar
    Science Advisor
    Gold Member

    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.
     
  9. Nov 6, 2004 #8
    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.
     
  10. Nov 7, 2004 #9
    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));
     
  11. Nov 8, 2004 #10

    tony873004

    User Avatar
    Science Advisor
    Gold Member

    Just curious, why is it called Matlab and not Mathlab?
     
  12. Nov 8, 2004 #11
    because it stands for Matrix Laboratory
     
  13. Sep 18, 2010 #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));
     
  14. Mar 22, 2012 #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 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
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Matlab beginner
Loading...