我在matlab中用分步法求解具有位势项的NLSE方程。我想看到它的数值解。u=sech(x)是该数值算法中的初始猜测解。但我想在matlab的这个初始猜测解中添加10%的随机扰动。该怎么做呢?是不是像这样:
u=sech(x)+10/100*cos(x)其中随机扰动是正弦的。
发布于 2017-08-11 01:00:33
首先,你必须详细说明你所说的10%随机扰动到底是什么意思。如果您只想添加以u的实际值为中心的白噪声,则可以执行以下操作
% sample x values
x = 0:0.01:5;
noise_fraction = 0.1; % 10%
% the actual values
u=sech(x);
% the noise
u_noise = noise_fraction*u.*(rand(size(x))-0.5);
figure(1);cla(gca);
hold on;
nh = plot(x, u_noise);
ch = plot(x, u + u_noise);
sh = plot(x, u);
hold off;
legend([sh, nh, ch,], {'Signal', 'Noise', 'Combined'});您应该会得到以下结果

或者,如果您希望噪波级别独立于信号并具有0.1振幅,与您在问题中尝试执行的操作类似,您可以从噪波方程中删除u。
u_noise = noise_fraction*(rand(size(x))-0.5);你会得到

发布于 2017-08-10 22:58:33
我还不能在你的帖子下发表评论,但如果你想要一个随机扰动,为什么不使用rand或类似的函数呢?Rand返回一个从0到1的标量或随机值数组,可以很容易地将其约束为任何所需的间隔。我用它作为我的wave问题中的随机噪声。
https://stackoverflow.com/questions/45614158
复制相似问题