Verfasst am: 10.03.2017, 18:17
Titel: Division und Integration von Polynomen
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:
und
p(T) ist ein Polynom 6-ten Grades:
Also p als Vektor mit dem Koeffizienten:
Code:
p = [-0.000000000000089590713822727100, 0.000000000191126501402920000000, -0.000000167785922984506000000000, 0.000077532439092509900000000000, -0.019879889238285100000000000000, 2.685443065444520000000000000000, -148.862245060971000000000000000000]
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ß
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.
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.
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_
function y=polynomP(T)
p=[1234567]; % 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=[7654321]; % 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
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)
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.
@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?
%***********************************************************
% numerische Integration von Messdaten
%***********************************************************
% p(T) Daten
x = [227.5245260268275281.5287300320338345350375385400415425444461476];
y = [0.680.790.840.880.9180.940.9611.1051.221.251.2631.3581.4021.461.521.561.641.71.748];
plot(x,y);
hold on;
% k(T) Daten
x =[227.5235241247250265271275281288290300305310315320325335350367.5375390400410425435442.5450462476]
y =[1.241.221.21.181.171.121.081.061.041.021.011111.0051.011.0181.021.0251.041.0481.061.0781.11.1441.181.221.251.31.383] plot(x,y);
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_
function y=polynomP(T)
p=[1234567]; % 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=[7654321]; % 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
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.
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
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.
% 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)
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
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.