Chebyshev e Polinomi e Matlab
Ho scritto un semplice programma che dati in ingresso i punti di chebishev approssima una funzione di 2 variabili.
Tramite il comando
Il tutto mi servirebbe per poter riscrivere l'equazione:
\(\displaystyle f(x,y)\approx p_M(x,y)=\sum_{i=0}^{r-1} \sum_{j=0}^{n-1} a_{ij}(M)T_i(y)T_j(x) \)
con:
\(\displaystyle T_k(x)=cos(k cos^{-1}(x))
\)
per poter poi calcolare la funzione per altre \(\displaystyle x,y \) e mettere tale formula in un altro sistema che devo risolvere
clear clc close all FlowMeasurements = chebpts(5,[-0.2,0.8]); % decido quali punti della massa mi servono secondo Chebyshev SpeedMeasurements = chebpts(5,[25000, 55000]); %in questa variante decido quali sono le velocità richieste da Chebyshev CompressorMapMatrix =[ 1.5805 1.2092 1.1402 1.0234 1.0095 1.6553 1.2840 1.2564 1.0565 1.0287 1.9070 1.5357 1.7124 1.2518 1.1505 2.2873 1.9160 2.4317 1.7374 1.4732 2.4935 2.1222 2.8189 2.0728 1.7064]; FlowVector = -0.2:0.01:0.8; approximationResult = chebfun2(CompressorMapMatrix,[ -0.2 0.8 25000 55000]); a = chebcoeffs2(approximationResult); %matrice dei coefficienti a_ij for i=1:length(SpeedMeasurements) figure(2) plot(approximationResult(FlowVector, SpeedMeasurements(i))); hold on grid on end
Tramite il comando
a = chebcoeffs2(approximationResult);riesco ad ottenere la matrice dei coefficienti, mentre non ho idea di come ottenere i polinomi T_k(x). So che devo usare il comando
chebpoly.
Il tutto mi servirebbe per poter riscrivere l'equazione:
\(\displaystyle f(x,y)\approx p_M(x,y)=\sum_{i=0}^{r-1} \sum_{j=0}^{n-1} a_{ij}(M)T_i(y)T_j(x) \)
con:
\(\displaystyle T_k(x)=cos(k cos^{-1}(x))
\)
per poter poi calcolare la funzione per altre \(\displaystyle x,y \) e mettere tale formula in un altro sistema che devo risolvere
Risposte
Non conoscevo "chebpoly", infatti cercando ho trovato la tua domanda sul forum di matlab
Ad ogni modo, siccome hai $(a_{ij})$ matrice dei coefficienti, puoi fare un doppio ciclo for (sarebbe meglio evitare in matlab, ma non cambia molto in questo caso) tipo questo pseudocodice
dove $T(x,i)$ ritorna il polinomio di cheb. valutato sui nodi $x$, nel caso in cui $k=i$, (lo puoi definire come function in matlab)

Ad ogni modo, siccome hai $(a_{ij})$ matrice dei coefficienti, puoi fare un doppio ciclo for (sarebbe meglio evitare in matlab, ma non cambia molto in questo caso) tipo questo pseudocodice
for i = 1:r-1 for j = 1:n-1 s+= a[i][j] * T(x,i) * T(y,j) end end
dove $T(x,i)$ ritorna il polinomio di cheb. valutato sui nodi $x$, nel caso in cui $k=i$, (lo puoi definire come function in matlab)
intanto grazie perchè brancolo nel buio.
Quindi tu dici di fare un codice del tipo:
T_1=cos(x*cos^-1(x));
T_2=cos(y*cos^-1(y));
e successivamente calcolare la mia funzione, nelle x ed y di mio gradimento come:
for i = 1:r-1
for j = 1:n-1
s+= a[j] * T(x,i) * T(y,j)
end
end
Giusto per essere sicuro di aver capito
Quindi tu dici di fare un codice del tipo:
T_1=cos(x*cos^-1(x));
T_2=cos(y*cos^-1(y));
e successivamente calcolare la mia funzione, nelle x ed y di mio gradimento come:
for i = 1:r-1
for j = 1:n-1
s+= a[j] * T(x,i) * T(y,j)
end
end
Giusto per essere sicuro di aver capito
T_1, T_2 che hai scritto te non sono quello che dovresti scrivere nel codice.
T(x,i) è la funzione (function in matlab) che prende il vettore $x$ dei punti (oppure y), e il parametro $i$, che cambia a seconda dell'iterata.
Una cosa del tipo
Comunque mio era solo pseudocodice, ad esempio
darà errore, perché per matlab stai moltiplicando due matrici non compatibili. Dovresti fare un ".*"
T(x,i) è la funzione (function in matlab) che prende il vettore $x$ dei punti (oppure y), e il parametro $i$, che cambia a seconda dell'iterata.
Una cosa del tipo
function ret = T1(x,i) ret = cos(i*arccos(x)); end
Comunque mio era solo pseudocodice, ad esempio
T(x,i) * T(y,j)
darà errore, perché per matlab stai moltiplicando due matrici non compatibili. Dovresti fare un ".*"