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

Nutzer auffordern zur Eingabe beider Gleichungen.

 

Serenum
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.07.2017, 16:06     Titel: Nutzer auffordern zur Eingabe beider Gleichungen.
  Antworten mit Zitat      
Hallo alle zusammen,

ich muss zwei nichtlineare Gleichungen mit zwei Unbekannten mit dem Newtonschen Verfahren lösen. Das ist soweit gelöst. Aber das Programm muss den Nutzer auffordern zur Eingabe beider Gleichungen und genau hier habe ich mein Problem.

Hat jemand eine Idee?

Code:
% ~~~~~~~ PROGRAMM START ~~~~~~~ %
disp('Beispielfunktion: x^2+y^2+y-1');
f1=@(x,y) input('Bitte geben Sie die erste Funktion ein: ');
disp(' ');
disp('Beispielfunktion: x^2-y^2+x-y-2');
f2=@(x,y) input('Bitte geben Sie die zweite Funktion ein: ');
   
f1x=@(x) 2*x;
f1y=@(y) 2*y+1;
f2x=@(x) 2*x+1;
f2y=@(y) -2*y-1;
   
x=[0;0];
i=0;
epsilon=1e-6
while norm([f1(x(1),x(2));f2(x(1),x(2))]) > epsilon
sol=[f1x(x(1)),f1y(x(2));f2x(x(1)),f2y(x(2))]\-[f1(x(1),x(2));f2(x(1),x(2))];
x(1)=x(1)+sol(1);
x(2)=x(2)+sol(2);
disp(['Iteration: ' num2str(i)]);
disp(['Lösung   : ' num2str(x','%1.7f\t')]);
i=i+1;
end
% ~~~~~~~ PROGRAMM ENDE ~~~~~~~ %


Gruß Serenum.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.07.2017, 17:28     Titel:
  Antworten mit Zitat      
Hallo,

Code:
f1=str2func(['@(x,y)' input('Bitte geben Sie die erste Funktion ein: ', 's')])


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.07.2017, 18:19     Titel:
  Antworten mit Zitat      
Super, es hat funktioniert.

Vielen Dank Harald!

Habe aber jetzt weiteres Problem. Ich muss die eingegebenen Funktionen und Ergebnisse in einer Datei im CSV-Format abspeichern. Ich habe es mit SAVE Befehl versucht, aber es klappt nicht.

Hast du eventuell eine Idee wie ich das umsetzen kann?

Code:
save('Ergebnisse.csv','f1','f2','-ascii','-double','-tabs')
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

mir ist schleierhaft, wie man ein Function Handle zusammen mit Zahlen in .csv abspeichern möchte.
Grundsätzlich würde ich dazu fprintf statt save verwenden.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 27.07.2017, 18:57     Titel:
  Antworten mit Zitat      
Danke für den Tipp, werde es ausprobieren und Melde mich dann.

Gruß Serenum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 28.07.2017, 17:34     Titel:
  Antworten mit Zitat      
Hallo,

ich habe es leider nicht lösen können mit dem Befehl
Code:
die Eingegebenen Funktionen und Lösungen abzuspeichern. Dann habe ich noch mit dem Befehl
Code:
diary('textdatei.txt')
versucht den ganzen Command Window abzuspeichern, erzeugt zwar die Textdatei, aber sie ist leer.

Hast du eventuell ein Tipp.

Gruß Serenum.
Private Nachricht senden Benutzer-Profile anzeigen
 
Serenum
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 24.06.17
Wohnort: ---
Version: R2017a
     Beitrag Verfasst am: 29.07.2017, 01:07     Titel:
  Antworten mit Zitat      
Ich habe es jetzt so gelöst, ist zwar keine schöne Variante, aber mehr ist mir nichts eingefallen da ich das abgeben muss. Hier der vollständige Code, falls jemand ein ähnliches Problem hat wie ich.

Allen nochmals vielen Dank für ihre Unterstützung!

Code:
% ~~~~~~~ PROGRAMM START ~~~~~~~ %
clc % Reinigt "Command Window"
clear all % Loescht alle definierten Variablen aus dem Matlabspeicher

% *** Darstellung des Hinweistextes in dem "Command Window" *** %
disp(' '); % Fuegt eine Leerezeile im "Command Window" ein
disp('HINWEIS: Funktionen und Ergebnisse werden nach der Berechnung automatisch in dem aktuellen Ordern im CSV-Format gespeichert!') % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
disp('Dateinemen lautet: Ergebnisse.csv') % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'

% *** Aufforderung zur eingabe von ersten und zweiten Funktion *** %
disp(' '); % Fuegt eine Leerezeile im "Command Window" ein
disp('Beispielfunktion: x^2+y^2+y-1'); % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
fun1 = input('Bitte geben Sie die erste Funktion ein: ', 's');

disp(' '); % Fuegt eine Leerezeile im "Command Window" ein
disp('Beispielfunktion: x^2-y^2+x-y-2'); % Zeig auf dem "Command Window" den Text in den Klammer 'TEXT'
fun2 = input('Bitte geben Sie die zweite Funktion ein: ', 's');

%  *** Jacobi wir in Sym-Typ umgewandelt *** %
f1=str2func(['@(x,y)' fun1]);
f2=str2func(['@(x,y)' fun2]);

% *** Jacobi Berechnung *** %
syms Symfun1 Symfun2 x y

Symfun1 = sym(fun1);
Symfun2 = sym(fun2);

Jacobi = jacobian([Symfun1 Symfun2]);
% *** Jacobi Berechnung Ende *** %

% *** Verteilung einzelnen Teile als "handles" *** %
f1x= str2func(['@(x)' char(Jacobi(1,1))]);
f1y= str2func(['@(y)' char(Jacobi(1,2))]);
f2x= str2func(['@(x)' char(Jacobi(2,1))]);
f2y= str2func(['@(y)' char(Jacobi(2,2))]);

warning('off') % Warn- und Informationstexte werden im "Command Window" ausgeblendet

% *** Darstellung der angegebenen Funktionen im "Command Window" *** %
disp(' '); % Fuegt eine Leerezeile im "Command Window" ein
disp('EINGEGEBENE FUNKTIONEN: ');

% *** Speicher als CSV-Datei ab, alles was im "Command Window" ablaeuft *** %
diary ('Ergebnisse.csv');

fun1
fun2

disp(' '); % Fuegt eine Leerezeile im "Command Window" ein
disp('ERGEBNISSE: ');  
x=[0;0]; % Startwert der Iteration
i=0;
epsilon=1e-6
while norm([f1(x(1),x(2));f2(x(1),x(2))]) > epsilon;
sol=[f1x(x(1)),f1y(x(2));f2x(x(1)),f2y(x(2))]\-[f1(x(1),x(2));f2(x(1),x(2))];
x(1)=x(1)+sol(1);
x(2)=x(2)+sol(2);
disp(['Iteration: ' num2str(i)]);
disp(['Loesung   : ' num2str(x','%1.7f\t')]);
i=i+1;
end;
diary off;
% ~~~~~~~ PROGRAMM ENDE ~~~~~~~ %


Gruß Serenum.
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.