【发布时间】:2013-05-29 20:27:51
【问题描述】:
我正在尝试获取 p(4) 的值(对此感到抱歉)
等式如下所示: 4800+p1+p2*z/1000+p3*e^(-p4*z/1000)
我不断收到此错误: 试图访问 p(4);索引超出范围,因为 numel(p)=3。
waves 中的错误(第 32 行) xy1 = 4800+5.6596+14.5820/1000*xs+257.4318*exp(-p(4)/1000);
如何更改 numel 中的“边界”,或者我可以做些什么来解决这个问题?
代码
z = [0.0; 500; 1000; 1500; 2000; 2500; 3000; 3500; 4000; 5000; 6000; 7000; 8000; 9000; 10000; 11000; 12000];
y = [5050 4980 4930 4890 4870 4865 4860 4860 4865 4875 4885 4905 4920 4935 4950 4970 4990]'-4800 ;
A = [ones(numel(z),1) z./1000 exp(-z./1000)];
p = A\y;
norm(p);
y = y+4800;
xs = 0:1:12000;
xy = 4800+5.6596+14.5820/1000*xs+257.4318*exp(-p(4)/1000);
subplot(2,2,4), plot(z,y,'o')
hold on
subplot(2,2,4), plot(xs,xy);
title('p4')
编辑::::::::
我首先有这个,其中 p4 有一个起始猜测(值)(p4=1),然后我将 p1,p2,p3 结果放入一个新文件中尝试求解 p4,就是上面的代码。
z = [0.0; 500; 1000; 1500; 2000; 2500; 3000; 3500; 4000; 5000; 6000; 7000; 8000; 9000; 10000; 11000; 12000];
y = [5050 4980 4930 4890 4870 4865 4860 4860 4865 4875 4885 4905 4920 4935 4950 4970 4990]'-4800 ;
A = [ones(numel(z),1) z./1000 exp(-z./1000)];
p = A\y;
norm(p);
y = y+4800;
xs = 0:1:12000;
xy = 4800+p(1)+p(2)/1000*xs+p(3)*exp(-xs/1000);
subplot(2,2,1), plot(z,y,'o')
hold on
subplot(2,2,1), plot(xs,xy);
title('p1,p2,p3')
【问题讨论】:
-
你想在这里做什么?好吧,因为
A在这里是17 x 3,y是17 x 1,p将是3 x 1,而您正在尝试访问不存在的p(4)。 -
我正在尝试获取 p(4) 的值
-
所以你期望
p是一个4 x 1矩阵?你能解释一下 p 应该是什么吗? -
是的,那是正确的 (4x1),因为你说的第一件事是 (3x1),然后 p(4) 就不见了。 p 只是一个变量,但应该产生 1.* 的东西
-
您是否要为向量
p求解方程y = A*p?或者您是否试图将A中的值除以y中的值(正如@Huguenot 建议的那样)?