% Demo der Symbolic Toolbox %% Symbolische Funktionen clear; clc; disp('Symbolische Funktionen'); % Deklaration syms a b c; % deklariere symbolische Variablen f = a+b+c % symbolische Funktion % Ersetzen von Variablen durch Zahlenwerten oder Ausdruecke subs(f, a, 3) % Ersetze a durch 3 subs(f, a, b) % Ersetze a durch (bereits als symb. def.) Variable b subs(f, a, 'x') % Ersetze a durch (noch nicht als symb.) Variable x subs(f, a, (b+c)^2) % Ersetze a durch den Term (b+c)^2 subs(f, [a,b,c], [1,2,3]) % Ersetze die Variablen durch die Werte/Terme %% Manipulation algebraischer Ausdruecke clear; clc; disp('Manipulation algebraischer Ausdruecke'); syms a b; % deklariere symb. Variablen f = a^2-2*a*b+b^2 % symb. Funktion fe = factor(f) % faktorisieren expand(fe) % ausmultiplizieren disp('simple anwenden') simple(f) % (bestmoeglich) vereinfachen %% Algebraische Gleichungen %% Loese nach der einzigen Variablen auf clear; clc; disp('Loese nach der einzigen Variablen auf') % Loese x^2=16: Variante 1 solve('x^2 = 16') % Loese x^2=16: Variante 2 syms x; y = x^2-16; solve(y, x) % Loest y(x) = 0 % Numerisch mit fzero() disp('Numerisch mit fzero():') x0 = 1; % f_hand = @(x)subs(y,x); % Functionshandle aus symbolischer Fkt. erzeugen sol = fzero(f_hand, x0) disp(['Loesung ',num2str(sol),' bei Startloesung ', num2str(x0)]); %% Loese nach einer bestimmten Variablen auf ("Umstellen nach") clear; clc; disp('Loese nach einer bestimmten Variablen auf') % Stelle y = 2*x^2+4 nach x um syms x y; f = 2*x^2+4-y % Notwendig: f(x,y) = 0 solve(f,x) %% Algebraische Gleichungssysteme %% Lineares System % a + b = 3 % a + 2*b = 6 %% Variante 1: symbolisch % via f_1(a,b) := a + b - 3 = 0 % f_2(a,b) := a + 2*b - 6 = 0 clear; clc; disp('Lineares System Variante 1: symbolisch') syms a b; f(1) = a + b - 3; f(2) = a + 2*b - 6; [A,B] = solve(f(1),f(2)) % 2 symb. Variable als Ergebnis % bzw SOLUTION = solve(f(1),f(2)) % Cell Array als Ergebnis SOLUTION.a SOLUTION.b %% Variante 2: numerisch % via loesen von K*x = f (x enthaelt Loesung fuer [a;b]) clear; clc; disp('Lineares System Variante 2: numerisch') % Koeffizientenmatrix K = [1 1; 1 2] % rechte Seite f = [ 3; 6] % Loesen des linearen Gleichungssystems x = K\f %% Nichtlineares System % a^2 + b^2 = 1 % a + b = 1 %% Variante 1: symbolisch % via f_1(a,b) := a^2 + b^2 - 1 = 0 % f_2(a,b) := a + b - 1 = 0 clear; clc; disp('Nichtlineares System Variante 1: symbolisch ') syms a b; f(1) = a^2 + b^2 - 1; f(2) = a + b - 1; [A,B] = solve(f(1),f(2)) % bzw SOLUTION = solve(f(1),f(2)) SOLUTION.a % beide Loesungen werden ausgegeben SOLUTION.b % Eine einzelne Loesung extrahieren Solution1 = [SOLUTION.a, SOLUTION.b] % numerische Loesung via fsolve(); disp('Nichtlineares System Variante 2: numerisch') x_0 = [0.5, 0.6]; sol = fsolve(@(x)[x(1)^2 + x(2)^2 - 1; x(1) + x(2) - 1], x_0) disp(['Numerische Loesung ',num2str(sol),' bei Startloesung ',num2str(x_0)]) %% Integrieren und Differenzieren nach einer Variablen clear; clc; disp('Integrieren und Differenzieren nach einer Variablen') syms x; f = x^2 - 3*x + 4 % Differenzieren diff(f) % oder diff('x^2 - 3*x + 4') % Integrieren int(f) % unbestimmtes Integral int(f,x) int(f,0,1) % bestimmtes Integral int(f,x,0,1) %% Integrieren und Differenzieren mehrdimensionaler Funktionen clear; clc; disp('Integrieren und Differenzieren mehrdimensionaler Funktionen') syms a b f = [a^2 + b^2 - 1, a + b - 1] Jac = jacobian(f); f1_a = diff(f(1),a) int(f(1)) int(f(1),a) int(f(1),a,1,2);