Funktion aus Matrix definieren < Matlab < Mathe-Software < Mathe < Vorhilfe
|
hi,
folgendes problem:
ich habe eine (2 x 5002) matrix. das sind messwerte. wenn ich mir meine matrix definiere mit [mm] a=\pmat{ a11 & a12 \\ \vdots & \vdots \\ an1 & an2} [/mm] und dann plotte, zeichent er mir ne schöne funktion. nun möchte ich diese funktion in einem intervall integrieren. nun würde ich meine matrix quasi als funktion f(x) definieren, sodass ich einfach f(x) integrieren kann. geht das so? wie geht das? ich habs mit function und einer for schleife versucht, aber iwie kann ich die beiden sachen nich in einklang bringen.
meine function, die ich als f.m speicher:
function y=f(x);
y=(c(n)-c(n-1))/(b(n)-b(n-1))*x;
hier sind natürlich c und b unbekannt. daher in meiner mail file:
n=5002;
for m=1:n;
f(x)=(c(n)-c(n-1))/(b(n)-b(n-1));
end
ich möchte die fkt durch die steigung m definieren, indem ich alle steigungen ausrechnen. der y-achsenabschnitt ist 0.
das funktioniert natürlich nich. aber wir bekomm ich das zum laufen? kann ich evtl noch anders integrieren? habs auch mal mit trapz versucht... wenn ihr meint, damit geht das, dann kann ichs nochma versuchen aber bräuchte noch n paar tipps.
schöne grüße
edit;
hab ich vergessen:
b=-a(:,1);
c=-a(:,2);
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:53 Do 12.05.2011 | Autor: | wieschoo |
Möchtest du die Fläche unter der Kurve?.
Falls du jedoch die Funktion vom Graphen meinst, den du plottest, dann bezweifle ich stark, dass die Funktion überhaupt integriebar ist.
Die Idee mit den Trapezen ist gut. Wenn die Funktion geplottet ist, dann hast du sowie so nur ganz viele kleine Trapeze.
Vielleicht hilft dir die Gaußsche Trapezformel
|
|
|
|
|
hey, danke für deine antwort.
hier mein plot:
[Dateianhang nicht öffentlich]
also ich möchte wirklich nur die fläche ausrechnen bzw die flläche, die rot markiert ist. den "wert des schwarzen striches", also der unteren begrenzung kenn ich, das intervall auch. das is kein problem. aber die "funktion" sieht ja nunmal extrem unintegrabel aus aber matlab muss doch irgendeine funktion haben, die das schafft... oda eben näherungsweise... geht das irgendwie?
schöne grüße
Dateianhänge: Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
|
|
|
|
|
Sieht toll aus.
Vielleicht hilft dir:
trapz oder
cumrapz
Ich denke trapz ist das was du sucht. Dann musst du nur noch das Rechteck drunter abziehen, falls du ein paar Messwerte bereitstellt, dann würde ich auch mal schauen.
|
|
|
|
|
hi,
danke für die antwort.
ich habs jetzt mal mit trapz probiert. ich habe jetzt folgendes stehen (a is meine matrix):
b=-a(:,1);
c=-a(:,2);
x=6.5e-08:0.1e-08:1.45e-07;
y=c(217):c(296);
z=trapz(x, y);
also bei x=6.5e-08 ist y=c(217) und bei x=1.45e-07 ist y=c(296). die schrittweite bei x hab ich angepasst, damit die länge von x und y gleich sind. nun weiß ich aber nich, ob das ergebnis richtig is ^^ v.a. wegen des intervalls. ich bekomm z= 9.1532e-006. also, wär denn der weg richtig? würde ich so was gescheites rausbekommen?
die sklarierung der x-achse kann ich nich nachvollziehen. vllt fehlen da einfach n paar 10er potenzen ^^
ich hab dir mal meine messwerte angehängt.
Datei-Anhang
schöne grüße
Dateianhänge: Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
|
|
|
|
|
hi,
ich glaub ich habs hinbekommen. danke!!
sg
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:00 Sa 14.05.2011 | Autor: | wieschoo |
Es wäre klasse, wenn du uns an deiner Lösung teilhaben lässt. Ich finde manch einmal oft Beiträge aus der Vergangenheit, die interessant sind und ohne Lösung aber mit "habs hinbekommen" enden.
|
|
|
|
|
hi,
sry, dass ich erst so spät antworte. mich ärgert das auch immer. deswegen mach ich das jetzt hier ^^
ich hab trapz benutzt. mein quellcode (a is meine matrix):
b=a(:,1);
c=a(:,2);
plot(b,c);
x=b(1618:7433);
y=c(1618:7433);
z=trapz(x, y);
falls es fragen gibt, fragt, oda sagt man, wie mans besser machen kann ^^
sg
|
|
|
|