Hallo Harald,
es funktioniert genauso, wie es soll. Probleme gibt es nur bei den Werten, die außerhalb meiner Kalibrierfunktion liegen (bei position=-7 und position = 15). Damit es rechnet, habe ich es jetzt erst einmal so gelöst, auch wenn ich mir hier noch anschauen muss, wie das physikalisch zu deuten ist (es geht um das Vermessen einer Nachlaufdelle eines umströmten Körpers mittels Dreilochsonde).
function [passende_winkel] = WinkelAusk_Beta()
clc
clear all
load messung_0.txt
position = messung_0(:,1);
p_1 = messung_0(:,2);
p_2 = messung_0(:,3);
p_3 = messung_0(:,4);
% Mittelwert aus Druck links und rechts
p_m = (p_2+p_3)./2;
% direction coefficient
k_Beta_Messung = (p_2-p_3)./(p_1-p_m);
fid = fopen('k_Beta_Messung.txt','w');
fprintf(fid, '%i %f\n', [position k_Beta_Messung]');
fclose(fid);
plot(position, k_Beta_Messung)
grid
%axis([-75 75 -10 10])
load k_Beta_Kalibrierung.txt
winkel = k_Beta_Kalibrierung(:,1);
k_Beta = k_Beta_Kalibrierung(:,2);
% das sind die in die Funktion einzusetzenden Messwerte
zielwerte = k_Beta_Messung;
% das sind die zu ermittelnden Winkel
passende_winkel = zeros(size(zielwerte));
% existierender Winkelbereich wird feiner aufgeteilt (linearer Abstand, 200 Punkte)
winkelfein = linspace(min(winkel), max(winkel), 200);
% zugehörige Funktionswerte interpolieren
k_Beta_fein = interp1(winkel, k_Beta, winkelfein, 'spline');
for i = 1:numel(zielwerte);
% Nullstellenberechnung
passende_winkel(i) = fzero(...
@(w) interp1(winkel, k_Beta, w, 'spline') - zielwerte(i), ...[-80, 80]);
end
figure()
plot(winkel, k_Beta, 'k+', winkelfein, k_Beta_fein, 'g', passende_winkel, zielwerte, 'r ...
↧