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

Division und Integration von Polynomen

 

-rafael-
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.03.2017, 18:17     Titel: Division und Integration von Polynomen
  Antworten mit Zitat      
Hallo an alle,

ich möchte einen Ausdruck (w, z) berechnen, der eine Integration von Polynombrüchen beeinhaltet, habe aber noch keinen passenden Weg gefunden.
Als Integrationsintervall [a,b] möchte ich zum Beispiel [300,400] wählen.

Die Ausdrücke lauten:
 w = \frac{\int_a^b \! \frac{p(T)}{k(T)}  \, dT }{\int_a^b \! \frac{1}{k(T)}  \, dT }
und
 z = \frac{\int_a^b \! \frac{1}{k(T)}  \, dT }{\int_a^b \! \frac{1}{k(T)^{2} }  \, dT }


p(T) ist ein Polynom 6-ten Grades:
p(T) = -8,95907138227271e-14\cdot T^{6} + 1,9112650140292e-10\cdot T^{5} +1,67785922984506e-7\cdot T^{4} + 7,75324390925099e-5\cdot T^{3} - 1,98798892382851e-2\cdot T^{2} + 2.68544306544452\cdot T -148.862245060971



Also p als Vektor mit dem Koeffizienten:
Code:
p = [-0.000000000000089590713822727100, 0.000000000191126501402920000000, -0.000000167785922984506000000000, 0.000077532439092509900000000000, -0.019879889238285100000000000000, 2.685443065444520000000000000000, -148.862245060971000000000000000000]



k(T) ist auch ein Polynom 6-ten Grades:
Code:
k = [-0.0000000000001229445022436, 0.0000000002633331730021610, -0.0000002318448508147230000,  0.0001073185091756460000000, -0.0275088393428537000000000, 3.6951306815672400000000000, -201.6655466415800000000000000]


Ich bin auf den Befehl deconv (Deconvolution and polynomial division) gestoßen. Mein weiteres Vorgehen für den Ausdruck w würde so aussehen:

Code:

c = 3; %constant of integration c = 3
o = polyint(deconv(p,k),c)
u = polyint(deconv(1,k),c)

a = 300;
b = 400;
Io = diff(polyval(o,[a b]))
Iu = diff(polyval(u,[a b]))

w = Io / Iu
 


Für den Ausdruck z, analogisch :
Code:

c = 3; %constant of integration c = 3
o = polyint(deconv(1,k),c)
u = polyint(deconv(1,conv(k,k)),c) %Polynom k quadrieren mit befehl conv

a = 300;
b = 400;
Io = diff(polyval(o,[a b]))
Iu = diff(polyval(u,[a b]))

z = Io / Iu
 


Für jede Hilfe wäre ich äußerst dankbar!
Private Nachricht senden Benutzer-Profile anzeigen


Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 10.03.2017, 20:33     Titel:
  Antworten mit Zitat      
Hallo Rafael,

die Funktion deconv gibt dir 2 Werte zurück (s. Docu https://de.mathworks.com/help/matlab/ref/polyint.html), dein aktueller Code berücksichtigt aber nur den ersten zurückgegebenen Wert. Schau dir am besten nochmal an, was deconv eigentlich genau macht. Ist es für dich wichtig, die Integrale analytisch zu lösen oder sind auch numerische Lösungen zulässig? Für eine numerische Lösung kannst du dir mal die Funktion Trapz angucken (https://de.mathworks.com/help/matlab/ref/trapz.html). Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
-rafael-
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.03.2017, 10:07     Titel:
  Antworten mit Zitat      
Zitat:
die Funktion deconv gibt dir 2 Werte zurück (s. Docu https://de.mathworks.com/help/matlab/ref/polyint.html), dein aktueller Code berücksichtigt aber nur den ersten zurückgegebenen Wert. Schau dir am besten nochmal an, was deconv eigentlich genau macht.


aber liege ich richtig mit dem Befehl deconv oder gibt es eine andere Methode Polynome zu dividieren?

Zitat:
Ist es für dich wichtig, die Integrale analytisch zu lösen oder sind auch numerische Lösungen zulässig? Für eine numerische Lösung kannst du dir mal die Funktion Trapz angucken (https://de.mathworks.com/help/matlab/ref/trapz.html).


Nein, es ist nicht wichtig die Integrale analytisch zu lösen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.03.2017, 10:52     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Nein, es ist nicht wichtig die Integrale analytisch zu lösen.

Dann würde ich den numerischen Ansatz empfehlen, denn das ist deutlich einfacher.
trapz würde ich nur für diskrete Daten verwenden. Wenn eine Funktion gegeben ist, ist integral (oder in älteren Versionen quad ) die bessere Wahl, weil dabei Fehlertoleranzen angegeben werden können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 11.03.2017, 11:01     Titel:
  Antworten mit Zitat      
Code:
function main
close all; clc;

a=300;      % obere integralgrenze
b=400;      % untere integralgrenze
N=100;      % anzahl an stützstellen
T=linspace(a,b,N);  % diskretisierung des intervalls

% berechnung von w
yp=polynomP(T);         % auswertung des p-polynoms an den stützstellen T
yk=polynomK(T);         % auswertung des k-polynoms an den stützstellen T
Io=trapz(T,yp./yk);     % oberes integral
Iu=trapz(T,1./yk);      % unteres integral
w=Io/Iu

% berechnung von z
Iu_=trapz(T,1./yk.^2);
z=Iu/Iu_

end

function y=polynomP(T)
p=[1 2 3 4 5 6 7];    % koeffizienten
y=zeros(1,length(T));
for t=1:length(T)     % schleife über alle stützstellen
    for e=1:length(p) % schleife über alle exponenten
        y(t)=y(t)+p(e)*T(t)^(length(p)-e);
    end
end
end


function y=polynomK(T)
p=[7 6 5 4 3 2 1];    % koeffizienten
y=zeros(1,length(T));
for t=1:length(T)     % schleife über alle stützstellen
    for e=1:length(p) % schleife über alle exponenten
        y(t)=y(t)+p(e)*T(t)^(length(p)-e);
    end
end
end



Eine Lösung könnte z.B. so aussehen (quick & dirty). integral ist vermutlich die bessere Variante. Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.03.2017, 12:55     Titel:
  Antworten mit Zitat      
Hallo,

für die Auswertung von Polynomen gäbe es dann noch die angenehme Funktion polyval . Damit sähe das dann so aus (ungetestet):

Code:
kPoly = @(T) polyval(k, T);
pPoly = @(T) polyval(p, T);
w = integral(@(T) pPoly(T)./kPoly(T), a, b) / integral(@(T) 1./kPoly(T), a, b)
z = integral(@(T) 1./kPoly(T), a, b) / integral(@(T) (1./kPoly(T)).^2, a, b)


Grüße,
Harald

P.S.: wie kommen eigentlich diese Polynome 6. Grades zustande? Sollten diese durch Fit an Daten entstanden sein, dann ist es besser, mit trapz direkt die Daten zu integrieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
-rafael-
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 19:15     Titel:
  Antworten mit Zitat      
@Harald, @Friidayy
Vielen Dank für die Antworten und das Interesse.

Zitat:
P.S.: wie kommen eigentlich diese Polynome 6. Grades zustande? Sollten diese durch Fit an Daten entstanden sein, dann ist es besser, mit trapz direkt die Daten zu integrieren.


Tatsächlich geht es um die Integration von Messdaten und die Polynome 6. Grades sind aus Excel. Also es besser gleich mit trapz auf den Messdaten zu integrieren?

Code:

close all; clc; clear; format long;

%***********************************************************
% numerische Integration von Messdaten
%***********************************************************

% p(T) Daten
x = [227.5   245   260   268   275   281.5   287   300   320   338   345   350   375   385   400   415   425   444   461   476];
y = [0.68   0.79   0.84   0.88   0.918   0.94   0.96   1   1.105   1.22   1.25   1.263   1.358   1.402   1.46   1.52   1.56   1.64   1.7   1.748];
plot(x,y);
hold on;


% k(T) Daten
x   =[227.5   235   241   247   250   265   271   275   281   288   290   300   305   310   315   320   325   335   350   367.5   375   390   400   410   425   435   442.5   450   462   476]
y   =[1.24   1.22   1.2   1.18   1.17   1.12   1.08   1.06   1.04   1.02   1.01   1   1   1   1.005   1.01   1.018   1.02   1.025   1.04   1.048   1.06   1.078   1.1   1.144   1.18   1.22   1.25   1.3   1.383]
plot(x,y);



a=300;      
b=400;      % Integrationsgrenzen
 
Private Nachricht senden Benutzer-Profile anzeigen
 
-rafael-
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 20:25     Titel:
  Antworten mit Zitat      
Friidayy hat Folgendes geschrieben:
Code:
function main
close all; clc;

a=300;      % obere integralgrenze
b=400;      % untere integralgrenze
N=100;      % anzahl an stützstellen
T=linspace(a,b,N);  % diskretisierung des intervalls

% berechnung von w
yp=polynomP(T);         % auswertung des p-polynoms an den stützstellen T
yk=polynomK(T);         % auswertung des k-polynoms an den stützstellen T
Io=trapz(T,yp./yk);     % oberes integral
Iu=trapz(T,1./yk);      % unteres integral
w=Io/Iu

% berechnung von z
Iu_=trapz(T,1./yk.^2);
z=Iu/Iu_

end

function y=polynomP(T)
p=[1 2 3 4 5 6 7];    % koeffizienten
y=zeros(1,length(T));
for t=1:length(T)     % schleife über alle stützstellen
    for e=1:length(p) % schleife über alle exponenten
        y(t)=y(t)+p(e)*T(t)^(length(p)-e);
    end
end
end


function y=polynomK(T)
p=[7 6 5 4 3 2 1];    % koeffizienten
y=zeros(1,length(T));
for t=1:length(T)     % schleife über alle stützstellen
    for e=1:length(p) % schleife über alle exponenten
        y(t)=y(t)+p(e)*T(t)^(length(p)-e);
    end
end
end



Eine Lösung könnte z.B. so aussehen (quick & dirty). integral ist vermutlich die bessere Variante. Gruß


wie kriege ich jetzt yp und yk an den Stützstellen, wenn ich die Messdaten und kein Polynom verwenden möchte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2017, 20:39     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Also es besser gleich mit trapz auf den Messdaten zu integrieren?

Ja. Mit dem Polynom gaukelt man ja einen Funktionsverlauf vor, den es so nicht gibt.

Zitat:
wie kriege ich jetzt yp und yk an den Stützstellen, wenn ich die Messdaten und kein Polynom verwenden möchte?

Du solltest die Messdaten verwenden. Es gibt keine Stützstellen in dem Sinn - die Punkte, an denen du die Daten hast, werden eben als Stützstellen verwendet.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 21:01     Titel:
  Antworten mit Zitat      
Zitat:

Du solltest die Messdaten verwenden. Es gibt keine Stützstellen in dem Sinn - die Punkte, an denen du die Daten hast, werden eben als Stützstellen verwendet.


Die Berechnungn eines bestimmtes Integral mit dem Grenzen [a,b] geht mit trapz also nur dann, wenn ich genau den dazugehörigen Funktionswert (hier Messwert) aufgenommen habe.

Hmm.. Ich will nicht alle aufgenommenen Werte integrieren. da ich aber die Integrationsgrenzen frei wählen möchte [a,b], muss ich also doch erstmal mir eine Funktiongleichung durch Aprox. aus den Messdaten basteln, richtig?

Wie kann ich sinvoll eine Funktions/polynomgleichung aus den Messdaten ableiten, ohne Excel? Any hint? Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wieviele Datenpunkte hast du denn größenordnungsmäßig?

Zitat:
Ich will nicht alle aufgenommenen Werte integrieren.

Dann extrahiere z.B. per logischer Indizierung die Werte innerhalb eines Intervalls.
Sinnvoll wäre es allerdings, wenn die Intervallgrenzen auch als Datenpunkte auftreten. Falls dem nicht so ist, muss man sich an den Intervallenden eine sinnvolle Korrektur überlegen.

Zitat:
Da ich aber die Integrationsgrenzen frei wählen möchte [a,b], muss ich also doch erstmal mir eine Funktiongleichung durch Aprox. aus den Messdaten basteln, richtig?

Nein.

Zitat:
Wie kann ich sinvoll eine Funktions/polynomgleichung aus den Messdaten ableiten, ohne Excel?

Es gäbe bei MATLAB polyfit. Das ist aber wie gesagt unnötig, um nicht zu sagen kontraproduktiv.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.01.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 21:45     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:


Code:


close all; clc; clear;

a=300;      % obere integralgrenze
b=400;      % untere integralgrenze
N=100;      % anzahl an stützstellen
T=linspace(a,b,N);  % diskretisierung des intervalls

p = [-0.000000000000089590713822727100, 0.000000000191126501402920000000, -0.000000167785922984506000000000, 0.000077532439092509900000000000, -0.019879889238285100000000000000, 2.685443065444520000000000000000, -148.862245060971000000000000000000]

k = [-0.0000000000001229445022436, 0.0000000002633331730021610, -0.0000002318448508147230000,  0.0001073185091756460000000, -0.0275088393428537000000000, 3.6951306815672400000000000, -201.6655466415800000000000000]

kPoly = @(T) polyval(k, T);
pPoly = @(T) polyval(p, T);

% berechnung von w
w = integral(@(T) pPoly(T)./kPoly(T), a, b) / integral(@(T) 1./kPoly(T), a, b)
% berechnung von z
z = integral(@(T) 1./kPoly(T), a, b) / integral(@(T) (1./kPoly(T)).^2, a, b)

 




Vielen Dank für das Code, das Ergebnis sieht sehr gut aus! Very Happy Simpel und 100% effektiv.

Code:

w =   1.250464724756490
z =   1.029431046543735
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.