WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bestapproximation

 

mrdjv2
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 14.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.11.2008, 12:07     Titel: Bestapproximation
  Antworten mit Zitat      
hallo,
ich habe hier eine bestapproximation, die ich gerne in matlab umsetzen möchte. in mathematica ist das schon soweit eigentlich ganz gut geworden, allerdings zickt matlab aus verschiedenen gründen rum. ein grund scheint mir numerische instabilität zu sein. jedenfalls sind die ergebnisse alles andere als brauchbar und evtl kann jemand mal einen blick darauf werfen und mir sagen, ob das prinzipiell ok ist, oder wo da starker verbesserungsbedarf besteht.

Code:


function GaussApprox()


close all; clear all;    

xa = -2 ;               % die funktion soll von xa bis xb approximiert werden
xb = 2 ;                % wobei sie selbst nur einen träger haben soll auf dem
                            % intervall [-1,1]

n=50;                       %Number of approximating Gaussians

sigma = (xb-xa)/(2*n)          %Variance

tol=10e-20;           %Toleranz bei quadl
                           
%das folgende ist ein beispiel für eine diskretisierte, zu approximierende funktion, hier die charakteristische fkt von  [-1,1]
%for k = 1:1:num_samples
%    if(abs(x(k))<a) modo(k) = A;
%    else modo(k)=0;
%    end
%end

%festlegung der erwartungswerte (bzw zentren)

for k=1:1:n
    mu(k)=xa-(1-k)/(n-1)*(xb-xa);
    %mu(k) = xa+(xb-xa)*(2*k-1)/(2*n);
end

%allgemein hier die definition der einzelnen gaussfunktionen
% for k=1:1:n
%      Gauss=@(k) (@(z) exp(-(z-mu(k))^.2 /sigma^2) );
% end

%definition der integranden für die einträge der gram-matrix
for k=1:1:n
    for m=1:1:n
        Gram(k,m) =@(z) exp((-(z-mu(k)).^2-(z-mu(m)).^2)/sigma^2);
    end
end


%F soll komponentenweise aus dem skalarprodukt der k-ten gaussfkt mit der zu approximierenden fkt bestehen (die hier gerade 1 ist), daß sie außerhalb des trägers 0 ist, berücksichtige ich, indem ich nur über den träger integriere

F = @(k) (@(z) exp(-(z-mu(k)).^2/sigma^2));


 figure(1);
 hold on;
 for k=1:1:n
 ezplot(F(k),[-20-1e-4 20+1e-4]);
 axis auto;
 end
 hold off;

for k=1:1:n
   v(k)= quadl(F(k),-1,1);
end

for k=1:1:n
    for m=1:1:n
         ata(k,m)=quadl(Gram(k,m),10000*xa,10000*xb,tol);
     end
 end

vec=ata^(-1)*v'


for k=1:1:n
    Approx(k)= @(z) (vec(k)*(exp(-(z-mu(k)).^2/sigma^2)));
end

 figure(2);
 hold on;
 for k=1:1:n
 ezplot(Approx(k),[-2-1e-4 2+1e-4]);
 axis auto;
 end
 hold off;

appfunc = @Approxfunc;
 function y =  Approxfunc(z)
    for k=1:1:n
        tmp(k) = (vec(k)*(exp(-(z-mu(k)).^2/sigma^2)));
    end
    y=sum(tmp);
 end


figure(3)
ezplot(appfunc,[-20-1e-4 20+1e-4]);

 


irgendwie scheint die berechnung der gram-matrix nicht wirklich gescheit zu funktionieren. die sieht sehr singulär aus, obwohl sie das nicht sein darf.
könnte das der grund für die probleme sein? falls ja, wie bekomme ich das problem in den griff?
die toleranz habe ich schon sehr hoch und sehr niedrig gesetzt. ohne wirkliche verbesserung. den integrationsbereich habe ich auch hinreichend groß gewählt, denke ich (infinity oder so scheints ja nicht zu tun).

danke im voraus

gruß
daniel
Private Nachricht senden Benutzer-Profile anzeigen


Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.