Einführung in die Programmierung
Labor 13
Übungen von Woche 16
2023/2024 Frühjahrssemester
1)
• Berechnen Sie mit rand n = 100, 1000, 2000, 5000 im
Interval [0, 1] gleichverteilte Zufallszahlen, und schauen Sie,
ob sie auch wirklich gleichverteilt sind. Wenden Sie den
Befehl histogram an.
1)
2)
Du hast ein lineares Gleichungssystem in Matrixform gegeben:
Ax = B, wobei:
und
Verwende MATLAB, um das lineare Gleichungssystem mithilfe
der Inversen-Matrix-Methode zu lösen. Verwende den
MATLAB-Befehl «linsolve", um dasselbe lineare
Gleichungssystem zu lösen.
% Given matrix A and vector B
2) A = [2 3; 4 5];
B = [10; 20];
% 1. Solving linear equation system using inverse matrix
method
X_inverse = inv(A) * B;
% 2. Solving linear equation system using backslash operator
(\) or linsolve function
X_backslash = A \ B;
X_linsolve = linsolve(A, B);
% Display the solutions obtained from both methods
disp('Solution using inverse matrix method:');
disp(X_inverse);
disp('Solution using backslash operator:');
disp(X_backslash);
disp('Solution using linsolve function:');
disp(X_linsolve);
3)
• Gegeben sind eine Matrix A und ein Vektor b:
• Lösen Sie Ax=b. x=?
% Coefficients matrix
A = [1, 2, -1;
3) 3, 4, 0;
-2, 3, 1];
% Constants vector
b = [3; 15; 11];
% Solve the system
x = A\b;
disp('Solution:');
disp(x);
4) • Lösen Sie das folgende Gleichungssystem.
2x1-4x2-x3+3x4-x5=3
x1+x2-2x3+x5=6
-x1-3x2+x4+3x5=-4
3x1-x2-x3+4x4-x5=1
x1+x2-x3+2x4=5
4)
% Coefficients matrix
A = [2, -4, -1, 3, -1;1, 1, -2, 0, 1;-1, -3, 0, 1, 3;3, -1, -1, 4, -1;1, 1, -1, 2, 0];
% Constants vector
b = [3; 6; -4; 1; 5];
% Solve the system
x = A\b;
disp('Solution:');
disp(x);
Gegeben ist ein Netzwerk mit ohmschen Widerständen und Spannungsquellen;
5)
Die sich einstellenden Ströme kann man bequem über die Kirchoffschen Regeln
bestimmen:
Knoten P: i1-i2+i3=0
Rechte Schleife: 10i2+(10+15)i3=U1
Linke Schleife: 10i1+10i2=U2
Lösen Sie die Gleichungssystem für;
a) U1=90, U2=80
b) U1=125, U2=90
%Giving U1 and U2 values
5) U1=input("U1=?");
U2=input("U2=?");
% Coefficients matrix
A = [1, -1, 1;
0, 10, 10+15;
10, 10, 0];
% Constants vector
b = [0; U1; U2];
% Solve the system
i = A\b;
i1 = i(2); % Extract i1 from solution vector
i2 = i(2); % Extract i2 from solution vector
i3 = i(3); % Extract i3 from solution vector
disp(['i1 = ', num2str(i1)]);
disp(['i2 = ', num2str(i2)]);
disp(['i3 = ', num2str(i3)]);
6)
Hafize kauft vier Äpfel, zwei Dutzend Bananen und zwei Melonen
für 4,14 TRY. Gaye kauft ein Dutzend Äpfel und zwei Melonen für
5,26 TRY. Erkan kauft ein halbes Dutzend Bananen und drei
Melonen für 2,97 TRY. Wie viel kostet jedes einzelne Stück
Obst? (Es ist empfehlenswert, das Format auf 'bank' zu setzen.)
Verwenden Sie lineare Algebra zur Lösung.
% Definiere die Koeffizientenmatrix A und den Konstantenvektor B
A = [4 24 2; 12 0 2; 0 6 3];
B = [4.14; 5.26; 2.97];
% Löse das System mithilfe der linsolve-Funktion
x = linsolve(A, B);
% Zeige die Ergebnisse an
format bank;
disp('Kosten für einen Apfel, eine Banane und eine Melone jeweils:');
disp(x);
% Kosten für einen Apfel, eine Banane und eine Melone jeweils:
~ 0.31
~ 0.08
~ 0.77
7)
Verwenden Sie lineare Algebra zur Lösung.
% Deklaration der Matrizen auf der Grundlage der Gleichungen
A = [6 2 3; 4 -1 2; 2 1 5]
b = [0; 0; 0]
% Prüfung auf eindeutige Lösung
if rank(A) == 3
display("Einzigartige Lösung existiert"")
else
display("Einzigartige Lösung nicht existiert"")
end
% triviale Lösung
x=A\b
% eine Nullmenge erhalten.
% Dies ist offensichtlich, da A invertierbar ist.
% Sein Nullraum enthält also nur den Nullvektor
x = null(A)
% Ermittlung der Fehler
Err = A*x - b
8) Finden Sie die Lösung dieses Gleichungssystems, indem Sie 3
Methoden verwenden: Konventioneller Weg, Verwendung des
Rückwärtsschrägstrichs , Verwendung von linsolve.
Vergessen Sie nicht zu überprüfen, ob eine eindeutige Lösung existiert.
Am Ende überprüfen Sie die Korrektheit der Lösung, indem Sie den
Fehler berechnen.
% Deklaration der Matrizen auf der Grundlage der Gleichungen
A = [2 1 -1; 1 -2 5; 3 5 -4]
b = [7; -13; 18]
%Erstellen der erweiterten Matrix
Ab = [A b]
% Überprüfung der Ränge
if rank(A) == rank(Ab)
display("Einzigartige Lösung existiert")
else
display("Einzigartige Lösung nicht existiert")
end
%konventioneller Weg der Lösungsfindung
x_inv = inv(A) * b
% unter Verwendung der Mid-Divide von MATLAB
x_bslash = A \ b
% unter Verwendung der Linsolve-Routine von MATLAB
x_linsolve = linsolve(A, b)
% Prüfung auf Fehler
Er1 = A * x_inv - b
Er2 = A * x_bslash - b
Er3 = A * x_linsolve - b
9) Lösen Sie das System Ax = b mit drei Methoden:
Backslash-Operator (\), Matrixinverse (inv) und
linsolve-Funktion. Überprüfen Sie, ob alle Methoden
3a-b+2c=17
die gleiche Lösung für die Zielkoordinaten (x, y und z)
a+4b-2c= 1 liefern. Simulieren Sie reale Szenarien, indem Sie
2a-b+c=3 Zufallsdaten mit Rauschen um die mit dem
Backslash-Operator erhaltene Lösung herum
erzeugen. Gehen Sie davon aus, dass die Position
des Ziels aufgrund von Messfehlern leicht variieren
kann. Erstellen Sie mit histcounts separate
1D-Histogramme für jede Koordinate (x, y und z) in
den generierten Daten. Analysieren Sie die
Histogramme, um die Verteilung der geschätzten
Zielpositionen zu verstehen.
% Definieren Sie eine Matrix A und einen Vektor B
A = [3 -1 2; 1 4 -2; 2 -1 1];
B = [17; 1; 3];
% Lösen Sie Ax = B mit drei Methoden und zeigen Sie die Lösungen an
disp('Lösung mit backslash:')
x_backslash = A \ B;
disp(x_backslash)
disp('Lösung mit inverse:')
x_inv = inv(A) * B;
disp(x_inv)
disp('Lösung mit linsolve:')
x_linsolve = linsolve(A, B);
disp(x_linsolve)
% Erzeugen von Zufallsdaten um die Lösung (x_backslash) mit Rauschen
% Anpassen der Anzahl der Datenpunkte (n), des Bereichs (limit) und des Rauschfaktors (noise_factor)
n = 1000;
limit = 10;
noise_factor = 0.3;
data = x_backslash + noise_factor * randn(n, 3);
data(:,1) = data(:,1) .* limit;
data(:,2) = data(:,2) .* limit;
data(:,3) = data(:,3) .* limit;
% Erstellen separater 1D-Histogramme für x-, y- und z-Daten mit histcounts
edges_x = linspace(0, limit, 20);
edges_y = linspace(0, limit, 20);
edges_z = linspace(0, limit, 20);
[counts_x, ~] = histcounts(data(:,1), edges_x);
[counts_y, ~] = histcounts(data(:,2), edges_y);
[counts_z, ~] = histcounts(data(:,3), edges_z);
% Plotten der Histogramme (nebeneinander)
figure;
% Histogramm für x-Werte
subplot(1,3,1);
bar(edges_x(1:end-1), counts_x, 'histc');
xlabel('x-values');
ylabel('Frequency');
title('Histogram of x');
grid on;
Histogramm für y-Werte
subplot(1,3,2);
bar(edges_y(1:end-1), counts_y, 'histc');
xlabel('y-values');
ylabel('Frequency');
title('Histogram of y');
grid on;
Histogramm für z-Werte
subplot(1,3,3);
bar(edges_z(1:end-1), counts_z, 'histc');
xlabel('z-values');
ylabel('Frequency');
title('Histogram of z');
grid on;
disp(‘Separate 1D-Histogramme mit Histcounts visualisiert.')