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: ');
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?
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.
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" clearall% 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
% *** 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 whilenorm([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 ~~~~~~~ %
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.