// 温度-抵抗データの読み込み X = fscanfMat("Pt.dat"); T = X(:,1); R = X(:,2); // Bloch-Gruneisen関数の定義 function R = BG(T) R = r0 + a .* ((T ./ dt) .^ 5) .* integrate('(x .^ 5) ./ ((exp(x) - 1) .* (1 - exp(-x)))','x',0,dt ./ T); endfunction // フィッティング function e = f1(fitparam,m) dt = fitparam(1); //デバイ温度 a = fitparam(2); //物質定数 r0 = fitparam(3); //残留抵抗 e = R - BG(T); endfunction [fitparam, v] = lsqrsolve([200;100;0.9],f1,size(T,1)); dt = fitparam(1) //デバイ温度 a = fitparam(2) //物質定数 r0 = fitparam(3) //残留抵抗 // 抵抗データとフィッティング結果のプロット scf(0) plot(T,R,'+r'); plot(T,BG(T),'-g'); zoom_rect([0,0,300,120]) //描画領域[x1,y1,x2,y2] xlabel("Temperature (K)"); ylabel("$\mathrm{Resistance} (\Omega)$"); // 相対誤差のプロット scf(1) plot(T,(R - BG(T))./BG(T),'+r'); zoom_rect([0,-0.30,300,0.15]) //描画領域[x1,y1,x2,y2] xlabel("Temperature (K)"); ylabel("Relative error");