For循环在MATLAB产生nan

1视图(30天)
billyjthorton
billyjthorton 2018年10月20日
回答: 明星黾 2018年10月22日
问候!我需要一些调试帮助试图找出有什么问题我的for循环在这个程序中。对于一些背景:这个想法是为了编写一个程序来估计物体的位置和频率。为了做到这一点,我第一次使用一个网格搜索产生的估价对象的位置,然后迭代最小二乘(ILS)循环产生更准确的估计。
这是代码:
清晰的
关闭所有
clc
%例2节课8
负载(“Lecture8_example2_Fall2018”)
%参与的目的
time_between_measurements = 10%秒
collect_duration = 5 * 60%秒
aircraft_speed = 150 * 0.51444%米每秒
aircraft_altitude = 10000/3.281%米
signal_transmit_frequency = 300 e6%赫兹
initial_transmit_frequency_error = -50%赫兹
FOA_sigma = 1%赫兹
c = 299792.458 e3
%的测量
n = 31
%频率估计
f = signal_transmit_frequency + initial_transmit_frequency_error
%的位置
aircraft_pos_m = distdim (aircraft_pos_nmi ',“纳米”,“米”)
z = z_meas
a_dot_aircraft = (aircraft_speed 0 0) '
%设置R值
R =眼(31)*诊断接头(FOA_sigma ^ 2)
%网格搜索获得最初的估计
%网格搜索应该从10:1:10敝中断在x和y的空间
x_grid = distdim (-10“纳米”,“米”):distdim (1,“纳米”,“米”):distdim (10,“纳米”,“米”)
y_grid = distdim (-10“纳米”,“米”):distdim (1,“纳米”,“米”):distdim (10,“纳米”,“米”)
i = 1:长度(x_grid)
j = 1:长度(y_grid)
k = 1: n
p = [x_grid (i); x_grid (j); 0];
:= aircraft_pos_m (k) ';
r =常模(p - aircraft_pos_m (k,:));
r_dot = - (1 / r) * (p - a) * (a_dot_aircraft);
:h_grid (k) = (1 - r_dot / c) * f;
结束
总和g (i, j) = ((z_meas - h_grid) ^ 2);
结束
结束
[q_hat_x q_hat_y] =找到(g = = min (min (g)))
a_aircraft = aircraft_pos_m
x_old = [x_grid (q_hat_y); y_grid (q_hat_x); signal_transmit_frequency]
% ILS循环
i = 1:10 0
j = 1: n
x_target = [x_old (1);x_old (2);0]
r_loop =规范(x_target - aircraft_pos_m (j:)。”)
r_dot_loop = - (1 / r_loop) * (x_target aircraft_pos_m (j:)。“)”* (a_dot_aircraft)
%的测量
h (j, 1) = (1 - r_loop / c) * f
%偏导数
H_x1_1 = -x_old (3) / c
H_x1_2 = - (1 / r_loop) ^ 3 * a_dot_aircraft。”* (r_loop ^ 2 *眼(3)- (x_old-aircraft_pos_m (j:)) * (x_old-aircraft_pos_m (j,:)))
H_x1_3 = (1, 0, 0)
H_x1 = H_x1_1 * H_x1_2 * H_x1_3
H_x2 = H_x1_1 * H_x1_2 * (0, 1, 0)
H_x3 = 1 - (r_dot_loop / c)
H (j) = (H_x1; H_x2 H_x3]
结束
x_new = x_old +发票(H。”*发票(R) * H) * H。”*发票(R) * (z_meas-h)
如果(规范(x_new - x_old) < 1 e - 3
打破
结束
x_old = x_new
结束
它依赖于一个.mat文件我附加到这个问题。
然而,它出现在8日迭代,ILS循环开始分解并产生nan。我无法找出错误在哪里。有人能帮助我吗?我认为有很多宝贵的MATLAB学习可以获得。
谢谢你的帮助在先进!
2的评论
billyjthorton
billyjthorton 2018年10月21日
是的,这是正确的。我的歉意。

登录置评。

答案(1)

明星黾
明星黾 2018年10月22日
问题是, “x_new” 接近满溢的前夕 在下一次迭代中:
x_new = x_old +发票(H。”*发票(R) * H) * H。”*发票(R) * (z_meas-h)
x_new =
10.4757 e + 114
-44.6963 e + 114
134.5030 e + 078
我不能跟随你的代码,所以我也不能提出一个解决方案。多个矩阵反演可能导致这个问题。的解决方案 通常 mldivide, \ (链接),因为它避免了反相poorly-conditioned矩阵的不稳定。Poorly-conditioned矩阵 可以 在你的计算导致不稳定。
另外,我没有 “distdim” ,所以我创建了一个版本去做什么我假定它:
distdim = @ (x, a, b) x * 1852;

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!