Индекс находится вне границ массива - C# (185325)
Формулировка задачи:
Добрый день, у меня проблема , индекс находится вне границ массива всё облазил не смог найти ответа, точнее причина понятна но не могу решить проблема самостоятельно. Прошу помощи.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Дипломная_работа_Функционал
{
public class Functional
{
private const double penalty = 10;
private double Sqr(double x)
{
return x * x;
}
private double Cub(double x)
{
return x * x * x;
}
private double max(double x, double y)
{
return (x > y) ? x : y;
}
private double Constraint(double[] x, int index)
{
switch (index)
{
case 1:
return max(0, x[1] + 500 * x[2] + 75 * x[3] - 1250);
case 2:
return max(0, x[1] - 360);
case 3:
return max(0, x[2] - 3);
case 4:
return max(0, x[3] - 7);
case 5:
return max(0, -x[1]);
case 6:
return max(0, -x[2]);
case 7:
return max(0, -x[3]);
default:
return 0;
}
}
public double TargetFunction(double[] x)
{
double value = 1 - (2 * x[1] + Sqr(x[2]) + Sqr(x[3])) * Math.Log(1 + 360 / (Math.Pow(x[1], 1.1) + Sqr(x[2]) + Sqr(x[3]) + 1)) / 360;
for (int i = 1; i <= 7; i++)
{
value += penalty * Sqr(Constraint(x, i));
}
return value;
}
}
class Program
{
static void Main(string[] args)
{
Functional test = new Functional();
double[] parametrs = new double[] {180.0, 1.5, 3.5};
Console.WriteLine(test.TargetFunction(parametrs));
Console.ReadKey();
}
}
}Решение задачи: «Индекс находится вне границ массива»
textual
Листинг программы
double value = 1 - (2 * x[0] + Sqr(x[1]) + Sqr(x[2])) * Math.Log(1 + 360 / (Math.Pow(x[0], 1.1) + Sqr(x[1]) + Sqr(x[2]) + 1)) / 360;