Chebyshev e Polinomi e Matlab

Messaggioda Luciolo9 » 14/05/2020, 15:17

Ho scritto un semplice programma che dati in ingresso i punti di chebishev approssima una funzione di 2 variabili.
Codice:
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
Codice:
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
Codice:
 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
Ultima modifica di Luciolo9 il 15/05/2020, 15:00, modificato 1 volta in totale.
Luciolo9
Starting Member
Starting Member
 
Messaggio: 2 di 28
Iscritto il: 14/01/2020, 16:53

Re: Chebishev e Polinomi e Matlab

Messaggioda feddy » 14/05/2020, 18:23

Non conoscevo "chebpoly", infatti cercando ho trovato la tua domanda sul forum di matlab :lol:

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

Codice:
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)
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2697 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: Chebishev e Polinomi e Matlab

Messaggioda Luciolo9 » 14/05/2020, 18:46

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[i][j] * T(x,i) * T(y,j)
end
end

Giusto per essere sicuro di aver capito
Luciolo9
Starting Member
Starting Member
 
Messaggio: 3 di 28
Iscritto il: 14/01/2020, 16:53

Re: Chebishev e Polinomi e Matlab

Messaggioda feddy » 14/05/2020, 21:18

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

Codice:
function ret = T1(x,i)
ret = cos(i*arccos(x));
end


Comunque mio era solo pseudocodice, ad esempio
Codice:
T(x,i) * T(y,j)


darà errore, perché per matlab stai moltiplicando due matrici non compatibili. Dovresti fare un ".*"
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2699 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA


Torna a Analisi Numerica e Ricerca Operativa

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite