help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Function matrix/vector assembly


From: Juan Pablo Carbajal
Subject: Re: Function matrix/vector assembly
Date: Thu, 9 Aug 2012 16:44:33 +0200

On Thu, Aug 9, 2012 at 2:46 PM, Grant Stephens <address@hidden> wrote:
> Ok, let me try and explain it better
> I have two functions, say f(x) and g(x), which give vectors as outputs, so
> something like:
> f=@(x) [x^2 x^3]
> g=@(x) [x 5*x]
> and these must make up a vector function with combinations of f and g, for
> example:
> [x^2 (x^3)+(x) 5(x)]. So in other words the first two values must be from f
> and added to these in the spaces two and 3 must be the values from g.
>
> Is that clearer?
>
>
>
> On 9 August 2012 13:38, Juan Pablo Carbajal <address@hidden> wrote:
>>
>> On Thu, Aug 9, 2012 at 8:59 AM, Francesco Potortì <address@hidden>
>> wrote:
>> >>I am trying to assemble a function into a matrix or a vector but I have
>> >> not
>> >>found a way to do so except for typing it out manually, which is not
>> >>possible as the it would be around 100 long and wide and changes after
>> >>every timestep. The following represents what I am trying to do:
>> >>
>> >>f=@(x) [x^2 x 1]
>> >>then I want to put a number of these into a vector so that the final
>> >> vector
>> >>would look like:
>> >>vect=@(x) [x^2 x+x^2 1+x 1]
>> >>Here I have added have done something like:
>> >>vect=@(x) [f(x)(1) f(x)(2)+f(x)(1) f(x)(3)+f(x)(2) +f(x)(3)]
>> >>So basically having a vector with f in 1 to 3 added to f in positions 2
>> >> to
>> >>4. Obviously this would have to run in a loop as it is well over 100
>> >> wide.
>> >
>> > As far as I am concerned, you should try to explain it better: I read it
>> > carefully, but could nt make out what you need.
>> >
>> > --
>> > Francesco Potortì (ricercatore)        Voice:  +39.050.315.3058
>> > (op.2111)
>> > ISTI - Area della ricerca CNR          Mobile: +39.348.8283.107
>> > via G. Moruzzi 1, I-56124 Pisa         Fax:    +39.050.315.2040
>> > (entrance 20, 1st floor, room C71)     Web:    http://fly.isti.cnr.it
>> > _______________________________________________
>> > Help-octave mailing list
>> > address@hidden
>> > https://mailman.cae.wisc.edu/listinfo/help-octave
>>
>> I am not sure I understood.
>> What I get is the following: you want to define vector-valued
>> functions and then be able to operate on those functions (add them,
>> multiply them, etc).
>>
>> I do not think there is built in operator for anonymous handles, that is
>> [1]
>> f  = @(x) x.^2
>> g = @(x) x
>> h = f + g
>>
>> and h should be the anonymous function accepting two input argument such
>> that
>> h(x,y) = f(x) + g(y)
>>
>> To emulate this, afaik you have to do it manually (and it wouldn't be
>> efficient)
>> h = @(x,y) f(x) + g(y)
>>
>> Now when you call h, you will be then calling f and g, and since
>> function evaluations are not the most efficient thing, this get worse
>> themore function you nest.
>>
>> @John | Jordi: Can [1], i.e. operators between anonymous functions, be
>> implemented efficiently?
>> --
>> M. Sc. Juan Pablo Carbajal
>> -----
>> PhD Student
>> University of Zürich
>> http://ailab.ifi.uzh.ch/carbajal/
>
>

This is one of many ways to do it.

Make the connectivity matrix that says which element of f(x) must be
combined with the elements of g(x). In your example
[f(x)(1); f(x)(2)+g(x)(1); g(x)(2)] = M * [f(x); g(x)]
M = [1 0 0 0; 0 1 1 0; 0 0 0 1];
(assuming f and g return column vectors)

Then the new function is
h = @(x) M*[f(x); g(x)];

This is the answer I gave you before. Be aware that this is not
efficient if you are then going to use h to build another function in
this way.


-- 
M. Sc. Juan Pablo Carbajal
-----
PhD Student
University of Zürich
http://ailab.ifi.uzh.ch/carbajal/


reply via email to

[Prev in Thread] Current Thread [Next in Thread]