2017-08-29 3 views
2

Ich versuche eine M*N Matrix zu interpolieren. Zum Beispiel Matrix T stellt Temperatur und Matrix B repräsentiert den Ort:Interpolation entlang einer Dimension einer 2D-Matrix

T = [1 3 5; ... 
    2 4 6; ... 
    1 2 3]; 
B = [0.1 0.2 0.3; ... 
    0.1 0.2 0.3; ... 
    0.1 0.2 0.3]; 

Ich versuche, die Temperaturinformationen an Orten 0.15 und 0.25 zu erhalten. Also, Matrix B werden wie:

New_B = [0.1 0.15 0.2 0.25 0.3; ... 
     0.1 0.15 0.2 0.25 0.3; ... 
     0.1 0.15 0.2 0.25 0.3]; 

und die erwarteten Ergebnisse für Matrix T sein wird:

T = [1 2 3 4 5; ... 
    2 3 4 5 6; ... 
    1 1.5 2 2.5 3]; 

Ich habe versucht:

New_T = interp2(T, B, New_B); 

Aber es funktioniert nicht. Wie kann ich diese Interpolation durchführen?

Antwort

2

Sie können interp1 auf eine Matrix anwenden, wobei es entlang jeder Spalte arbeiten wird. Da Sie entlang jeder Zeile interpolieren möchten, müssen Sie Ihre Eingaben und Ihre Ausgaben zu transpose. Sie müssen auch nur eine Zeile jeder von B und New_B:

New_T = interp1(B(1, :).', T.', New_B(1, :).').'; 

New_T = 

    1.0000 2.0000 3.0000 4.0000 5.0000 
    2.0000 3.0000 4.0000 5.0000 6.0000 
    1.0000 1.5000 2.0000 2.5000 3.0000 

Falls Sie neugierig waren, würden Sie zusätzliche Reihe Gitterpunkte angeben müssen interp2 verwenden:

New_T = interp2(B(1, :), (1:size(B, 1)).', T, New_B(1, :), (1:size(New_B, 1)).'); 
2

Sie müssen eine for-Schleife verwenden, da interp1 nur für eine einzelne Zeile funktioniert.

T=[ 1 3 5; 2 4 6; 1 2 3]; 
B=[0.1 0.2 0.3; 0.1 0.2 0.3; 0.1 0.2 0.3]; 


B_new = [0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3; 0.1 0.15 0.2 0.25 0.3]; 

T_new = cell(2,1); 

for k=1:size(B,1) 

    T_new{k} = interp1(B(1,:),T(k,:),B_new(k,:)); 

end 

T_new = cell2mat(T_new) 

Ausgang:

T_new = 

    1.0000 2.0000 3.0000 4.0000 5.0000 
    2.0000 3.0000 4.0000 5.0000 6.0000 
    1.0000 1.5000 2.0000 2.5000 3.0000 
+0

Danke. Kann ich interp2 benutzen? weil ich große Daten habe und Loop das Programm beenden wird. – Math

+1

interp2 nimmt auch eine Beziehung zwischen den Werten in der 2. Dimension an. Sie können die Schleife schnell machen, indem Sie anstelle einer Zelle eine Matrix vordefinieren. 'T_new = nan (Größe (B_new))' und 'T_new (k, :) = interp1 (...' interp1 ist sehr schnell. Ich kann mir nicht vorstellen, wie es das Programm beenden würde. – Gelliant

Verwandte Themen