AMPL. Ошибка появляется на некоторых переменных, но нет других - PullRequest
0 голосов
/ 14 октября 2019

Мне нужно определить функцию sinc https://en.wikipedia.org/wiki/Sinc_function в амплитуре. Для этого я должен определить if-else. Я сделал это, как на странице 462 книги https://ampl.com/BOOK/CHAPTERS/24-refman.pdf. Однако, как только я запускаю свою программу, появляется сообщение об ошибке.

Функция sinc должна быть оценена для всех значений x. Как было сказано ранее, я использовал оператор if-else с условием, оцененным для всех значений i, что я и использую для подсчета количества уже выполненных шагов.

Моя ошибка появляется на i следующим образом:

i не определен контекст: var argA >>> = x1 [i] <<<; </p>

Iне понимаю почему, так как я использовал ту же запись в предыдущих строках, и она работает.

Здесь я определяю размер шага:

param n;

let n :=30;
set N  := {0..n by 1};

Здесь яопределить шаг и переменную x1, которая равна x.

var step >=0;
var x1 {N};
var SincA {N};

Это фрагмент кода, в котором я использую x1 [i] и некоторые другие переменные без каких-либо проблем

var f1 {i in N} = w_x*x2[i]^3+u1[i];
var f2 {i in N} =  u2[i];
var midx1 {i in N1}     = 0.5*(x1[i]+x1[i+1]) + step/8*(f1[i]-f1[i+1]);

И, наконец, здесь я показываю, где проблема

if abs(x1[i]) <=1e-8 then SincA[i]=1 else SincA[i]=sin(x1[i])/x1[i];

Там, где появляется вышеупомянутое сообщение об ошибке.

Я хотел бы знать, почему сообщение об ошибке появляется в последней строке представленного кода, но не в остальных. Насколько я понимаю, я не использую переменные по-другому.

...