【很急】求教MATLAB循环语句使用问题
在f=f1.*a1.*(1+a.*B+c*p)*(10^(-3));error=f./f4;average=mean(error,1)(误差平均值)。其中f1,a1,B,p,f4均为已知的12*1的矩阵,a,c均为变量,a的取值为a=0:0.1:3,c的取值为c=0:0.1:3,要求得出a,c在不同取值搭配的情况下,误差平均值的变化曲线,即plot3('a','c','average').
我在写程序的时候用的事while循环,可是我用while循环计算的东西在end后只能 得到循环语句里面最后一次计算的结果 我现在希望得到每次循环计算的结果 然后将他们组成一个矩阵有没有人会啊 教下我啊。下面我初步写的程序,希望有人能帮我 指点我一下
a=0;
c=0;
while (a<3)
a=a+0.1;
while(c<5)
c=c+0.1;
a1=T(:,3);
a2=T(:,4);
a3=T(:,5);
f1=T(:,9);
f2=T(:,6);
f3=T(:,7);
B=T(:,2);
p=T(:,1);
f4=T(:,10);
f=f1.*a1.*(1+a.*B+p)*(10^(-3));
error=f./f4;
average=mean(error,1);
er=abs(average-1);
av2=(error-average).^2;
var=(sum(av2)/12)^0.5;
l=var/average
end
end
下面是我T矩阵的数据。
0.4571820.9976612601826461336336.6667305.5556301.902834.318892188.30.4727731.2399682516035041336305.5556305.5556301.902834.3188925920.4892231.6160742431443501336310305.5556301.902834.3188926440.6685451.0220152539826461956336.6667297.9167301.902834.318892476.50.691921.2712952454035041956305.5556297.9167301.902834.318892795.50.7166251.6583622369443501956310297.9167301.902834.318892998.50.7749711.0462372481026462544336.6667259.375301.902834.318892696.50.8027311.3025052395235042544305.5556259.375301.902834.318892471.50.8321221.7005642310643502544310259.375301.902834.3188930020.4727731.2399682516035041336305.5556305.5556301.902834.3188923970.691921.2712952454035041956305.5556297.9167301.902834.3188927300.8027311.3025052395235042544305.5556259.375301.902834.318892973 这是基本的编程问题,与Matlab无关。
但是修改后的程序还是出现了一些问题(见程序注释),是Bug,还是其它因素?
clear all;
clc;
T = [
0.457182 0.997661 26018 2646 1336 336.6667 305.5556 301.9028 34.31889 2188.3
0.472773 1.239968 25160 3504 1336 305.5556 305.5556 301.9028 34.31889 2592
0.489223 1.616074 24314 4350 1336 310 305.5556 301.9028 34.31889 2644
0.668545 1.022015 25398 2646 1956 336.6667 297.9167 301.9028 34.31889 2476.5
0.69192 1.271295 24540 3504 1956 305.5556 297.9167 301.9028 34.31889 2795.5
0.716625 1.658362 23694 4350 1956 310 297.9167 301.9028 34.31889 2998.5
0.774971 1.046237 24810 2646 2544 336.6667 259.375 301.9028 34.31889 2696.5
0.802731 1.302505 23952 3504 2544 305.5556 259.375 301.9028 34.31889 2471.5
0.832122 1.700564 23106 4350 2544 310 259.375 301.9028 34.31889 3002
0.472773 1.239968 25160 3504 1336 305.5556 305.5556 301.9028 34.31889 2397
0.69192 1.271295 24540 3504 1956 305.5556 297.9167 301.9028 34.31889 2730
0.802731 1.302505 23952 3504 2544 305.5556 259.375 301.9028 34.31889 2973
];
a = 0;
m = 1;
while (a<3)
c = 0;
n = 1;
while(c<5)% 理论上讲应该只有50个数据,c = 5的时候,不满足条件退出,所以有效个数为50.
a1 = T(:,3);% 但实际上循环到 c = 5 时,c<5的值仍然为1.呵呵???
a2 = T(:,4);% 将循环条件改为(c<5-eps)也不行?!
a3 = T(:,5);% Matlab版本2009b
f1 = T(:,9);% 单独试验 c = 0:0.1:5, c(end)<5 逻辑值为0,是正确的。邪乎?
f2 = T(:,6);
f3 = T(:,7);
B = T(:,2);
p = T(:,1);
f4 = T(:,10);
f = f1 .* a1 .* (1 + a*B + c*p) * (10^(-3));
error = f ./ f4;
average = mean(error, 1);
er = abs(average-1);
av2 = (error-average).^2;
var = (sum(av2)/12)^0.5;
l(m,n) = var / average;
c = c + 0.1;
n = n + 1;
end
a = a + 0.1;
m = m + 1;
end 2# lin2009
呵呵大哥 谢谢你的帮助我在仔细看看哈 辛苦啦 2# lin2009
个人水平有限, 确实原因也不是很确定, 仅猜测是c=c+0.1重覆加的动作造成累计误差吧!?
工程使用上, 为避免存在这种问题而不自知, 习惯上我会使用一小量值
c=0; while(abs(c-5)>10^-10), c = c + 0.1; end; c
页:
[1]