Filter löschen
Filter löschen

Creating a set of equations programmatically

1 Ansicht (letzte 30 Tage)
Lennart Vogt
Lennart Vogt am 22 Okt. 2018
Kommentiert: Lennart Vogt am 23 Okt. 2018
I am trying to create a set of terms programmatically in order to build up a set of equations later in the code. The equations are supposed to be stored in Q. The vectors a and b are fixed parameters and vector T is the unknown variable.
n = 5;
a = [6 5 4 3 2 1];
b = [1 2 3 4 5 6];
L = 3;
k = 1;
while k<=n
Q{k,1} = @(T) a(k)*b(k)/L*(T(k+1)-T(k));
k = k+1;
end
Q
What happens when I run the code is that the information in k is passed in the index of Q (so that the terms are stored in different rows) but not in the index of a,b and T:
Q =
5×1 cell array
{@(T)a(k)*b(k)/L*(T(k+1)-T(k))}
{@(T)a(k)*b(k)/L*(T(k+1)-T(k))}
{@(T)a(k)*b(k)/L*(T(k+1)-T(k))}
{@(T)a(k)*b(k)/L*(T(k+1)-T(k))}
{@(T)a(k)*b(k)/L*(T(k+1)-T(k))}
For my purpose I'd like to get an output like this:
Q =
5×1 cell array
{@(T)a(1)*b(1)/L*(T(2)-T(1))}
{@(T)a(2)*b(2)/L*(T(3)-T(2))}
{@(T)a(3)*b(3)/L*(T(4)-T(3))}
{@(T)a(4)*b(4)/L*(T(5)-T(4))}
{@(T)a(5)*b(5)/L*(T(6)-T(5))}
Does anyone have an idea how to get this output?
  3 Kommentare
Matt J
Matt J am 23 Okt. 2018
That would be true only if you plan to change a and b later.
Lennart Vogt
Lennart Vogt am 23 Okt. 2018
Yes, you are right. My bad.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 22 Okt. 2018
Bearbeitet: Matt J am 22 Okt. 2018
Your code already works fine. Each anonymous function Q{k} will use a different value for k, even if that isn't printed to the screen.

Weitere Antworten (1)

Adam Danz
Adam Danz am 22 Okt. 2018
Bearbeitet: Adam Danz am 22 Okt. 2018
See Matt J's response. This solution will print the values you described by uses sprintf() and str2func().
n = 5;
a = [6 5 4 3 2 1];
b = [1 2 3 4 5 6];
L = 3;
k = 1;
while k<=n
Q{k,1} = str2func(sprintf('@(T) a(%d)*b(%d)/L*(T(%d)-T(%d));', k,k,k+1,k));
k = k+1;
end

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Produkte


Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by