我目前是一名物理系学生,几周来一直在编写与“量子纠缠”相关的数据。我现在已经到了一个点,我必须绘制我的数据(它应该类似于cos²图 - 并且确实如此)到一种“最适合”的cos²图形。实验室脚本说明如下:
更精确地确定能见度V(这基本上是数据的“干净”)遵循使用该函数最佳拟合测量数据:
f(b)= A / 2 [1-Vsin(b-b(中)/ P)]
当然,这可能并不意味着脱离背景,但基本上A是幅度,b是角度,P是周期性。因此,这也是我发现的实验数据之类的“波动”。
据我所知,正如前面提到的,我正在制作一个“最合适”的曲线。但是,有人告诉我,Excel无法做到这一点,最好的方法是Matlab。
我知道中级JavaScript,但不了解Matlab,并希望有一些方向。
我可以阅读这个教程吗?有人可以和我一起经历吗?我真的不知道它需要什么,所以任何反馈都会非常感激。
非常感谢!
答案 0 :(得分:4)
我想我们应该首先在Matlab中获得您正在尝试建模的函数的表示。公式的直接翻译如下:
function y = targetfunction(A,V,P,bc,b)
y = (A/2) * (1 - V * sin((b-bc) / P));
end
我的下一步是生成一些可以使用的数据(当然,您将使用自己的数据)。所以这是一个产生一些噪声数据的函数。请注意,我已经为参数提供了一些值。
function [y b] = generateData(npoints,noise)
A = 2;
V = 1;
P = 0.7;
bc = 0;
b = 2 * pi * rand(npoints,1);
y = targetfunction(A,V,P,bc,b) + noise * randn(npoints,1);
end
函数rand
在[0,1]
区间生成随机点,然后我将它们乘以2*pi
以在区间[0, 2*pi]
上随机获得点数。然后我在这些点应用了目标函数,并添加了一点噪声(函数randn
生成正态分布的随机变量)。
最复杂的功能是使模型适合您的数据。为此,我使用函数fminunc
,它执行无约束最小化。例程如下所示:
function [A V P bc] = bestfit(y,b)
x0(1) = 1; %# A
x0(2) = 1; %# V
x0(3) = 0.5; %# P
x0(4) = 0; %# bc
f = @(x) norm(y - targetfunction(x(1),x(2),x(3),x(4),b));
x = fminunc(f,x0);
A = x(1);
V = x(2);
P = x(3);
bc = x(4);
end
让我们一行一行。首先,我定义了我想要最小化的函数f
。这不是太难。为了最小化Matlab中的函数,需要将单个向量作为参数。因此,我们必须将四个参数打包到一个向量中,我在前四行中进行了这一操作。我使用了与我用来生成数据的值接近但不相同的值。
然后我定义了我想要最小化的函数。它需要一个参数x
,它将解包并提供给targetfunction
,以及数据集中的点b
。希望这些接近y
。我们通过从y
中减去y
并应用函数norm
来衡量它们的距离,这些函数将每个组件平方,将它们相加并取平方根(即它计算根均值)方误差)。
然后我调用fminunc
,使我们的函数最小化,并初步猜测参数。这使用内部例程为每个参数找到最接近的匹配,并在向量x
中返回它们。
最后,我从矢量x
中解压缩参数。
我们现在拥有了我们需要的所有组件,因此我们只需要一个最终功能将它们连接在一起。这是:
function master
%# Generate some data (you should read in your own data here)
[f b] = generateData(1000,1);
%# Find the best fitting parameters
[A V P bc] = bestfit(f,b);
%# Print them to the screen
fprintf('A = %f\n',A)
fprintf('V = %f\n',V)
fprintf('P = %f\n',P)
fprintf('bc = %f\n',bc)
%# Make plots of the data and the function we have fitted
plot(b,f,'.');
hold on
plot(sort(b),targetfunction(A,V,P,bc,sort(b)),'r','LineWidth',2)
end
如果我运行此功能,我会看到它被打印到屏幕上:
>> master
Local minimum found.
Optimization completed because the size of the gradient is less than
the default value of the function tolerance.
A = 1.991727
V = 0.979819
P = 0.695265
bc = 0.067431
出现以下情节:
这个合身对我来说足够好看。如果您对我在这里所做的任何事情有任何疑问,请与我们联系。
答案 1 :(得分:0)
当你提到f(a)并且你的函数不包含a时,我有点惊讶,但一般来说,假设你要绘制f(x)= cos(x)^ 2
首先确定要绘制哪个x值,例如
xmin = 0;
stepsize = 1/100;
xmax = 6.5;
x = xmin:stepsize:xmax;
y = cos(x).^2;
plot(x,y)
但是,请注意,这种方法在excel中同样适用,您只需要做一些工作来获取x值并在正确的单元格中运行。