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

Iteration von einer Kurve an zwei Punkten

 

demar
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2009, 16:59     Titel: Iteration von einer Kurve an zwei Punkten
  Antworten mit Zitat      
Hallo Leute...

Es geht darum in Matlab eine Funktion wie zum Beispiel eine quadratische Funktion (x^2) an zwei Punkten(P2;P4) zu iterieren. Ich habe drei Punkte die fest sind (P1,P3,P5)(schaut euch die Grafik an) und will die Kurve so verändern, dass sie an den Punkten P2 und P4 sich annäht .Kann mir jemand helfen und mir einen Tipp geben, wie das funktionieren würde.

Danke Alex!!

kurve.jpg
 Beschreibung:

Download
 Dateiname:  kurve.jpg
 Dateigröße:  49.92 KB
 Heruntergeladen:  491 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2009, 19:27     Titel:
  Antworten mit Zitat      
Hallo,

eine Parabel ax^2 + bx + c hat 3 Parameter, kann also durch 3 Punkte bestimmt werden. Dann wäre die Parabel also durch P1, P3, P5 schon vollständig bestimmt. Falls P5 "symmetrisch gegenüber" von P1 liegt, brauche ich es gar nicht zu verwenden. Dann kann ich P1, P2, P3 verwenden und bekomme dadurch 3 (lineare) Gleichungen in den Parametern a, b, c, die ich mit dem \ - Operator lösen kann.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
demar
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2009, 00:05     Titel:
  Antworten mit Zitat      
Ja verstehe ich.Das Beispiel war ein bisschen blöd. Mein Problem sieht eher so aus:

Meine Funktion ist eine so genannte Superellipse in der Form: |x/a|^n1+|y/b|^n2=1

a und b sind Breite und länge der Ellipse.Die Exponenten n1 und n2 sind die Steigungen der "Ecken" der Ellipse . Mein Code sieht bis her so aus:
Code:

function [xx,yy] = semiellipse(D_f1,h_a,n11,n12,n21,n22,n,a_main,a_upper,a_gang)

%l=Länge
%h=Höhe
%n=Stützstellen


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%BERECHNUNG DER UNTEREN ELLIPSE(GEPÄCKRAUM)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


n11=3;
n12=3;
n21=3;
n22=3;
n=20;

%Berechnung des Innendurchmessers(d_fgi) in der Höhe des Fussbodens
%im MainDeck für eine Abreastzahl von 8-12

b_g=0.457;       %Gangbreite
b_s=0.48;        %Sitzbreite C-Class

b_lehneI=0.115;
b_lehneA=0.055;

%Falls Anzahl der Gänge (a_gangmain)= 1 ist dann nehme die erste Schleife und falls a_gangmain=2
%dann nehme die zweite!!


a_main=6;          %Abreastzahl in MainDeck

a_gangmain=1;       %Anzahl der Gänge im MainDeck

if a_gangmain==1
   
    if  a_main >= 2
        if a_main <=6
        d_fgi=a_gangmain*b_g+b_s*a_main+b_lehneI*(a_main-2)+b_lehneA*4;
        end
   
    end
   
else a_gangmain == 2;
   
    if  a_main >= 3
        if a_main <=12
         d_fgi=a_gangmain*b_g+b_s*a_main+b_lehneI*(a_main-3)+b_lehneA*6;
        end
    else    
    end
end
%Außendurchmesser an der Höhe des Fussbodens im MainDeck

d_w=0.02*d_fgi+0.025;     %Rupfhautdicke

d_fga=d_fgi+2*d_w;
 
%Tiefe der unteren Ellipse

d_cf1=1.5*d_w;            %Fussbodentiefe
h_LC1=2.575;              %Höhe eines LC1 Cont. 62"


h_fgi=h_LC1+d_cf1;         %Innentiefe an der Höhe des Fussbodens im MainDeck
h_fga=h_LC1+d_cf1+d_w;     %Außentiefe an der Höhe des Fussbodens im MainDeck

%Erstellen der unteren Ellipse
theta = (0:1:n)/n*pi;
theta(n+1)=pi; sintheta = sin(theta); sintheta(1) = 0; sintheta(n+1) = 0;

x = ones(n+1,1);
y = ones(n+1,1);

%Für die Außenhaut
for i=1:n+1
    if theta(i) <= pi/2
        x_ga(i) = d_fga/2 * abs(cos(theta(i))).^(2/n11);
        y_ga(i) = -h_fga * abs(sintheta(i)).^(2/n21);
    else
        x_ga(i) = -d_fga/2 * abs(cos(theta(i))).^(2/n12);
        y_ga(i) = -h_fga * abs(sintheta(i)).^(2/n22);
    end
end

 
if nargout == 0
    plot(x_ga,y_ga)
    xlabel('x','FontSize',16)
    ylabel('z','FontSize',16)
    axis equal
else
    xx = x; yy = y;
end
 


Es geht darum die Funktion(also n1 und n2) so zu verändern, dass sie um diese zwei Punkte geht!kann mir bitte jemand helfen.Ich verzweifle!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.500
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2009, 21:53     Titel:
  Antworten mit Zitat      
Hallo,

Meine Antwort in Kürze: der Code ist zu lang, unübersichtlich und zu undokumentiert, als dass ich was damit anfangen könnte. Insbesondere: was ist die Bedeutung der Eingabeargumente? Wo kommen n1 und n2 überhaupt vor?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
demar
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.10.2009, 11:28     Titel:
  Antworten mit Zitat      
Ich hoffe, dass es jetzt ein bißchen verständlicher ist. In dem hochbeladenen Bild sind die ganzen Bedeutungen der Kürzel ein bißchen besser zu verstehen.

Code:

function [xx,yy] = semiellipse(D_f1,h_a,n11,n12,n21,n22,n,a_main,a_upper,a_gang)

%Teilung der Ellipse in vier Teilstücken.Hier wird nur die halbe untere Ellipse aus zwei Teilen erstellt.Man kann die Funktion  "|x/d_fga|^n1+|y/h_fga|^n2=1" auf jedes Teilstück. "n1" und "n2" sind in"n11,n12,n21 und n22" umgewandelt (schau dir das zweite Bild an)

n11=3;      %Steigung des ersten Parts in y-Richtung
n12=3;      %Steigung des zweiten Parts in x-Richtung
n21=3;      %Steigung des ersten Parts in y-Richtung
n22=3;      %Steigung des zweiten Parts in x-Richtung
n=20;       %n=Stützstellen

%Berechnung des Innendurchmessers(d_fgi) in der Höhe des Fussbodens
%im MainDeck für eine Abreastzahl von 8-12

b_g=0.457;       %Gangbreite
b_s=0.48;         %Sitzbreite C-Class

b_lehneI=0.115;
b_lehneA=0.055;

%Falls Anzahl der Gänge (a_gangmain)= 1 ist dann nehme die erste Schleife und falls a_gangmain=2
%dann nehme die zweite!!


a_main=6;          %Abreastzahl in MainDeck

a_gangmain=1;       %Anzahl der Gänge im MainDeck

if a_gangmain==1
   
    if  a_main >= 2
        if a_main <=6
        d_fgi=a_gangmain*b_g+b_s*a_main+b_lehneI*(a_main-2)+b_lehneA*4;
        end
   
    end
   
else a_gangmain == 2;
   
    if  a_main >= 3
        if a_main <=12
         d_fgi=a_gangmain*b_g+b_s*a_main+b_lehneI*(a_main-3)+b_lehneA*6;
        end
    else    
    end
end

%Außendurchmesser an der Höhe des Fussbodens im MainDeck

d_w=0.02*d_fgi+0.025;     %Rupfhautdicke

d_fga=d_fgi+2*d_w;
 
%Höhe der unteren Ellipse

d_cf1=1.5*d_w;                    %Fussbodentiefe
h_LC1=2.575;                       %Höhe eines LC1 Cont. 62"


h_fgi=h_LC1+d_cf1;               %Innentiefe an der Höhe des Fussbodens im MainDeck

h_fga=h_LC1+d_cf1+d_w;     %Außentiefe an der Höhe des Fussbodens im MainDeck

%Erstellen der unteren Ellipse
theta = (0:1:n)/n*pi;
theta(n+1)=pi; sintheta = sin(theta); sintheta(1) = 0; sintheta(n+1) = 0;

x = ones(n+1,1);
y = ones(n+1,1);

%Für die Außenhaut
for i=1:n+1
    if theta(i) <= pi/2
        x_ga(i) = d_fga/2 * abs(cos(theta(i))).^(2/n11);
        y_ga(i) = -h_fga * abs(sintheta(i)).^(2/n21);
    else
        x_ga(i) = -d_fga/2 * abs(cos(theta(i))).^(2/n12);
        y_ga(i) = -h_fga * abs(sintheta(i)).^(2/n22);
    end
end

 
if nargout == 0
    plot(x_ga,y_ga)
    xlabel('x','FontSize',16)
    ylabel('z','FontSize',16)
    axis equal
else
    xx = x; yy = y;
end
 


semiellipse.jpg
 Beschreibung:

Download
 Dateiname:  semiellipse.jpg
 Dateigröße:  99.48 KB
 Heruntergeladen:  456 mal
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 - 2025 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.