该代码用于绘制NACA机翼.打印YC时,我收到了限制错误

The code is for to plot naca airfoil. I received the out of bound error when printing yc

本文关键字:错误 绘制 用于 代码 NACA 机翼 YC 打印      更新时间:2023-10-16

此代码用于循环通过将x的值放在等式中来查找yc的值。错误是"错误:mat :: operator():index out dound of dound of dercation in抛出" std :: logic_error"的实例what():mat :: operator():从范围索引"。

#include<iostream>
#include<armadillo>
#include<vector>
using namespace std;
using namespace arma;
int main()
{
float a[3];
float c;
int gp = 100;
cout << "Please Enter NACA 4 digits" << endl;
cout << "Please Enter 1st digit" << endl;
cin >> a[0] ;
cout << "Please Enter 2nd digit" << endl;
cin >> a[1] ;
cout << "Please Enter last 2 digits" << endl;
cin >> a[2] ;
cout << "Please Enter Chord Length" << endl;
cin >> c;
float m=(a[0]*c)/100;
float p=(a[1]*c)/10;
float t=(a[2]*c)/100;
cout << m << endl;
cout << p << endl;
cout << t << endl;
vec x = linspace<vec>(0, c, gp);
vec yc = linspace<vec>(0, 1, gp);
for(int i=0;i<=100;i=i+1)
    {
        if (x(i)=0 && x(i) <= p){
        cout<< x(i)<<endl;
        yc(i)= (m/(p*p))*(2*p*(x(i))-(x(i)*x(i)));
    }
        else {
        yc(i)=(m/((1-p)*(1-p)))*((1-(2*p))+(2*p*x(i))-(x(i)*x(i)));
    }
    }
cout<<yc<<endl;
return 0;
}

linspace<vec>很可能是基于零的数组。有100个元素,最后一个索引为99。

因此,替换

for(int i=0;i<=100;i=i+1)

for(int i=0;i<100;++i)

我替换了i=i+1,因为我发现该符号难以忍受。