

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 PhysicoChimie de l'Atmosphère  
Université du LittoralCôte d'Opale  
Tel. (33)(0)3 28 23 76 12   Fax: 03 28 65 82 44
189A, avenue Maurice Schumann   59140 Dunkerque, France
===========================================================================


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


(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 PhysicoChimie de l'Atmosphère  
Université du LittoralCô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)
>


 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.
>
In the case, use arrayfun shown in the below
https://octave.org/doc/interpreter/FunctionApplication.html#indexarrayfunHTH
Tatsuro

