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

Summe und anschließendes differenzieren

 

Florian
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2010, 13:30     Titel: Summe und anschließendes differenzieren
  Antworten mit Zitat      
Hallo an alle,
habe ein syntaktisches Problem mit Matlab.
ich möchte folgende Funktion f in matlab verwenden.
dabei soll _j den Index der jeweiligen Variable andeuten.
die Summe geht von j=1 bis n=3

f= Summe[V_j*cos(t_1 -t_j) ,j=1..n ]
also in ausgeschriebener Form:

f=V_1*cos(t_1-t_1)+V_2*cos(t_1-t_2)+V3*cos(t_1-t_3)

anschließend möchte ich diese Funktion f nach t_2 ableiten

wie kann ich so eine Funktion am elegantesten in Matlab implementieren um ein anschließendes Differenzieren zu ermöglichen.

habe mich bereits länger mit der Implementierung beschäftigt komme aber zu keiner Lösung. Wollte die Summe durch eine for-Schleife realisieren habe dabei aber Probleme mit den Laufvariablen.

Hoffe es kann mir jemand weiterhelfen. und anhand eines kurzen Cdebeispiel erläutern.
(es kann auch der Fall n=100 auftreten deshalb möchte ich die Funktion f nicht händisch eintippen)

danke für eure Hilfe
Private Nachricht senden Benutzer-Profile anzeigen


InspectorGadget
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 52
Anmeldedatum: 16.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2010, 14:49     Titel:
  Antworten mit Zitat      
Hi Florian,

eine Traumlösung kann ich Dir leider nicht bieten. Ein bischen Schreibarbeit bleibt noch übrig.
Mein Vorschlag wäre:
Code:
%Variablen festlegen
syms v1 v2 v3 v4 v5;
syms t1 t2 t3 t4 t5;

%Variablen zu Vektor zusammenfassen
v = [v1 v2 v3 v4 v5];
t = [t1 t2 t3 t4 t5];

%Summe berechnen
f = v .* cos(t1-t);
s = sum (f,2);
d = diff(f,t2);

x=subs(s,{v1 v2 v3 v4 v5 t1 t2 t3 t4 t5},{1 2 3 4 5 0 0 0 0 0});

Die Schreibarbeit ist gleich am Anfang. Hier musst Du die Variablen leider mit der Hand eintippen. Um die Funktion am Ende ableiten zu können muss es nun mal als Symbol bekannt sein, und ich weiss keinen Weg, das anders zu machen.
Die Berechnung ist dann im Grunde recht simpel. Hab einfach nur Deine Funktion eingetippt.
Das subs am Ende kannst Du natürlcih weglassen. Aber Du willst am Ende sicher einen Wert haben. Smile
Vielleicht weiss jemand noch, wie man Variablen automatisch erstellen kann.

Gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Florian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2010, 15:47     Titel:
  Antworten mit Zitat      
hallo,
danke für deinen beitrag bin mittlerweile im prinzip auch so weit (meine lösung mit for-schleife).
wär super wenn jemand wüsste wie man die variablen automatisch erzeugt!!!
danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.02.2010, 16:12     Titel:
  Antworten mit Zitat      
symbolische arrays kann man z.b. mit folgender Funktion erzeugen:

Code:

function a = symbolic_array(name,n)
% Aufruf: a = symbolic_array(name,n)
% erstellt array der Größe n mit symbolischen Variablen
% falls n eine ganze Zahl ist wird ein Vektor mit symbolischen Variablen
% erstellt

if sum(size(n)) == 2
    a = zeros(n,1);
    syms a;
    for k = 1:n
        string = [name,num2str(k)];
        a(k) = sym(string);
    end
else
    a = zeros(n);
    syms a;
    for k = 1:n(1)
        for l = 1:n(2)
            string = [name,num2str(k),num2str(l)];
            a(k,l) = sym(string);
        end
    end
end
 


damit verkürzt sich der code zu:

Code:


v = symbolic_array('v',5);
t = symbolic_array('t',5);

%Summe berechnen
f = v .* cos(t(1)-t);
s = sum (f,2);
d = diff(f,t(2));

x=subs(s,{v t},{1 2 3 4 5 0 0 0 0 0})


 


viele Grüße
Thomas
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.