Lineares Gleichungssystem - Seite 2

Neue Frage »

tigerbine Auf diesen Beitrag antworten »

Hast du denn mal gescheckt, ob dein A0 überhaupt richtig generiert wird. Es fehlen ja schon die ends der Schleifen und wo sprichst du die Elemente der Matrix an?

Und nur der Befehl ones ist auch nicht richtig benutzt. So erzeugst du nur b=1. nutze die matlab interne Hilfe oder google mal ein Einleitungsskript.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
help ones

 ONES   Ones array.
    ONES(N) is an N-by-N matrix of ones.
    ONES(M,N) or ONES([M,N]) is an M-by-N matrix of ones.
    ONES(M,N,P,...) or ONES([M N P ...]) is an M-by-N-by-P-by-...
    array of ones.
    ONES(SIZE(A)) is the same size as A and all ones.
 
    See also ZEROS.


Ferner, wenn ich den code bei mir laufen lassse, kommt die Meldung

code:
1:
2:
3:
testqr
??? Error: File: C:\matlabR12\work\testqr.m Line: 114 Column: 1
"end" expected, "End of Input" found.


Ändern wir das mal ab. Ferner muss auch pause raus, das diente ja nur für den Vorrechneoutput zur Übersicht.

deine Fehlermeldung rührt daher, dass du "ans" doch kommentiert hast%. Wie soll dann "==" ausgeführt werden? Wir wollen ja ausrechnen, ohne 1 einzugeben. Ferner setzt du n unendlich, aber das muss doch die aktuelle Abmessung der Matrix sein. du musst das je Iteration erhöhen.

Ferner ist auch noch ein disp nicht commanded worden.

du kannst n nun fest oder als Schleife laufen lassen. Ich weise darauf hin, dass mein Programm nicht dafür konzipiert ist, schnell zu rechnen, sondern die QR-Zerlegung "von Hand" durchzuführen.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
%QR-Zerlegung mit Householder

clear all;
disp('Es wird eine QR-Zerlegung mit Householder berechnet.')
disp('====================================================')
disp('---------------------------')
disp('| H=I-ß*uu^T |')
disp('| u=x+sign(x1)*||x||_2*e1 |')
disp('| ß=2/(u^Tu) |')
disp('---------------------------')
%disp(' ')

for  n=200
clear min;
%Matrix A erzeugen
for i=1:n
    for j=1:n
    A0(i,j)=[exp(-abs(i-j))];
    end
end
A0;
%Vektor b erzeugen
b=ones(n,1);
b;


%disp(' ')
%disp(' ')
n=length(A0);
m=length(A0');
A=A0;
min=min(m-1,n);
Q=eye(n);

% % Ist b ein Spaltenvektor ?
% [q,p] = size(b);
% if q~=n
% error('b hat die falsche Dimension!');
% end


for k=1:min
%fprintf('Durchgang %g n', k)
%disp('================')

clear x;
clear u;
clear beta;
clear e1;

e1=zeros(m+1-k,1);
for i=k:min+1
x(i+1-k,1)=A(i,k);
end
x;
x2=norm(x,2);
signx=sign(x(1,1));
e1(1,1)=1;
e1;

u=x+signx.*x2.*e1;
beta=2/(u'*u);

id=eye(n+1-k);
%disp(' ')
H=id-beta.*(u*u');

Qk=eye(n);
for i=k:n
for j=k:n
Qk(i,j)=H(i+1-k,j+1-k);
end
end
Qk;
Q=Qk*Q;
Ak=Qk*A;


A=Ak;
% disp(' ')
% pause
end


R=A;
A=A0;
Q=Q';
% disp(' ')
% disp('Die QR-Zerlegung mit Householder')
% disp('--------------------------------')
% A
% Q
%R


%Berechnung einer LGS Lösung
%disp(' ');
%ans=input('Soll noch ein LGS gelöst werden? 0-nein, 1-ja: ');

% if ans==0
% break
% else
%b=input('Vektor b eingeben: ')

%Qy=b lösen. Q ist orthogonal Q^(-1)=Q'
y=Q'*b;

%Rx=y durch Rückwärtssubstitution lösen.
x(n,1)=y(n,1)/R(n,n);
sum=0;
for i=(n-1):-1:1
for j=i+1:n
sum=sum+R(i,j)*x(j,1);
end
x(i,1)=(y(i,1)-sum)/R(i,i);
sum=0;
end
x;
solved=n

%Kontrolle
%xm=Ab

end
end
Manuel20 Auf diesen Beitrag antworten »

Yeah, das ist super!
Ja, ich lese gerade ein Einführungsskript..40seitig, aber für den Anfang sollte das eigentlich reichen smile

Eine Frage zu unserem vorletzten Code (QR-Zerlegung) hätte ich aber noch:
Wie wäre der zu ändern, falls man das lineare Gleichungssystem:

lösen möchte, indem man eingibt und als Ausgabe erscheint?

seien gemessene Wertepaare. sei eine (mit Fehlern behaftete) Approximation von an der Stelle
Ziel ist eigentlich, eine affine Abbildung zu finden (genauer also eigentlich den Vektor ), welche f im quadratischem Mittel möglichst gut beschreibt. Dazu soll die Matrix
[attach]14016[/attach]
tigerbine Auf diesen Beitrag antworten »

Hi Manuel,

nur flüchtig überlesen sieht mir das so aus, dass du die Normalengleichungen mit QR-lösen willst.

[WS] Lineare Ausgleichprobleme

musst hakt ein bisschen drin rumscrollen. Für eine Codeanpassung habe ich im Moment keine Zeit.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »