Hello,
I am starting with octave. 2 questions. 1) If I type this function under octave, it is fine, but when it is in a file and that I make source "myfile.m" I get an error error: 't' undefined near line 1 column 8 function y = f_LG (x, t, wD, g) tt = t ./ wD; y = exp (-tt .* tt) ./ ((x .- t).**2 .+ g .* g); endfunction 2) I have a function function y = Voigt (x, wD, g) y = quad (@(t) w (x, t, wD, g), -10,10); endfunction which seems to work Voigt (0, 5, 0.1) ans = 30.719 but, I cannot plot it x=-10:0.1:10; plot (x, Voigt (x, 4,0.1)); This gives me a constant value. Thank for your help. =========================================================================== Patrick DUPRÉ | | email: [hidden email] Laboratoire de Physico-Chimie de l'Atmosphère | | Université du Littoral-Côte d'Opale | | Tel. (33)-(0)3 28 23 76 12 | | Fax: 03 28 65 82 44 189A, avenue Maurice Schumann | | 59140 Dunkerque, France =========================================================================== |
On Tue, Apr 10, 2018 at 4:35 AM, Patrick Dupre <[hidden email]> wrote: Hello, 1) you should name the file the same name as the function name 2) since you didn't then you can do: q=myfile( xvalues, tvalues, wD value, g value) in other words you must send some numbers to the function 2) |
In reply to this post by Patrick Dupre
On Tue, Apr 10, 2018 at 4:35 AM, Patrick Dupre <[hidden email]> wrote: Hello, It does not work for me. I get Voigt (0, 5, 0.1) error: 'w' undefined near line 2 column 18 error: quad: evaluation of user-supplied function failed you should try "clear all" and see what happens. Put all functions in a file. which seems to work |
In reply to this post by Patrick Dupre
On Tue, Apr 10, 2018, 9:52 AM Patrick Dupre <[hidden email]> wrote: ... You need to understand the outputs of your functions. Run Voigt(x, 4, 0.1) before the plot line and see what your output looks like. quad will only produce a scalar output. So it seems you are calling plot with an array for the x value and a single constant for the y value. |
(please keep the help list in the reply chain)
On 4/10/18, Patrick Dupre <[hidden email]> wrote: >> 2) >> I have a function >> function y = Voigt (x, wD, g) >> y = quad (@(t) w (x, t, wD, g), -10,10); >> endfunction >> >> which seems to work >> >> Voigt (0, 5, 0.1) >> ans = 30.719 >> >> but, I cannot plot it >> >> x=-10:0.1:10; >> plot (x, Voigt (x, 4,0.1)); >> This gives me a constant value. > > > > You need to understand the outputs of your functions. Run Voigt(x, 4, 0.1) > before the plot line and see what your output looks like. quad will only > produce a scalar output. So it seems you are calling plot with an array for > the x value and a single constant for the y value. > > > I guess that it is the right argument. The question is hwo do I manage the x > vector? > In other words, what is the difference between > x=-10:0.1:10 > plot (x, sin (x)) > and my function? > plot (x, Int_Sat (x, 2, 1, 0.1, 0.01)) > > function y = Int_Sat (x, Shift, wD, g, s) > y = quad (@(t) Sat (x, t, Shift, wD, g, s), 0, 15) ; > endfunction > > Sin(x) will take a vector input and produce a vector otuput. if Int_Sat does not produce a vector output, then the plot function will not have a vector to work with. plot is not working with one value of x at a time, it is working with two matrices, but Int_Sat produces a matrix of size (1,1) |
Very good,
Then, how can I get a vector in output? By the way, sin(1) works as well as plot (x, sin (x)) How can I obtain the same behavior ? Thank. =========================================================================== Patrick DUPRÉ | | email: [hidden email] Laboratoire de Physico-Chimie de l'Atmosphère | | Université du Littoral-Côte d'Opale | | Tel. (33)-(0)3 28 23 76 12 | | Fax: 03 28 65 82 44 189A, avenue Maurice Schumann | | 59140 Dunkerque, France =========================================================================== > Sent: Tuesday, April 10, 2018 at 6:35 PM > From: "Nicholas Jankowski" <[hidden email]> > To: "Patrick Dupre" <[hidden email]> > Cc: "Help GNU Octave" <[hidden email]> > Subject: Re: variable and plot > > (please keep the help list in the reply chain) > > On 4/10/18, Patrick Dupre <[hidden email]> wrote: > >> 2) > >> I have a function > >> function y = Voigt (x, wD, g) > >> y = quad (@(t) w (x, t, wD, g), -10,10); > >> endfunction > >> > >> which seems to work > >> > >> Voigt (0, 5, 0.1) > >> ans = 30.719 > >> > >> but, I cannot plot it > >> > >> x=-10:0.1:10; > >> plot (x, Voigt (x, 4,0.1)); > >> This gives me a constant value. > > > > > > > > You need to understand the outputs of your functions. Run Voigt(x, 4, 0.1) > > before the plot line and see what your output looks like. quad will only > > produce a scalar output. So it seems you are calling plot with an array for > > the x value and a single constant for the y value. > > > > > > I guess that it is the right argument. The question is hwo do I manage the x > > vector? > > In other words, what is the difference between > > x=-10:0.1:10 > > plot (x, sin (x)) > > and my function? > > plot (x, Int_Sat (x, 2, 1, 0.1, 0.01)) > > > > function y = Int_Sat (x, Shift, wD, g, s) > > y = quad (@(t) Sat (x, t, Shift, wD, g, s), 0, 15) ; > > endfunction > > > > > > > Sin(x) will take a vector input and produce a vector otuput. if > Int_Sat does not produce a vector output, then the plot function will > not have a vector to work with. plot is not working with one value of > x at a time, it is working with two matrices, but Int_Sat produces a > matrix of size (1,1) > |
On Tue, Apr 10, 2018 at 1:18 PM, Patrick Dupre <[hidden email]> wrote: Very good, your function needs to output a vector. quad does not. quadv does, but it tends to be a bit less accurate. if x = [1:1:10], then look at the output of sin(x). plot just works with the output of the function. |
---- Original Message -----
>From: Nicholas Jankowski >To: Patrick Dupre >Cc: Help GNU Octave < >Date: 2018/4/11, Wed 02:52 >Subject: Re: variable and plot > > >On Tue, Apr 10, 2018 at 1:18 PM, Patrick Dupre wrote: > >Very good, >> >>Then, how can I get a vector in output? >>By the way, >>sin(1) works as well as >>plot (x, sin (x)) >>How can I obtain the same behavior ? >> >> > >your function needs to output a vector. quad does not. quadv does, but it tends to be a bit less accurate. if x = [1:1:10], then look at the output of sin(x). plot just works with the output of the function. > https://octave.org/doc/interpreter/Function-Application.html#index-arrayfun HTH Tatsuro |
Free forum by Nabble | Edit this page |