问题是在for循环中迭代一个with step并使用那个值插入另一个方程式,然后返回到下一个with step

时间:2012-09-21 07:43:09

标签: matlab for-loop

我正在编写一个涉及Matlab中子星的长代码,我遇到了麻烦。我想做的就是创建一个for循环,我在其中求解r的等式。在进入下一个第i次迭代之前,我需要将r的单个求解值插入到另一个等式中以求解b。然后它可以回到开头,并在下一个第二步再次执行两个方程式。我似乎很难编程这个,我认为它与我如何定义我的变量有关。这是代码的一部分:

clear all;

p=input('TauesNtm1 Value?');
n=input('Nt Value?');
t=input('Taues1 Value?');

for i=(2:1:((n/2)-2)/1);
    r(i)=.5*Log10((2*p)^((1 - 2*(i - 2))/(n - 4))*(t/2)^((2*(i - 2))/(n - 4)))+(i - 2)*(((n - 4)*p-2*p-.5*t)/(n - 4));
    b(r(i))=.434294*(.190352 + 2.20509566529930*r+1.379117301391070*r^2-0.481593138241581*r^3- 0.2311271889879584*r^4+0.500820485853822*r^5-0.269537234996903*r^6-0.20063340749777*r^7+0.475894136618535*r^8-0.2831206627297433*r^9-0.2328164535174437*r^10+0.585886001688777*r^11-0.3690986055298708*r^12-0.310009361710399*r^13+0.817684785462915*r^14-0.537360306829214*r^15-0.447280339896678*r^16+1.229551315307617*r^17-0.836592197418212*r^18-0.679642677307128*r^19+1.942584991455078*r^20);
end

关于我做错了什么的想法?

1 个答案:

答案 0 :(得分:0)

你有两个错误。首先,您不能使用r引用b,因为r是实数,并且数组只能由整数值引用。你需要这样做:

b(i) = ...

而不是那样

b(r(i)) = ...

另一件事是,在b的计算中你使用r,它是一个向量。如果我理解正确,你只希望b的公式取决于r(i)。您需要将r更改为r(i)。这是结果代码:

for i=(2:1:((n/2)-2)/1);
    r(i)=.5*log10((2*p)^((1 - 2*(i - 2))/(n - 4))*(t/2)^((2*(i - 2))/(n - 4)))+(i - 2)*(((n - 4)*p-2*p-.5*t)/(n - 4));
    b(i)=.434294*(.190352 + 2.20509566529930*r(i)+1.379117301391070*r(i)^2-0.481593138241581*r(i)^3- 0.2311271889879584*r(i)^4+0.500820485853822*r(i)^5-0.269537234996903*r(i)^6-0.20063340749777*r(i)^7+0.475894136618535*r(i)^8-0.2831206627297433*r(i)^9-0.2328164535174437*r(i)^10+0.585886001688777*r(i)^11-0.3690986055298708*r(i)^12-0.310009361710399*r(i)^13+0.817684785462915*r(i)^14-0.537360306829214*r(i)^15-0.447280339896678*r(i)^16+1.229551315307617*r(i)^17-0.836592197418212*r(i)^18-0.679642677307128*r(i)^19+1.942584991455078*r(i)^20);
end